c# - 在玩家游戏中切换回合
问题描述
我在 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();
}
解决方案
对于两个玩家,你可以简单地有一个布尔值。每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;
}
}
推荐阅读
- php - 调用API时如何在PHP中打印出汉字?
- python - 如何从延迟的 dask 数组中获取特定的块?
- firebase - 安装 firebase 工具在 mac 上不起作用
- python - 切换到数据框中的多行索引创建的表单列表
- selenium - 你能通过自动化浪费谷歌添加吗
- microsoft-graph-api - Microsoft Graph 获取 Presence 应用程序权限类型
- javascript - OnClick从带有超时或失败功能的url加载背景图像?
- python - 在 numpy 数组中的轴上下文中,零索引是什么意思?
- javascript - Frame-Motion 事件处理程序在具有 svg 路径的子组件中不起作用
- c++ - 为什么 mt19937 的 STD 实现具有双倍 sizeof 作为 boost 版本?