2014-01-11 66 views
0

我正在做一個岩石,剪刀紙遊戲窗體應用程序和代碼通過,但我似乎無法讓它的工作,因爲它應該。用戶將輸入紙張,剪刀或搖滾,然後計算機將選擇1-3,1是岩石,2是紙張,3是剪刀。你會贏,輸或者是配合。有時候沒有印刷品,否則它說你贏了,但是你真的輸了。如果代碼難以理解,請原諒我。我是一名初學者。岩石紙剪刀遊戲與錯誤的結果

string userAnswer = textBox1.Text; 
Random r1 = new Random(); 
int b = 3; 
string comrock = "The computer chose rock!"; 
string compaper = "The computer chose paper!"; 
string comscissors = "The computer chose scissors!"; 
int computerChoice = r1.Next(b); 
if (computerChoice == 1) 
{ 
    label4.Text = comrock; 
} 
else if (computerChoice == 2) 
{ 
    label4.Text = compaper; 
} 
else if (computerChoice == 3) 
{ 
    label4.Text = comscissors; 
} 
else 
{ 
    while (computerChoice == 0) 
    { 
     computerChoice = r1.Next(b); 

     if (computerChoice == 1) 
     { 
      label4.Text = comrock; 
     } 
     else if (computerChoice == 2) 
     { 
      label4.Text = compaper; 
     } 
     else if (computerChoice == 3) 
     { 
      label4.Text = comscissors; 
     } 
    } 

     if (userAnswer == "rock") ; 
     { 
      if (computerChoice == 2) ; 
      { 
       label3.Text = "You lost...."; 
      } 
     } 
     if (userAnswer == "paper") ; 
     { 
      if (computerChoice == 1) ; 
      { 
       label3.Text = "You Won!"; 
      } 
     } 
     if (userAnswer == "rock") ; 
     { 
      if (computerChoice == 1) ; 
      { 
       label3.Text = "It's a tie!"; 
      } 
     } 
     if (userAnswer == "rock") ; 
     { 
      if (computerChoice == 3) ; 
      { 
       label3.Text = "You lost...."; 
      } 
     } 
    if (userAnswer == "paper"); 
    { 
     if (computerChoice == 2) ; 
     { 
      label3.Text = "It's a tie!"; 
     } 
    } 
    if (userAnswer == "paper"); 
    { 
     if (computerChoice == 3) ; 
     { 
      label3.Text = "You lost...."; 
     } 
    } 
    if (userAnswer == "scissors"); 
    { 
     if (computerChoice == 2) ; 
     { 
      label3.Text = "You won!"; 
     } 
    } 
    if (userAnswer == "scissors"); 
    { 
     if (computerChoice == 3) ; 
     { 
      label3.Text = "It's a tie!"; 
     } 
    } 
    if (userAnswer == "scissors"); 
    { 
     if (computerChoice == 2) ; 
     { 
      label3.Text = "You won!"; 
     } 
    } 
+0

這大約是最面向對象的C#可以想見。此外,RPS邏輯與UI邏輯的混合對於初學者愛好者來說是很好的,但對於維護或團隊設置來說並不好。 –

+0

我不想想你的代碼,如果它與玩 - 十個不同的*事* –

+0

我已經在這裏都已經回答了這個問題http://stackoverflow.com/questions/38965901/how-to-display - 結果 - 岩石剪刀 - 遊戲/ 38966414#38966414 –

回答

0

您在Random中設置的值有唯一的上限。這意味着,當你指定r1.Next(3);,你要麼得到一個0,1或2

我沒有檢查你的代碼的其餘部分,但嘗試改變你傳遞給r1.Next()上限:

int b = 4; 

... 

int computerChoice = r1.Next(b); 
1

看起來好像你誤會了Next()的工作方式。在你的情況,你基本上調用它像這樣:

int computerChoice = r1.Next(3); 

如果你看一看智能感知這一點,你會看到,它說:

返回一個非負隨機數小於指定的最大值。

在這種情況下,你設置的最大值是3,所以它僅會返回值012。這意味着:

else if (computerChoice == 3) 

永遠不會被擊中。我想這也是爲什麼你再次使用你的while循環來嘗試糾正問題,但它會做同樣的事情,不允許計算機選擇scissors

如果你仍然想約束的有效值rockpaperscissors123,分別,你只需要添加1到結果調用Next()的:

int computerChoice = r1.Next(b) + 1; 

現在你有你的價值在適當的範圍內,你根本不需要你的循環。所以,你的computerChoice代碼可以簡化爲:

if (computerChoice == 1) 
{ 
    label4.Text = comrock; 
} 
else if (computerChoice == 2) 
{ 
    label4.Text = compaper; 
} 
else if (computerChoice == 3) 
{ 
    label4.Text = comscissors; 
} 
+0

謝謝,但如果我把紙或剪刀或岩石,它總是說我失去了。 – user3185801

+0

@ user3185801您目前測試獲勝條件的邏輯不正確。正如你正在學習的那樣,我寧願把你推向正確的方向,而不是直接給你代碼。現在,您不斷檢查用戶是否選擇了「搖滾」,「紙」或「剪刀」。更好的方法是隻對每一個測試一次。例如,if(userAnswer ==「rock」){//檢查所有岩石的獲勝條件} else if(userAnswer ==「paper」){//再次做同樣的事情}等等。 –

+0

@ user3185801完成這些工作後,請考慮如何進一步簡化代碼。問自己什麼邏輯條件正在重複,看看你可以做些什麼。 –

0

首先,格蘭特Winney提到的,你永遠不會得到computerChoice是3,因爲Next(x)回報

的32位有符號整數大於或者等於零,並且小於maxValue;也就是說,返回值的範圍通常包含零但不是最大值。但是,如果maxValue等於零,則返回maxValue。

其次,不要讓它返回0.然後,你不必在while循環中這樣做。用戶Next(1, 4)只能獲得數字{1,2,3}。

然後,轉換用戶輸入一個號碼,以及和比較數字

if (userChoice == computerChoice) 
{ 
    // tie 
    return; 
} 
// other comparing 
0

我剛剛完成使用C#/的WebAPI,並與AngularJS前端的剪刀石頭布的遊戲很短的測試項目。這並不意味着它只是一個完整的應用程序,而只是一個概念驗證,但您可能希望查看源代碼,以瞭解如何以更多的OOP方式構建代碼。 Specflow和Nunit測試也包括在內。

源是在github =>https://github.com/swin66/RockPaperScissors

而且你可以嘗試應用=>http://rockpaperscissors.azurewebsites.net