Questions tagged «turn-based»

一个单元或一组单元执行一个动作,而其他所有内容仅能对执行的动作做出反应。然后下一个单位或一组单位可以采取行动。

8
回合制游戏中近战报复背后的设计原理是什么?
我已经看过很多回合制游戏,其中对另一个单位的近战攻击会导致被攻击单位也对攻击单位造成伤害,而远程攻击不会受到这种“报复”机制的影响。 例子包括《魔法门之英雄无敌》系列,《文明》系列,新的《国王的赏金》系列等等。 是否有特定的设计原因?对被攻击单位进行一次额外的攻击,而又不必花费其轮流行动,其背后的理由是什么?为什么将远程攻击排除在报复之外?

18
基于回合制的策略游戏,实时发生动作?[关闭]
好的,这个想法现在已经在对话中第三次出现了,已经困扰了我很多年了。这个想法是一款游戏,其中所有玩家在游戏处于暂停状态时都向单位做出决策/下达命令,并且所有动作都立即实时执行。从TRPG(即最终幻想战术)到小规模的小规模冲突(即蠕虫),到具有多个基地和多个单位的游戏(即Advance Wars),再到风险类型的游戏(即Risk),可能处于任何级别。 )。 我可以看到的主要缺点是玩家无法立即看到动作的结果。在传统的回合制或实时策略游戏中,用户单击“愚蠢的攻击”,马上就会发生爆炸。可能还会出现一些奇怪的情况(例如,您将单元发送给以相反方向运行的单元进行混战),但这是一个低级的细节。一个好的游戏设计师应该能够解决这些问题。最后,回合制游戏通常很少,但是它们提供的战术深度在实时战略游戏中是不可能的,并且总是有市场的(每年都会出现数十种新的TBS)。 有没有使用这种范例的游戏? 为什么没有更多? 进行这项工作需要什么? 您可以预见哪些潜在问题? 澄清一下,我的意思是纯粹的策略。这些命令是预先输入的,分辨率是实时的,但不需要玩家实时输入“抽动”。 编辑: Iain的答案将我引向了Laser Squad Nemesis,它基本上回答了第二个和第四个问题;-P-如果您想知道为什么这行不通,请下载演示(9MB)并单击第一个教程。哎哟!当然,Laser Squad Nemesis的用户界面无济于事(播放和暂停按钮?是认真的吗?如果这是我唯一要做的事情,为什么我每次都要单击“发出订单”?) 对于简单的事情(例如几个答案中提到的棋盘游戏,或Iain创建的Zwok),此范例非常有用!在更传统的战术/战略游戏中似乎出现了问题,因为命令输入与命令执行之间存在明显的滞后。实际上Zwok-以及上面提到的一些棋盘游戏- 之所以起作用,是因为摆脱了这一滞后,尽管如此。鼓励您猜测对手接下来会做什么,然后“思考一下”。但是,在更传统的小型战术策略游戏中,挫败因素是不值得的。 这可能是有趣的,看看在这样的比赛真的很大规模。例如,李和拿破仑并没有实时命令他们的部队,而是根据往往是数小时之久的信息做出决策,而执行这些命令通常要花费数小时。即使在今天,将军们也没有实时的自上而下的地图。但是,要消除这种“挫败因素”,就需要进行一些精巧的游戏设计。

4
在基于回合的游戏或Roguelikes中计算击中次数的属性
我试图找出一个很好的公式来确定玩家以Roguelike攻击敌人时的命中率。我想提出一些简单的方法,但仍然要遵循D&D或AngBand或NetHack等流行Roguelike的方法。 到目前为止,我所要做的就是添加玩家和敌人属性之间的差异,以及一个随机整数: if ((player.dex - enemy.dex) + (player.speed - enemy.speed) + (player.luck - enemy.luck) + random_integer_below_6()) >= 10) { hit(enemy); } 这造成了不自然的游戏玩法:玩家永远不会错过弱小的敌人,反之亦然。有谁知道回合制游戏中使用的基于属性的战斗指南?我应该(也可以)逐字复制D&D规则吗?

3
回合制游戏的设计,其中动作有副作用
我正在编写游戏Dominion的计算机版本。这是一种基于回合制的纸牌游戏,其中动作卡,宝物卡和胜利点卡累积在玩家的个人卡组中。我已经很好地开发了类结构,并且我开始设计游戏逻辑。我正在使用python,稍后可能会在pygame中添加一个简单的GUI。 玩家的回合顺序由一个非常简单的状态机控制。顺时针旋转通过,玩家无法在游戏结束之前退出游戏。单圈游戏也是一种状态机。通常,玩家经历“行动阶段”,“购买阶段”和“清理阶段”(按此顺序)。根据问题的答案,如何实现回合制游戏引擎?在这种情况下,状态机是一种标准技术。 我的问题是,在玩家的动作阶段,她可以使用对自己或其他一个或多个玩家有副作用的动作卡。例如,一张动作卡允许玩家在当前回合结束后立即进行第二回合。另一张动作牌会使所有其他玩家从其手上弃掉两张牌。在当前回合中,还有另一张动作卡不起作用,但允许玩家在下一回合中抽出额外的卡。为了使事情变得更加复杂,游戏中经常会有新的扩展添加新的牌。在我看来,将每个动作卡的结果硬编码到游戏的状态机中既丑陋又不适应。回合制策略循环的答案 并未详细介绍解决该问题的设计。 我应该使用哪种编程模型来包含一个事实,即转弯时的一般模式可以通过转弯内发生的动作来修改?游戏对象是否应该跟踪每张动作卡的效果?或者,如果卡应实现自己的效果(例如,通过实现接口),则需要什么设置才能赋予它们足够的功率?我已经想出了一些解决此问题的方法,但是我想知道是否存在解决该问题的标准方法。具体来说,我想知道哪个对象/类/什么负责跟踪每个玩家由于打出一张动作卡而必须执行的动作,以及与正常顺序中的临时更改有何关系转弯状态机。

2
如何实现回合制游戏引擎?
让我们想象一下诸如《魔法门之英雄无敌》,《猎户座大师》等游戏,或者您选择的回合制游戏。下一回合背后的游戏逻辑是什么?是否有任何有关该主题的材料或书籍可供阅读?具体来说,让我们想象一下游戏循环: 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()的函数在玩家单击该按钮时发生,但是我该如何处理所有这些?需要洞察力。
17 turn-based 

6
同时将玩家移至同一广场?
考虑一个2 x 2的正方形网格。在以下情况下,玩家可以移动到广场上: 没有其他玩家想在下一回合进入广场 没有其他玩家等待,并且此回合仍在占据广场 我已包含上面的图像来描述我的问题。 玩家同时移动。 如果2个(或更多)玩家尝试移动到相同的正方形,则两个都不移动。
15 turn-based 

1
台式机是否有基于回合的游戏服务(例如iOS上的GKTurnBasedMatch)?
Game Center的GKTurnBasedMatch似乎为处理回合制游戏提供了非常强大的服务,而OpenFeint似乎也有类似的功能。问题是,我想要在桌面上使用类似的东西。我本来打算在Rails上滚动我自己的基于REST的服务,但是在查看了GameKit文档之后,我意识到要花很长的时间才能使它牢固。我不认为在搜索中已经错过了类似的东西吗?

3
是否存在用于编写通过套接字与n个客户端通信的基于回合的服务器的模式?
我正在使用一种通用游戏服务器,该服务器可以为任意数量的TCP套接字网络客户端在玩游戏时管理游戏。我有一个“设计”与管道胶带一起被破解,但它既脆弱又不灵活。对于如何编写健壮而灵活的客户端/服务器通信,是否存在一种完善的模式?(如果没有,您将如何改善下面的内容?) 大概我有这个: 设置游戏时,服务器为每个玩家套接字提供一个线程,以处理来自客户端的同步请求和来自服务器的响应。 然而,一旦游戏开始,除了一个睡眠之外,所有线程都将循环,并且该线程一次循环遍历所有玩家,以传达有关其行动的信息(反向请求响应)。 这是我目前所拥有的图表;单击以获取较大的版本/可读的版本,或单击66kB PDF。 问题: 它要求玩家用正确的信息准确地依次做出回应。(我想我可以让每位球员随机回应,只有在他们给我有效举动后才继续前进。) 除非轮到他们,否则不允许玩家与服务器交谈。(我可以让服务器向他们发送有关其他播放器的更新,但不处理异步请求。) 最终要求: 性能不是最重要的。这将主要用于非实时游戏,并且主要用于使AI相互对抗,而不是抽动的人。 游戏将始终基于回合制(即使分辨率很高)。每个玩家总是在其他所有玩家获得回合之前获得一招。 服务器服务器的实现恰好在Ruby中,如果有所不同的话。

7
象棋一样的AI真的不适用于回合制策略游戏吗?
显然,尝试将最小-最大算法应用于完整的动作树仅适用于小型游戏(我向所有国际象棋爱好者表示歉意,“小”并不表示“简单化”)。对于典型的回合制策略游戏,其中棋盘通常宽于100块并且一侧的所有棋子都可以同时移动,因此,最小-最大算法不适用。 我想知道是否将局部最小-最大算法限制为每个深度的N个板配置还不够好?使用遗传算法,可能有可能找到许多对评估功能有用的电路板配置。希望这些配置也可以很好地实现长期目标。 如果以前没有想到并尝试过,我会感到惊讶。有吗 它是如何工作的?
13 ai  turn-based 

3
如何在回合制游戏中提升实体组件的游戏状态?
到目前为止,我所使用的实体组件系统的工作原理基本上类似于Java的artemis: 组件中的所有数据 无状态独立系统(至少达到在初始化时不需要输入的程度)对仅包含特定系统感兴趣的组件的每个实体进行迭代 所有系统都处理它们的实体一tick,然后整个过程重新开始。 现在,我尝试将其首次应用于基于回合的游戏,在继续进行之前,必须以相对于彼此的固定顺序进行大量事件和响应。一个例子: 玩家A受到剑的伤害。对此,A的装甲可以踢进并降低受到的伤害。由于变得越来越弱,A的移动速度也会降低。 所遭受的损害是引起整个互动的原因 必须先计算护甲并将其应用于即将来临的伤害,然后再将伤害应用于玩家 直到实际造成伤害之后,才能将移动速度降低应用于某个单位,因为它取决于最终伤害量。 事件还可以触发其他事件。使用装甲减少剑的伤害会导致剑破碎(这必须在伤害减少完成之前进行),进而会引起其他事件,这实际上是对事件的递归评估。 总而言之,这似乎导致了一些问题: 很多浪费的处理周期:大多数系统(保存总是运行的东西,例如渲染)在没有“轮到他们”工作的时候根本没有任何值得做的事情,并且花费大部分时间等待游戏进入有效的工作状态。这会给每个这样的系统带来很多麻烦,随着越来越多的状态添加到游戏中,这些检查会不断增长。 为了确定系统是否可以处理游戏中存在的实体,他们需要某种方式来监视其他不相关的实体/系统状态(负责处理损害的系统需要知道是否已使用装甲)。这要么使系统承担多重责任,要么产生对其他系统的需求,而没有其他目的,只能在每个处理周期之后扫描实体集合,并通过告诉侦听器何时可以做某件事与一组侦听器进行通信。 以上两点假设系统在同一组实体上运行,最终使用其组件中的标志更改状态。 解决此问题的另一种方法是,由于单个系统的工作而增加/删除了组件(或创建了全新的实体),从而提高了游戏状态。这意味着,每当系统实际具有匹配实体时,它都知道可以对其进行处理。 但是,这使系统负责触发后续系统,因此很难对程序行为进行推理,因为单个系统交互不会导致错误的出现。添加新系统也变得更加困难,因为无法在不知道它们如何影响其他系统的情况下无法实施它们(并且可能必须修改先前的系统以触发新系统感兴趣的状态),这有点违反了拥有单独系统的目的一个任务。 这是我必须忍受的东西吗?我所看到的每个ECS示例都是实时的,并且很容易看到这种“每游戏一个迭代”循环在这种情况下的工作方式。而且我仍然需要它来进行渲染,这似乎真的不适合每次发生某些事情时都会暂停其大部分功能的系统。 是否存在一些适合于此的将游戏状态向前移动的设计模式,还是我应该将所有逻辑移出循环而仅在需要时才触发它?

1
回合制游戏中世界状态和动画的分离
在回合制游戏中,您如何处理动画与世界状态的分离?我目前正在开发基于2D网格的游戏。下面的代码被简化以更好地说明。 当演员移动时,我想在生物动画并移动到新位置时暂停转弯流程。否则,屏幕可能会大大落后于世界状态,从而导致奇怪的视觉外观。我还希望动画不会阻塞游戏的流程-粒子效果可以在多个回合中展开而不会影响游戏玩法。 我要做的是介绍两种类型的动画,分别称为阻塞动画和非阻塞动画。当玩家想要移动时,执行的代码是 class Actor { void move(PositionInfo oldPosition, PositionInfo newPosition) { if(isValidMove(oldPosition, newPosition) { getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....)); player.setPosition(newPosition); } } } 然后,主更新循环执行以下操作: class Game { void update(float dt) { updateNonBlockingAnimations(dt); //Effects like particle explosions, damage numbers, etc. Things that don't block the flow of turns. if(!mBlockingAnimations.empty()) { …

3
安卓/ iOS回合制棋盘游戏的游戏服务器
我目前正在编写iPhone游戏,我想创建一个在线多人游戏模式。将来,该应用程序将移植到Android设备,因此我想知道如何创建游戏服务器? 首先,我应该选择哪种语言?如何使服务器能够与用Objective-C和Java编写的程序进行通信? 那么,如何有效地做到这一点呢?如果我通过客户端打开套接字(有2个),那好吗?我应该向服务器发送什么样的信息?给客户?

4
在基于回合(RPG)的游戏中使用空闲时间进行更新
如果您使用任何基于回合的RPG游戏,那么很长一段时间内什么都不会发生,因为该游戏在“ wait_for_player_input”上循环播放。当然,利用这段时间来更新事物似乎是明智的。 但是,这立即表明它需要进行线程化。在单线程中可以进行这种设计吗? loop: if not check_something_pressed: update_a_very_small_amount else keep going 但是,如果我们说“ a_very_small_amount”仅在每个循环中更新单个对象,则更新将非常缓慢。 您将如何处理此问题,最好是在单个线程中进行? 编辑:我已经将此语言标记为不可知论者,因为这似乎是明智的选择,尽管任何更特定于Python的东西都将是不错的选择。;-) 第二次编辑:该游戏不打算使用任何动画组件;也就是说,我目前正在将其作为等待玩家输入运行,然后更新所有内容并进行绘制。因此,它不是X FPS,而是取决于用户的速度。
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.