亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶窗戶的石頭剪刀布游戲

帶窗戶的石頭剪刀布游戲

C#
慕勒3428872 2022-06-12 10:40:02
我正在為學校作業制作搖滾、紙、剪刀游戲,但是當我嘗試運行此腳本時,游戲無法正常運行。例如,當我單擊 Rock 時,計算機只會選擇相同或選擇紙張。但玩家永遠不會贏。我不知道如何解決這個問題,我已經嘗試了幾個小時。這是我的代碼:public partial class MainWindow : Window{    string Computer;    string[] computer = { "Rock", "Paper", "Scissors" };    Random random = new Random();    int RandomType;    string PlayerPicks;    public MainWindow()    {        InitializeComponent();    }    private void StoneButton_Click(object sender, RoutedEventArgs e)    {        PlayerPicks = "Rock";        RandomType = random.Next(0, 2);        Computer = computer[RandomType];        Game();    }    private void PaperButton_Click(object sender, RoutedEventArgs e)    {        PlayerPicks = "Paper";        RandomType = random.Next(0, 2);        Computer = computer[RandomType];        Game();    }    private void ScissorsButton_Click(object sender, RoutedEventArgs e)    {        PlayerPicks = "Scissors";        RandomType = random.Next(0, 2);        Computer = computer[RandomType];        Game();    }    void Game()    {        string message = "The winner is: ";        string computerWins = "Computer!";        string playerWins = "Player!";        string draw = "N-Nobody?";        if (PlayerPicks == "Rock" && Computer == "Paper") // Player: Rock, Computer: paper = computer wins        {            MessageBox.Show(message + computerWins);        }        else if (PlayerPicks == "Rock" && Computer == "Scissors") // Player: Rock, Computer: Scissors = Player wins        {            MessageBox.Show(message + playerWins);        }   
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

問題 1

RandomType = random.Next(0, 2)只生成一個介于 0 和 1 之間的數字,您需要這樣做RandomType = random.Next(0, 3)這將生成一個介于 0 和 2 之間的數字

問題 2

if (PlayerPicks == "Scissors" && Computer == "Scissor")檢查計算機是否選擇Scissor而不是Scissors只需將其更改為if (PlayerPicks == "Scissors" && Computer == "Scissors")


查看完整回答
反對 回復 2022-06-12
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

這是另一種方法。它已從您的代碼中進行了極大的重構。首先,我在表單類中添加了一個私有System.Random成員字段:


private Random _rand = new Random();

然后,我設置了兩個enums,一個用于“手勢”(石頭、紙、剪刀),另一個用于結果:


public enum HandSign

{

    Rock,           // rock beats scissors

    Paper,          // paper beats rock

    Scissors,       // scissors beats paper

}


public enum Result

{

    Draw,

    ComputerWins,

    PlayerWins

}

然后我創建了一些輔助函數,首先確定計算機的下一步動作:


private HandSign GetRandomPlay()

{

    var result = _rand.Next(0, Enum.GetValues(typeof(HandSign)).Length);

    return (HandSign) result;

}

接下來是確定獲勝者的規則引擎:


private Result DetermineWinner(HandSign player, HandSign computer)

{

    if (player == computer)

    {

        return Result.Draw;

    }


    if (player == HandSign.Scissors && computer == HandSign.Rock)

    {

        return Result.ComputerWins;

    }


    if (player == HandSign.Rock && computer == HandSign.Scissors)

    {

        return Result.PlayerWins;

    }


    if (player > computer)

    {

        return Result.PlayerWins;

    }


    //finally, otherwise

    return Result.ComputerWins;

}

最后來一張“玩游戲”,在表格上的一把標簽上展示了玩的結果:


 private void PlayGame(HandSign playerPicks)

 {

     PlayerPicksLbl.Text = playerPicks.ToString();

     var computerPicks = GetRandomPlay();

     ComputerPicksLbl.Text = computerPicks.ToString();

     WinnerLbl.Text = DetermineWinner(playerPicks, computerPicks).ToString();

 }

那時,我的三個按鈕單擊處理程序看起來像這樣(這是 Rock 處理程序):


 private void RockBtn_Click(object sender, EventArgs e)

 {

     PlayGame(HandSign.Rock);

 }

以這種方式構造事物的一個結果是將其擴展到“Rocks, Paper, Scissors, Lizard, Spock”,您需要做的就是向枚舉添加兩個條目,向兩個條目添加HandSign更多邏輯DetermineWinner更多按鈕/按鈕處理程序。


另請注意,沒有辦法拼錯“剪刀”,仍然可以編譯!


查看完整回答
反對 回復 2022-06-12
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

在 Random.Next 上,上限是獨占的,所以你應該這樣做 RandomType = random.Next(0, 3);

此外在:

if (PlayerPicks == "Scissors" && Computer == "Scissor")你有“Scissor”而不是“Scissor s ”


查看完整回答
反對 回復 2022-06-12
  • 3 回答
  • 0 關注
  • 162 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號