Was*_*ama 1 c# visual-studio-2010 visual-studio
计算机和播放器的赢率始终为0%或100%,我不知道为什么.我已经逐步完成了这个问题,似乎没有任何问题,但它没有像我期望的那样工作,因此必定存在某些问题.
abstract class Participant
{
public int wins;
float _winRate;
protected float 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 void PrintWinRate()
{
winRate = (wins / Game_Info.gamesPlayed) * 100;
string _winRate = "win rate: " + winRate.ToString() + "%";
Console.WriteLine(_winRate.PadLeft(0));
}
public abstract string Choice();
}
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(Rock_Paper_Scissor.Length)];
return element;
}
}
class Player:Participant
{
public override string Choice()
{
string playerChoice = Console.ReadLine().Trim();
return playerChoice;
}
}
struct Game_Info
{
public static int gamesPlayed;
}
class Game_Loop
{
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;
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")
{
Console.WriteLine("\n" + "You won!");
player.wins++;
}
else if (playerChoice == "scissor" && computerChoice == "rock" || playerChoice == "rock" && computerChoice == "paper")
{
comp.wins++;
Console.WriteLine("\n" + "Computer won!");
}
else if (playerChoice == "scissor" && computerChoice == "paper")
{
player.wins++;
Console.WriteLine("\n" + "You won!");
}
else if (playerChoice == "paper" && computerChoice == "scissor")
{
comp.wins++;
Console.WriteLine("\n" + "Computer won!");
}
else
{
Console.WriteLine("\n" + "invalid value");
}
Game_Info. gamesPlayed++;
Console.WriteLine("\n"+"Play again? <y/n>");
Console.WriteLine("\n");
int resetPosY = Console.CursorTop;
int resetPosX = Console.CursorLeft;
Console.SetCursorPosition(30, 0);
player.PrintWinRate();
Console.SetCursorPosition(30, 2);
comp.PrintWinRate();
Console.SetCursorPosition(resetPosX,resetPosY);
input = Console.ReadKey(true);
playAgain = input.KeyChar == 'y';
} while (playAgain);
}
}
Run Code Online (Sandbox Code Playgroud)
你的问题是该计算中的所有内容都是int.以下是解决此问题的方法:
winRate = ((float)wins / Game_Info.gamesPlayed) * 100;
Run Code Online (Sandbox Code Playgroud)
您必须确保将其视为float而不是int.否则,它将舍入为0或1.这称为类型转换.有关更多详细信息,请参见此处:Typecasting
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |