2014-05-20 89 views
2

我有我的C#保齡球遊戲的問題,我會appericate一些幫助,我會嘗試解釋代碼以及我可以。我一直試圖解決這個問題很長一段時間,但沒有成功。C#保齡球遊戲計算問題

計算工作正常,但唯一的問題是我的罷工,罷工應該計算10 +接下來的2次即將投擲。

那麼我的程序做:

如果你得到一個罷工的第一個值將被設置爲10,然後我進入另一個罷工和值設置爲21,但應該是20.第二個框,然後應該有30.

的值所以首先我有3個數組來容納所有的文本框

summa = new TextBox[] { textBox14, textBox15, textBox16, textBox17, textBox18, textBox19 }; 
    slag1 = new TextBox[] { textBox1, textBox3, textBox5, textBox7, textBox9, textBox11 }; 
    slag2 = new TextBox[] { textBox2, textBox4, textBox6, textBox8, textBox10, textBox12 }; 

所以我有2種方法,Slag1()Slag2()撞擊運行在Slag1()方法。

這是我使用罷工

if (strike == true) 
     { 
      GotStrike[omgang] = true; 
     } 
     //strike = false; 

     //Kollar ifall textbox är lika med 10 
     if (slag1[omgang].Text == "10") 
     { 
      //Om text box är lika med 10 ändra värdet till X 
      //Lägg till 10 poäng på total 
      //Skriv ut värdet på summa (textbox) 
      Arbetar = true; 
      slag1[omgang].Text = "X"; 
      total += 9; 
      summa[omgang].Text = total.ToString(); 
      omgang++; 
      if (omgang == 6) 
      { 
       omgang--; 
      } 
      strike = true; 
     } 
     else if (slag1[omgang].Text == "X") 
     { 
      return; 
     } 
     else 
     { 
      checkSlag1 = Convert.ToInt32(slag1[omgang].Text); 
      total += checkSlag1; 
      summa[omgang].Text = total.ToString(); 

      if (strike == true) 
      { 
       if (omgang != 0) 
       { 
        total += 10; 
        slag1[omgang - 1].Text = total.ToString(); 
        if (omgang != 1) 
        { 
         slag1[omgang - 2].Text = total.ToString(); 
        } 
        else 
        { 

        } 
       } 
       else 
       { 

       } 
      } 
     } 
    } 

這有點難以解釋,但我希望你明白的計算部分,請告訴我,如果你不明白,所以我會寫一個更好的說明。

我希望你知道一個保齡球遊戲是如何工作的,一擊=第一擊,並在未來2個即將來襲的價值。所以,如果我打一擊,我得到的值10,罷工2值的10和10。3罷工值這是總指數爲0

+0

如果你不明白這部分代碼您可以自由在這裏檢查源代碼:HTTP:// pastebin.com/p6cttLX3 – BunnYboii

+0

您已混合UI和邏輯([的SoC(http://en.wikipedia.org/wiki/Separation_of_concerns))。如果將它們分開,編寫測試以查明事情出錯的地方會更容易。 [保齡球](http://www.objectmentor.com/resources/articles/xpepisode.htm)也用於(我認爲)Kent Beck的書「測試驅動開發」。 – Laoujin

+0

你能舉一個我應該如何構建我的代碼的例子嗎?因爲我沒有你想要告訴我的東西。 – BunnYboii

回答

0

既然您有計算的保齡球遊戲的正確比分麻煩,我會建議拿出保齡球比賽機制,寫測試,檢查不同的投擲是否正常工作(即正常,備用和罷工)。然後你可以修改代碼,當所有測試通過時,你的評分就可以運行。之後,您可以創建任何使用保齡球遊戲的用戶界面。

還檢查我在註釋中提供的鏈接。代碼是用Java編寫的,但它與C#相似,併爲保齡球遊戲API提供了一個例子,推理他們如何得到他們特定的設計。

你的保齡球遊戲看起來是這樣的: (我真的不知道該保齡球規則)

public class Bowling 
{ 
    public void Throw(int count) // How do you call these things that you need to knock over... 
    { 
     Debug.Assert(count >= 0); 
     Debug.Assert(count <= 12); 
     // ... Lots of interesting code. 
    } 

    public int GetScore() 
    { 
      return 16; 
    } 
} 

此代碼顯然是行不通的。訣竅是編寫運行「紅色」(=失敗)的測試,然後編寫代碼,直到測試運行「綠色」(=通過)。

對於這些測試可以使用諸如NUnit的框架,...

[TestClass] 
public class BowlingTests 
{ 
    [Test] 
    public void ThrowNormal_NormalScore() 
    { 
     var b = new Bowling(); 
     b.Throw(5); 
     b.Throw(6); 

     Assert.That(b.GetScore(), Is.EqualTo(11)); 
    } 

    public void ThrowSpare_SpecialScore() 
    { 
     var b = new Bowling(); 
     b.Throw(1); 
     b.Throw(11); // = spare 
     b.Throw(5); // score counts for double? 
     b.Throw(3); // No double score 

     Assert.That(b.GetScore(), Is.EqualTo(1 + 11 + (5 * 2) + 3)); 
    } 

    // More tests for all the edge cases (strike, special end of game rules etc) 
} 
+0

他們被稱爲引腳。 –