2016-09-22 3 views
-2

Я пытаюсь сделать игру в кости, но у меня проблемы с моими переменными в кости и отслеживание оценки для текущего раунда.Как заставить эту переменную работать на C#?

В принципе, есть четыре кости, а круглый счет - общее количество добавленных костей (у вас есть определенное количество ререйлов за раунд).

Но когда я пытаюсь использовать игру, круглый балл показывает только одно число умирающих, в зависимости от того, что последний раз был свернут (щелкнул).

Вот мой код:

namespace DiceGame 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    int die1; 
    int die2; 
    int die3; 
    int die4; 
    int rollsRemaining = 6; 
    int scoreRound; 
    int scoreTotal; 
    int numberRound; 
    Random random; 
    Random rnd = new Random(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     Random random = new Random(); 

     int die1 = random.Next(1, 7); 
     int die2 = random.Next(1, 7); 
     int die3 = random.Next(1, 7); 
     int die4 = random.Next(1, 7); 

     dieOne.Content = die1; 
     dieTwo.Content = die2; 
     dieThree.Content = die3; 
     dieFour.Content = die4; 

     int scoreRound = die1 + die2 + die3 + die4; 
     roundScore.Text = "Round Score: " + scoreRound; 
    } 

    private void dieOne_Click(object sender, RoutedEventArgs e) 
    { 
     Random random = new Random(); 
     if (rollsRemaining != 0) 
     { 
      int die1 = random.Next(1, 7); 
      dieOne.Content = die1; 
      rollsRemaining = rollsRemaining - 1; 
      string string1 = rollsRemaining.ToString(); 
      rollsLeft.Text = "Rolls Left: " + string1; 
      roundScore.Text = "Round Score: " + (die1 + die2 + die3 +die4); 
     } 
     else 
     { } 
    } 

    private void dieTwo_Click(object sender, RoutedEventArgs e) 
    { 
     Random random = new Random(); 
     if (rollsRemaining != 0) 
     { 
      int die2 = random.Next(1, 7); 
      dieTwo.Content = die2; 
      rollsRemaining = rollsRemaining - 1; 
      string string1 = rollsRemaining.ToString(); 
      rollsLeft.Text = "Rolls Left: " + string1; 
      roundScore.Text = "Round Score: " + (die1 + die2 + die3 + die4); 
     } 
     else 
     { } 
    } 

    private void dieThree_Click(object sender, RoutedEventArgs e) 
    { 
     Random random = new Random(); 
     if (rollsRemaining != 0) 
     { 
      int die3 = random.Next(1, 7); 
      dieThree.Content = die3; 
      rollsRemaining = rollsRemaining - 1; 
      string string1 = rollsRemaining.ToString(); 
      rollsLeft.Text = "Rolls Left: " + string1; 
      roundScore.Text = "Round Score: " + (die1 + die2 + die3 + die4); 
     } 
     else 
     { } 
    } 

    private void dieFour_Click(object sender, RoutedEventArgs e) 
    { 
     Random random = new Random(); 
     if (rollsRemaining != 0) 
     { 
      int die4 = random.Next(1, 7); 
      dieFour.Content = die4; 
      rollsRemaining = rollsRemaining - 1; 
      string string1 = rollsRemaining.ToString(); 
      rollsLeft.Text = "Rolls Left: " + string1; 
      roundScore.Text = "Round Score: " + (die1 + die2 + die3 + die4); 
     } 
     else 
     { } 
    } 

    private void newRound_Click(object sender, RoutedEventArgs e) 
    { 
     scoreTotal = scoreTotal + scoreRound; 
     totalScore.Text = "Total Score: " + scoreTotal; 
     rollsRemaining = 6; 
     rollsLeft.Text = "Rolls Left: " + rollsRemaining; 
     scoreRound = 0; 
     roundScore.Text = "Round Score: " + scoreRound; 

     Random random = new Random(); 

     int die1 = random.Next(1, 7); 
     int die2 = random.Next(1, 7); 
     int die3 = random.Next(1, 7); 
     int die4 = random.Next(1, 7); 

     dieOne.Content = die1; 
     dieTwo.Content = die2; 
     dieThree.Content = die3; 
     dieFour.Content = die4; 
     } 
    } 
} 
+2

Благодарим Вас за предоставление кода; но это слишком много. Вам нужно использовать отладчик, чтобы сузить свой вопрос, чтобы он более конкретный, чем «что не так с этим кодом?» – BradleyDotNET

+0

Просто небольшое предложение - вы должны сделать только один экземпляр «Случайный». – Enigmativity

ответ

2

у вас есть локальные переменные для игральных костей в своих методах (die1, die2 ...), а также члены класса с одинаковыми именами (die1, die2 ...)

Когда вы используете переменную, сначала компилятор просматривает текущую область действия (здесь это ваш метод) и только затем выполняет поиск во внешней области (классе).

вы инициализируется число в рамки Constructure с локальными переменными, так что элементы данных по-прежнему 0.

при нажатии на кнопку, назначенную другую локальную переменную (скажем die1) со значением, а затем добавить его с остальными. так что теперь die1 (локальный) добавляется с die2,3,4 членами данных (и они равны 0). так что вы получите просто die1. то же самое в других кнопках.

узнать больше о прицелах здесь:

https://msdn.microsoft.com/en-us/library/ms973875.aspx

только для этого случая - удалить локальные переменные и использовать только элементы данных.

public MainWindow() 
{ 
    InitializeComponent(); 

    Random random = new Random(); 

    die1 = random.Next(1, 7); 
    die2 = random.Next(1, 7); 
    die3 = random.Next(1, 7); 
    die4 = random.Next(1, 7); 

    //... 
} 

И в newRound_Click, подобным образом

+0

Вы правы с этим, но немного запутываетесь, говоря «члены данных». Я думаю, было бы полезно называть их переменными уровня класса по сравнению с локальными переменными. – Enigmativity

+0

переменные уровня класса по сравнению с локальными переменными, иначе мы можем сказать, что поля против локальных переменных –

Смежные вопросы