如何实现回合制游戏引擎?


17

让我们想象一下诸如《魔法门之英雄无敌》,《猎户座大师》等游戏,或者您选择的回合制游戏。下一回合背后的游戏逻辑是什么?是否有任何有关该主题的材料或书籍可供阅读?具体来说,让我们想象一下游戏循环:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

所有这些都被每秒叫60次。但是回合制怎么进入这里呢?我可能想象在gameLogic()中有一个类似endTurn()的函数在玩家单击该按钮时发生,但是我该如何处理所有这些?需要洞察力。

Answers:


21

回合制游戏将由状态机控制。基本上,您将布置一系列可以按逻辑顺序出现的状态。

在较高的级别上,玩家的回合可以是新状态的开始,然后是该回合中允许的所有可能动作。

例如

  • 状态-变更球员
    • 现在轮到玩家1了
  • 允许采取的行动
    • 攻击
      • 选择要攻击的敌人
    • 保卫
      • 选择要防守的单位
    • 移动单位
      • 选择要移动的单位
      • 检查以确保允许移动
    • 等等

显然,这将很快激增,因为我仅草拟了一个极其有限的计划。尽早掌握可能的状态将意味着您应该处于良好的实施位置。我非常强调要准确地描绘出您希望游戏的运行方式。...一款出色的回合制游戏需要大量的IMO计划。


我的一个相当老的学校项目,在《最终幻想战术》中进行了3个月的开发尝试:)如上所述使用状态机(实际上是em的一些)。sourceforge.net/projects/bpfat
James

嘿,基于回合制策略的Game Engine怎么样?你能建议什么吗?可能虚幻引擎适合吗?
Rantiev

给每个人自己。如果您对虚幻引擎感到满意,那没有什么错。仅取决于您要利用的机制。快速搜索表明,虽然不是免费的,但存在用于Unreal引擎的工具包,该工具包可帮助创建基于回合的策略游戏。
the_e

3

我最近建立了一个类似回合制策略游戏,类似于Orion Master(目前只有单人游戏,多人游戏会稍微复杂一些,但类似的想法),这就是endTurn函数逻辑的样子(在我的游戏中游戏控制器主类):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

我的播放器回合功能将执行该播放器特有的功能,不受播放器之间的顺序影响:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

这些功能在适当的地方返回状态消息和/或触发事件,以便GUI可以显示转弯时发生的情况或让玩家知道计算机已被破坏等。


您能否提供源代码只是为了结帐?会很有帮助的。仅出于教育目的。
德沃

@Dvole我目前正在使用HTML5 canvas标签将代码从Silverlight / C#转换为JavaScript。完成后,我计划开放源代码,到那时,我们非常欢迎您确切地了解我是如何实现此功能的。如果有帮助,您可以在这里玩我的太空策略游戏:星际之星
马特·帕默里

2
@Dvole花了我很多时间,但是我只是开源了Astriarch的Silverlight版本。如果您仍然感兴趣,可以从github此处下载源代码:github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.