gpt4 book ai didi

在基于 Linux 的系统中使用 C 创建具有 2 个玩家和裁判(进程)的 "game"

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:33 25 4
gpt4 key购买 nike

我现在正在尝试为基于 Linux 的系统创建一个游戏,其中包含三个进程:

  1. 裁判 - 主要过程
  2. Blue Player - 第一个子进程
  3. Red Player - 第二个子进程

当然这两个子进程是使用fork()函数创建的。

现在一切都已创建,我正在使用共享内存来存储板和三个进程共有的更多变量。

我的问题是,当我试图考虑如何实现回合制游戏时 - 我创建了一个通用 bool 变量来指示游戏是仍在进行还是已完成,并决定谁该轮到它.

现在我们进入共享部分,我已经暂停了两个子进程并向第一个子进程发送了一个信号以“唤醒他”,但是从现在开始我如何将所有三个进程保持在一起并同步(裁判唤醒第一个进程,它完成转弯并暂停,然后裁判唤醒第二个,依此类推......)

我想我必须将那部分保留在某种 while(game_finished == FALSE) 循环中,但从那里我被卡住了。

我如何按照我刚才解释的方式实现该游戏?谢谢。

最佳答案

有多种选择,但忙等待是最糟糕的选择之一。您可以考虑基于共享信号量构建的解决方案,但我会选择基于管道的解决方案。进程将阻止对当前没有可用数据的打开文件描述符执行读取,因此这是一种让各个进程相互等待以轮流执行的简单方法。

只需在裁判进程和每个玩家进程之间的各个方向创建管道即可。在每一轮,每个玩家进程都会尝试从裁判读取一个字节。直到裁判在管道的末端写了一些东西,它才会继续。作为奖励,写入的字节可以传达额外的数据/指令,例如,区分“开始游戏”和“游戏结束”。当然,同样的同步也适用于另一个方向。

关于在基于 Linux 的系统中使用 C 创建具有 2 个玩家和裁判(进程)的 "game",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240686/

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