使用节点js实现基于回合的战斗

我正在创建一个浏览器游戏,允许玩家使用NodejsSocket.ioExpress来对抗怪物。 但是,我似乎无法弄清楚如何实施战斗的转折。

我的思路和工作stream程如下:

这样的function将如何实施?

这只是对您想要表示游戏的对象进行建模练习。

至less,你需要一个战斗实体(玩家和生物)和个人战斗的概念。

生物/玩家将是具有HP和攻击力属性的物体。

战斗类将跟踪轮数,轮到它等等。

当玩家发起战斗时,你应该创造一个新的战斗目标来跟踪转弯。

在下面的示例代码中,我使用javascript函数作为示例,但是可以将它们映射到REST端点或其他任何地方。 例如,对于function initiateBattlePOST /battles/new with attacker_id=2&target_id=1

  // Starts a Battle -- could throw an exception if either combatant is already in combat. function initiateBattle(attacker, target) { var battle = new Battle(attacker, target); game.globalBattlesList.add(battle); return {battle: { id: battle.id, current_turn: { owner: attacker, number: 1, }}}; } // Send an attack in a battle function attack(battle, attacker, target) { if (battle.current_turn.owner != attack) { return {result: "error", message: "It's not your turn!"}; } target.HP -= attacker.ATK; if (target.HP <= 0) { ... game.end_battle(battle); return { status: "OK", winner: attacker, message: "${attacker.name} wins in ${battle.current_turn.number} turns!" }; } // change turn battle.current_turn = {owner: target, number: battle.current_turn.number + 1}; // does the AI have a delay? setTimeout(function() { // do_enemy_turn will choose an action for the AI // and set battle.current_turn back to do_enemy_turn(battle, target, attacker); }, target.attack_delay); return { result: "continue", message: `target is at ${target.HP} HP` }; }