首页 > 解决方案 > 在玩家游戏中切换回合

问题描述

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

我在下面有一个代码,但想了解让我们说转 1,2,3 是为玩家 1 和 4,5,6 是为玩家 2 并且下一个上升的三个数字返回给玩家 1。所有这一切都是在单击按钮滚动。

现在,在第 6 次点击滚动后,它仍然在玩家 2 处。希望程序在第 6 次滚动后切换回玩家 1,以便他可以再次滚动 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();
        }

标签: c#

解决方案


对于两个玩家,你可以简单地有一个布尔值。每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
个玩家 - 掷骰子 6 次,连续 3 次。并将其添加到他的分数中。
- 直到其中一个达到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;
    }

}

推荐阅读