石头剪刀布的胜率不正常

本文关键字:不正常 胜率 石头剪刀布 | 更新日期: 2023-09-27 18:06:40

电脑和玩家的胜率总是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);         
    }
}

石头剪刀布的胜率不正常

你的问题是计算中的所有内容都是int。下面是解决这个问题的方法:

winRate = ((float)wins / Game_Info.gamesPlayed) * 100;

必须确保它被视为浮点数而不是整型。否则,它将四舍五入到0或1。这被称为类型转换。Typecasting