在玩家游戏中切换轮流

时间:2019-03-25 08:37:27

标签: c#

我在c#中有一个基于回合的玩家游戏代码,需要由玩家1掷骰子3次后切换玩家。玩家2掷骰3次,然后传递给另一位玩家。

我在下面有一个代码,但想理解,可以说转1、2、3适用于玩家1,4、5、6是适用于玩家2,下一个升序的三个数字又返回至玩家1。单击按钮滚动时执行。

现在,在第六次单击滚动之后,它将保留在播放器2上。希望程序在第六次滚动之后切换回播放器一个,以便他可以再次滚动3次。

正在寻找像玩家2之后一样循环回到玩家1的东西。例如while循环。

谢谢。

    private void btnRoll_Click(object sender, EventArgs e)
    {
        if (turn <= 2 && turn % 3 == 0)
        {
            tbxOutput.AppendText("Player 1 Turn" + Environment.NewLine);
            playerOne = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
        }

        if (turn >= 3 && turn % 3 == 0)
        {
            tbxOutput.AppendText("Player 2 Turn" + Environment.NewLine);
            playerTwo = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
        }

4 个答案:

答案 0 :(得分:2)

对于两个玩家,您可以简单地拥有一个布尔值。每3圈,您就会反转其值

var turn = 0;

var player1Turns = true;
while (true)
{
    turn++;
    if (player1Turns)
    {
        //player One play
    }
    else
    {
        //player Two play
    }

    if (turn % 3 == 0)
    {
        player1Turns = !player1Turns;
    }
}

让我们更进一步,尝试将其应用于N位玩家。
我将为游戏添加规则:
 -N名选手
 -连续3次掷骰子6次。并将其添加到他的分数中。
 -直到其中之一达到21岁。
 -超出目标值的得分将重置为0
   范例:20 + 6 = 0;

添加这些简单规则,因此我们必须存储玩家得分和游戏机制:

//  Rulez 
var consecutiveTrun = 3;
var targetValue = 21;
int numberOfPlayers = 5;
int Random6Dice() => rnd.Next(1, 7);

//initilise the array that store players score 
var playerScores = new int[numberOfPlayers]; 
var turn = 0;
var currentPlayer = 0;

while (!playerScores.Contains(targetValue))
{
    turn++;

    Console.Write($"\n> Trun n°{turn,4}\t");

    var playerRoll = Random6Dice(); // Player roll the dice.
    Console.Write($"Player #{currentPlayer + 1,2}\t " +
        $"has {playerScores[currentPlayer],2} " +
        $"and roll: {playerRoll}\t");

    var rawScore = playerScores[currentPlayer] + playerRoll;
    playerScores[currentPlayer] = ( rawScore > targetValue) ? 0 : rawScore;
    Console.Write($"Total Score = { playerScores[currentPlayer],2}");

    if (turn % consecutiveTrun == 0)
    {
        currentPlayer = (currentPlayer + 1) % numberOfPlayers;
        Console.WriteLine();
    }
}

勺子喂食:修复了过去5次复制中的代码

// Get Turn outside of the function the form has to know the number of turn and not restart it at each click
var turn = 0;   

private void btnRoll_Click(object sender, EventArgs e)
{
    turn++;
    if (player1Turns)
    {
        tbxOutput.AppendText("Player 1 Turn" + Environment.NewLine);
        playerOne = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
    }
    else
    {
        tbxOutput.AppendText("Player 2 Turn" + Environment.NewLine);
        playerTwo = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
    }

    if (turn % 3 == 0)
    {
        player1Turns = !player1Turns;
    }

}

答案 1 :(得分:0)

我认为您正在寻找类似的内容,尽管您没有说循环何时结束:

var turn = 0;
while (!endCondition)
{
    if (turn <= 2)
    {
        tbxOutput.AppendText("Player 1 Turn" + Environment.NewLine);
        playerOne = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
    }

    else if (turn > 2)
    {
        tbxOutput.AppendText("Player 2 Turn" + Environment.NewLine);
        playerTwo = seqOfFive() + seqOfFour() + seqOfThree() + fiveOfKind() + fourOfKind() + threeOfKind();
    }

    turn++;

    if (turn >= 6) turn = 0;
}

还有其他几种方法可以做到,但这与您所拥有的最接近。

答案 2 :(得分:0)

我会以不同的方式做事。这样想:假设您的匝数不受限制。您需要知道的只是该轮到谁了,并对其进行跟踪。

我在开发的游戏中有类似的东西,所以我可以从那里显示一些代码:

public int TurnCount { get; private set; } //this keeps track of turns 

主游戏循环:

  while (combatContinues)
            {
                combatContinues = this.Act();
            }
Act 方法内

我需要做的事

这将调用另一个名为 ContinueCombat

的方法

此方法增加了转数,切换了侧边并完成了其他需要做的事情:

 private void ContinueCombat()
        {
            this.TurnCount++;
            this.SwitchSides();
            this.ActivateFirstAliveActor();
        }

在您的情况下,它将掷骰子并执行您需要的任何操作。

可以在此处看到完整的示例和正在运行的项目:

https://github.com/guardinfo-spam/rpg-engine

我从那里取样的班级在这里:

https://github.com/guardinfo-spam/rpg-engine/blob/master/RpgGamePcl/Combat/CombatScene.cs

答案 3 :(得分:0)

尝试N个玩家并回合

int numOfPlayers = 3, numOfTurns  = 3, currentTurn = 0, currentPlayer, currentPlayerTurn;

while(true)
{
    currentPlayerTurn = currentTurn % numOfTurns;
    currentPlayer = (currentTurn / numOfTurns) % numOfPlayers;

    //toDo

    Console.Write($"Player {currentPlayer + 1}: Turn {currentPlayerTurn + 1} of {numOfTurns}");
    currentTurn ++;
}