Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以不同的方式使用程序的两部分_C#_Multithreading_Pacman - Fatal编程技术网

C# 以不同的方式使用程序的两部分

C# 以不同的方式使用程序的两部分,c#,multithreading,pacman,C#,Multithreading,Pacman,实际上,我正在编写一个pacman(C#控制台)的代码,我想知道如何每秒移动我的幽灵,但我也希望能够随时移动我的pacman 我希望我的鬼魂在每一秒都继续盘旋——无论吃豆人做什么,我应该能够随时移动吃豆人,而鬼魂只需要每一秒都移动 我想我必须使用线程系统,所以我想知道您是否知道我必须如何进行以及线程如何工作,但找不到任何相关信息:s.您不需要为每个重影使用不同的线程。这一切都可以在一个线程上使用 从编程的角度来看,任何游戏的核心部分都是 游戏循环。游戏循环允许游戏平稳运行 不管用户是否输入 大多


实际上,我正在编写一个pacman(C#控制台)的代码,我想知道如何每秒移动我的幽灵,但我也希望能够随时移动我的pacman

我希望我的鬼魂在每一秒都继续盘旋——无论吃豆人做什么,我应该能够随时移动吃豆人,而鬼魂只需要每一秒都移动


我想我必须使用线程系统,所以我想知道您是否知道我必须如何进行以及线程如何工作,但找不到任何相关信息:s.

您不需要为每个重影使用不同的线程。这一切都可以在一个线程上使用

从编程的角度来看,任何游戏的核心部分都是 游戏循环。游戏循环允许游戏平稳运行 不管用户是否输入

大多数传统软件程序响应用户输入并执行 没有它什么都没有。例如,字处理器格式化字和字符 用户输入的文本。如果用户没有键入任何内容,则 处理器什么也不做。某些功能可能需要很长时间才能完成 完成,但所有操作都是由用户通知程序执行的 什么

另一方面,游戏必须继续运行,而不受环境影响 用户的输入。游戏循环允许这样做。高度简化的游戏 伪代码中的循环可能如下所示:

while( user doesn't exit ) check for user input run AI move enemies resolve collisions draw graphics play sounds end while while(用户不退出) 检查用户输入 运行人工智能 移动敌人 解决冲突 画图 播放声音 结束时 游戏循环可能会随着游戏开发而细化和修改 进步,但大多数游戏都基于这一基本理念


遵循这种模式,您的游戏将更容易编写。

您可能会感到困惑,因为
Console.ReadKey()
阻塞的…所以您的游戏循环将被卡住,等待用户按下一个键,对吗?如果队列中已有一个击键,则只需使用ReadKey()获取击键。这可以通过Console.KeyAvailable检查,如果钥匙已经存在,则返回true。这样,如果没有按下任何键,游戏循环就会继续循环…但是你仍然可以捕捉它并用它做些事情。试试这个快速的例子,看看会发生什么:

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            System.Threading.Thread.Sleep(250);
            Console.Write(".");
            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo key = Console.ReadKey(true); // read key without displaying it
                Console.WriteLine("");
                Console.WriteLine("Key Pressed: " + key.KeyChar.ToString());
            }
        }
    }
}

终于找到了我真正需要的:

Console Pacman
:您考虑过使用吗?我考虑过^^但我需要使用学校的Console应用程序我已经编辑了您的标题。请看,“一致”是“不,他们不应该”。“约翰桑德斯,我喜欢每个人都提到这个问题的短语,完全相同的方式。”PAPDULKK:我会认为这是“真诚的奉承”。问题是,如果我决定不嘲笑我的PACMAN,鬼魂就会被冻结:这不是它的工作原理。移动pacman将在
解决冲突
步骤中。如果pacman不移动,该函数就不会执行任何循环操作。