我想创建一个简单的游戏,例如人类用户正在与计算机对战的tic tac toe。计算机功能需要几毫秒才能运行,但我想让计算机感知需要5秒才能完成。我应该使用哪种方法?
1)创建两个内存线程。一个用于计算机,一个用于人类用户。当计算机花5秒钟模仿思考时,人类用户线程暂停5秒钟。
2)使用timer或dispatchertimer
禁用输入设备5秒钟3)你能想到的任何更好的方法......
谢谢!
编辑 - 问题是关于如何以及现在为什么。 5秒就是一个例子。我更喜欢1-2秒,但出于示例目的,我只选择了5.所以请关注什么是最好的方法,而不是5秒。再次感谢。
答案 0 :(得分:4)
噪音和闪烁的灯光=数字思维。
使用无限循环将CPU调高至100%以产生热量。
开始循环浏览所有文件,以使硬盘驱动器指示灯闪烁并产生旋转噪音。
运行shell命令将目录更改为光驱以使光驱旋转。
设置大写锁定,numlock和滚动锁定开启和关闭,一些键盘有灯光。
检查您的主板是否支持任何额外的闪烁灯。
啊!好点子。许多粉丝都有API访问权限,所以将粉丝打开到100%很酷。恢复正常可能会很危险,因为如果你不小心关掉风扇,可能会造成严重损坏。
答案 1 :(得分:3)
你可以将光标变成沙漏并禁用主窗体(这将阻止用户输入任何东西),启动计时器5秒(我可以将此时间设置为可配置),当计时器启动时启用主窗体并再次将光标恢复正常。像这样:
当用户移动时调用此方法:
private void UserHasMoved()
{
Enabled = false;
timer1.Interval = 5000;
timer1.Start ();
}
然后是计时器的事件:
private void timer1_Tick(object sender, EventArgs e)
{
Enabled = true;
timer1.Stop ();
}
答案 2 :(得分:2)
对于速度更快的玩家来说这不会让人烦恼吗?可能是转牌的第二个,但你很快就会发现5秒太多。 无论哪种方式,都不要暂停UI线程,因为界面会“冻结”。
答案 3 :(得分:1)
由于人类使用GUI作为其界面,因此您无法暂停其线程。暂停GUI线程会使表单无法重新绘制,从而无法显示计算机的移动。
我只是禁用所有与游戏相关的输入,并显示计算机运行其大脑的动画。
答案 4 :(得分:1)
从您的问题来看,您似乎不希望计算机游戏如此闪电,以至于人类玩家无法看到它。为此,为什么不显示一些显示可能的播放的随机动画,并最终为所选择的动作设置动画。
编辑:我不得不同意禁用输入设备有点苛刻。也许将应用程序切换到用户的任何输入都不会影响电路板的状态,但会影响其他命令,例如保存,重启或退出。
答案 5 :(得分:1)
两个非常重要的可用性原则:
当然,要仔细平衡思考的确切时间。把球员的时间视为非常珍贵。