C# 摇滚剪纸c首秀如何展现winrate?
我最近开始制作一款RPS游戏机应用程序,它很管用,我决定给自己一个更大的挑战,并决定如果它有一个电脑和玩家的赢率,并且由于某种原因,它不会在左侧显示赢率,那将很酷 编辑:所以我让它显示在左边,但百分比保持在0。你知道如何解决这个问题吗C# 摇滚剪纸c首秀如何展现winrate?,c#,visual-studio-2010,visual-studio,C#,Visual Studio 2010,Visual Studio,我最近开始制作一款RPS游戏机应用程序,它很管用,我决定给自己一个更大的挑战,并决定如果它有一个电脑和玩家的赢率,并且由于某种原因,它不会在左侧显示赢率,那将很酷 编辑:所以我让它显示在左边,但百分比保持在0。你知道如何解决这个问题吗 abstract class Participant { public int wins; int _winRate; public int winRate { get {
abstract class Participant
{
public int wins;
int _winRate;
public int winRate
{
get
{
return _winRate;
}
set
{
if (value < 0 || value > 100)
{
throw new Exception("value cannot be less than 0 or greater than 100");
}
_winRate = value;
}
}
public abstract string Choice();
public abstract void PrintWinRate();
}
class Computer : Participant
{
string[] Rock_Paper_Scissor = {"rock","paper","scissor"};
Random rand = new Random();
public override string Choice()
{
string element = Rock_Paper_Scissor[rand.Next(3)];
return element;
}
public override void PrintWinRate()
{
winRate = (wins / Game_Logic.gamesPlayed) * 100;
string _winRate = "computer win rate: "+winRate.ToString()+"%".PadRight(10);
Console.WriteLine(_winRate);
}
}
class Player : Participant
{
public override string Choice()
{
string playerChoice = Console.ReadLine().Trim();
return playerChoice;
}
public override void PrintWinRate()
{
winRate = (wins / Game_Logic.gamesPlayed) * 100;
string _winRate = "player win rate: " + winRate.ToString()+"%".PadRight(10);
Console.WriteLine(_winRate);
}
}
class Game_Logic
{
public static int gamesPlayed;
static void Main()
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.Black;
Computer comp = new Computer();
Player player = new Player();
string computerChoice;
string playerChoice;
ConsoleKeyInfo input;
bool playAgain;
int computerWins = comp.wins;
int playerWins = player.wins;
do
{
Console.Clear();
computerChoice = comp.Choice();
playerChoice = player.Choice();
Console.Clear();
while (playerChoice == computerChoice)
{
computerChoice = comp.Choice();
}
Console.WriteLine("Player: "+ playerChoice);
Console.WriteLine("\n"+"Computer: " + computerChoice);
if (playerChoice == "rock" && computerChoice == "scissor" || playerChoice == "paper" && computerChoice == "rock")
{
playerWins++;
Console.WriteLine("\n" + "You won!");
}
else if (playerChoice == "scissor" && computerChoice == "rock" || playerChoice == "rock" && computerChoice == "paper")
{
computerWins++;
Console.WriteLine("\n" + "Computer won!");
}
else if (playerChoice == "scissor" && computerChoice == "paper")
{
playerWins++;
Console.WriteLine("\n" + "You won!");
}
else if (playerChoice == "paper" && computerChoice == "scissor")
{
computerWins++;
Console.WriteLine("\n" + "Computer won!");
}
else
{
Console.WriteLine("\n" + "invalid value");
}
Game_Logic.gamesPlayed++;
Console.WriteLine("\n"+"Play again? <y/n>");
Console.WriteLine("\n");
comp.PrintWinRate();
player.PrintWinRate();
input = Console.ReadKey(true);
playAgain = input.KeyChar == 'y';
} while (playAgain);
}
}
首先,我认为增量逻辑有一个问题,不能增加参与者对象的实际值。playerWins和computerWins是主对象的局部变量,被视为新变量,而不仅仅是参与者对象的引用。更改以下行: playerWins++到player.wins++//更改参与者的实际值 computerWins++到comp.wins++ 接下来,你说什么时候离开?您具体想要什么格式?现在,请尝试以下几行: string _winRate=string.Formatplayer赢率:{0}%,赢率;
首先,我认为增量逻辑有一个问题,不能增加参与者对象的实际值。playerWins和computerWins是主对象的局部变量,被视为新变量,而不仅仅是参与者对象的引用。更改以下行: playerWins++到player.wins++//更改参与者的实际值 computerWins++到comp.wins++ 接下来,你说什么时候离开?您具体想要什么格式?现在,请尝试以下几行: string _winRate=string.Formatplayer赢率:{0}%,赢率;
您的游戏正在显示分数,但会立即清除屏幕或退出 将“PrintWinRate”调用放在“Console.ReadKey”之前应该可以提供所需的行为 像这样:
Console.WriteLine("\n" + "Play again? <y/n>");
Console.WriteLine("\n");
comp.PrintWinRate();
player.PrintWinRate();
input = Console.ReadKey(true);
请记住将基类“参与者”中的“胜利”更改为浮动 您的游戏正在显示分数,但会立即清除屏幕或退出 将“PrintWinRate”调用放在“Console.ReadKey”之前应该可以提供所需的行为 像这样:
Console.WriteLine("\n" + "Play again? <y/n>");
Console.WriteLine("\n");
comp.PrintWinRate();
player.PrintWinRate();
input = Console.ReadKey(true);
请记住将基类“参与者”中的“胜利”更改为浮动 我刚刚得到了一个答案,但我想补充的是,将您的问题简化为最短的示例,这对我们很有帮助,您仍然可以看到问题所在-最短的示例。通常,通过这样做,您甚至可以自己看到问题,而不需要键入问题,然后等待答案。它返回0,因为您在除法中使用int。将逻辑更改为winRate=decimalwins/Game_logic.gamesPlayed*100;我刚刚得到了一个答案,但我想补充的是,将您的问题简化为最短的示例,这对我们很有帮助,您仍然可以看到问题所在-最短的示例。通常,通过这样做,您甚至可以自己看到问题,而不需要键入问题,然后等待答案。它返回0,因为您在除法中使用int。将逻辑更改为winRate=decimalwins/Game_logic.gamesPlayed*100;