gpt4 book ai didi

基于控制台时间的引擎

转载 作者:行者123 更新时间:2023-11-30 17:55:25 25 4
gpt4 key购买 nike

我想为我的控制台应用程序制作“引擎”,它将计算耗时,并在经过一定时间后强制应用程序执行基于时间的事件。我考虑创建一个简单的基于文本的策略游戏用于教育目的(不是为了家庭作业,只是为了我)。

我尝试创建引擎,但没有走得太远。我不知道如何应用基于时间的事件来中断应用程序等中当前待处理的操作,首先这是我的制作方法:

#include <stdio.h>
#include <conio.h>
#include <Windows.h>
void _sleep(int t);
int main()
{
int seconds_passed = 0; //counts how much time passed since application started
while(1)
{
//if(seconds_passed == 100) ... time based action
_sleep(1000);
printf("test");
seconds_passed += 1;
}

return 0;
}


void _sleep(int t)
{
int i;
for (i = 0; i < (t/100); i++)
{
Sleep(100);
if (kbhit()!= 0)
{
getch();
break;
}
}
}

我尝试从 windows.h 中创建类似于 Sleep() 的函数,但是能够在按下按键时中断延迟(我不知道我是否走正确的路) - 在循环中它将开始“时间” pass”,但我希望它独立于代码的其余部分,因此它将默默地工作并控制代码其余部分的操作。我需要以下任何方面的帮助:

-使用键盘中断 _sleep() 函数不应自动增加“经过的秒数”量

-如何使计时器独立于代码中发生的操作?我想过创建一些可以每秒中断整个 while(1) 循环的东西(可能是我修改过的 _sleep 函数),增加计数器并返回到它中断的代码部分(它会滥用应用程序中的 scanf() 操作)但目前这不是问题)

-我听说 select() 函数可能在这里有用,有人对此有任何经验并可以告诉我更多吗?

最佳答案

不知道这是否是一个可用的答案,但是当我构建一个基本游戏时,我以这种方式将其设为多线程:

  1. 事件线程会将消息推送到线程安全消息上当用户执行某些操作时排队。
  2. “游戏”线程读取消息队列,处理数据,将输出呈现到屏幕,然后休眠一定时间。

通过这种方式,事件线程可以保持阻塞状态,直到发生用户输入为止,同时游戏逻辑和输入/输出以简单的同步方式完成。Windows 有一个您可以使用的线程库(尽管我还没有使用过该库,因为我总是在 Linux 上使用 boost 线程或 posix 线程。)

关于基于控制台时间的引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14344741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com