纸牌游戏的游戏循环,获胜者开始,1个用户控制的玩家

时间:2016-06-22 10:43:15

标签: javascript

我正在寻找一款卡牌游戏,其中有一个用户控制的玩家,对抗3个a.i对手。这是一个Euchre的游戏,你可以在这里找到一个类似的例子:

https://cardgames.io/euchre/

在这个纸牌游戏中,赢得该回合的玩家开始下一轮。游戏会自动继续

我无法找到处理用户事件的方法。点击事件需要操作用户控制的播放器播放卡片,然后按顺时针顺序播放其他播放器。

问题在于,如果用户控制的玩家没有赢手,游戏必须继续玩,直到用户控制的玩家需要再次玩,此时他们将被要求发起另一次点击事件。

解决此问题的最佳方法是什么?我有一个JSFiddle,我觉得我想做的,但它真的不理想:

https://jsfiddle.net/GerardSimpson/m736364e/18/

var player1 = {};
player1.hasPlayed = false;
var roundStarter = 0;
var i = 0;
var currentTurn = (i + roundStarter) % 4;
while(player1.hasPlayed === false) {
    console.log("player[",currentTurn,"]", "plays a card");
  i++;
  currentTurn = (i + roundStarter) % 4;
  if(i === 4) {
    roundStarter = 2;
    console.log("Round Over, player "+ roundStarter +" wins");
    i = 0;
    currentTurn = (i + roundStarter) % 4;
  }
  if(currentTurn === 0) {
    console.log("player[ 0 ]s turn, exit loop and wait for new click event");
    player1.hasPlayed = true;
  }
}

1 个答案:

答案 0 :(得分:0)

我已经设法找到了我的问题的解决方案,诀窍是将转弯功能放入一个函数中,该函数修改父作用域中保持游戏转向记录的变量。如果我不想在全球范围内进行调查,我想我可能需要为此添加闭包。我稍后会更新,这是我的代码和小提琴:

var player1 = {};
player1.hasPlayed = false;
var roundStarter = 0;
var i = 0;
var currentTurn = (i + roundStarter) % 4;

$('.click-me').on('click', function(){
  while(1) {
    console.log("player[",currentTurn,"]", "plays a card");
    i++;
    currentTurn = (i + roundStarter) % 4;
    if(i === 4) {
      roundStarter = 3;
      console.log("Round Over, player "+ roundStarter +" wins");
      i = 0;
      currentTurn = (i + roundStarter) % 4;
    }
    if(currentTurn === 0) {
      console.log("player[ 0 ]s turn, exit loop and wait for new click event");
      break;
    }
  }
});

http://jsfiddle.net/GerardSimpson/m736364e/23/