问题 我应该使用哪种方法来表达计算机在编程时的想法?


我想创建一个简单的游戏,比如人类用户正在玩电脑的井字游戏。计算机功能运行需要几毫秒,但我想让计算机感知需要5秒才能完成。我应该使用哪种方法?

1)创建两个内存线程。一个用于计算机,一个用于人类用户。当计算机花5秒钟模仿思考时,人类用户线程暂停5秒钟。

2)使用timer或dispatchertimer禁用输入设备5秒钟

3)你能想到的任何更好的方法..

谢谢!

编辑 - 问题是关于如何以及现在为什么。 5秒只是一个例子。我更喜欢1-2秒,但出于示例目的,我只选择了5.所以请关注最好的方法,而不是5秒钟。再次感谢。


4156
2018-04-20 07:20


起源

5秒是一个终身! - Anthony Pegram
无论你做什么,给出一些视觉指示,表明事情正在发生! - nos
我只用5秒作为这个问题的一个例子:)它可以是任何真的。 - EverTheLearner


答案:


噪音和闪烁的灯光=数字思想。

通过无限循环将CPU调高至100%以产生热量。

开始循环遍历所有文件以使硬盘驱动器指示灯闪烁并产生旋转噪音。

运行shell命令将目录更改为光驱以使光驱旋转。

设置大写锁定,numlock和滚动锁定开启和关闭,一些键盘有灯。

检查您的主板是否支持任何额外的闪烁灯。

啊!好点子。许多粉丝都有API访问权限,所以将粉丝打开到100%很酷。恢复正常可能是危险的,因为如果你不小心关掉风扇,可能会造成严重的损坏。


4
2018-04-20 21:06



给你的GPU做点什么。我的显卡风扇听起来像真空吸尘器:-) - Incredulous Monk


你可以把光标变成一个沙漏并禁用主窗体(这将阻止用户输入任何东西),启动一个计时器5秒(我可以让这个时间配置),当计时器启动时启用主窗体和再次将光标设置恢复正​​常。像这样的东西:

当用户移动时调用此方法:

private void UserHasMoved()
        {
        Enabled = false;
        timer1.Interval = 5000;
        timer1.Start ();            
        }

那么计时器的事件:

private void timer1_Tick(object sender, EventArgs e)
        {
        Enabled = true;
        timer1.Stop ();
        }

3
2018-04-20 07:24





对于速度更快的球员来说这不会让人烦恼吗?也许是转牌的第二个,但你很快就会发现5秒钟 太多了。 无论哪种方式,都不要暂停UI线程,因为界面会“冻结”。


2
2018-04-20 07:24





因为人类使用GUI作为其接口,所以不能暂停其线程。暂停GUI线程会使表单无法重新绘制,从而无法显示计算机的移动。

我只是禁用所有与游戏相关的输入,并显示计算机运行其大脑的动画。


1
2018-04-20 07:24



还是进度条? - anonymous
从技术上讲,这也是一个动画:P - C.Evenhuis
确实如此......但进度条(和某些动画)显示了玩家必须等待的时间 - anonymous


两个非常重要的可用性原则:

  • 不要阻止UI线程!仅禁用游戏控制,以便玩家在思考过程中无法执行任何步骤。
  • 向用户显示视觉反馈,表明思考并且他暂时无法执行该步骤。

当然,要仔细平衡思考的确切时间。将球员的时间视为非常珍贵。


1
2018-04-20 21:09





从您的问题来看,您似乎不希望计算机游戏如此闪电,人类玩家无法看到它。为此,为什么不显示一些显示可能的播放的随机动画,并最终为所选动作设置动画。

编辑: 我不得不同意禁用输入设备有点苛刻。也许将应用程序切换到用户的任何输入都不会影响电路板的状态,但会影响其他命令,例如保存,重启或退出。


1
2018-04-20 19:01