Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 摇滚剪纸c首秀如何展现winrate?_C#_Visual Studio 2010_Visual Studio - Fatal编程技术网

C# 摇滚剪纸c首秀如何展现winrate?

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 {

我最近开始制作一款RPS游戏机应用程序,它很管用,我决定给自己一个更大的挑战,并决定如果它有一个电脑和玩家的赢率,并且由于某种原因,它不会在左侧显示赢率,那将很酷 编辑:所以我让它显示在左边,但百分比保持在0。你知道如何解决这个问题吗

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;