2013-05-08 3 views
0

Я хочу создать игру Саймона Сайса, чтобы улучшить свои навыки программирования, это сложнее, чем я думал. Так что изначально я решил, что будет 50 уровней макс, поэтому я генерировать 50 случайных чисел между 1-4 и хранить их в массиве, я проверил это работает в консоли:Совет для повторения цикла для Simon Says в Android

for(int i = 0; i <50; i++){ 
     random = randomGenerator.nextInt(4)+1; 
     array[i] = random; 
     System.out.println(Integer.toString(i)+" " + Integer.toString(array[i])); 
    } 

Далее я вызываю метод, называемый игра, которая должна запускать игру, в этом методе у меня есть цикл, который выполняется 50 раз, он проверяет, является ли индекс i моего массива 1, 2, 3 или 4, затем окрашивает пронумерованную кнопку.

public void play(){ 

    for(int i =ii; i<50; i++){ 
     if(b1bool==false){ 
      if(array[i] == 1){ 
       //Set button to Blue 
       b1.setBackgroundColor(0xFF0000FF); 



      } 

      else if(array[i] == 2){ 
       //SEt button to Yellow 
       b2.setBackgroundColor(0xFFFFFF00); 


      } 


      else if(array[i] == 3){ 
       //SEt button to Red 
       b3.setBackgroundColor(0xFFFF0000); 


      } 


      else if(array[i] == 4){ 
       //SEt button to Green 
       b4.setBackgroundColor(0xFF00FF00); 


      } 

      b1bool = true; 
     } 
    } 
} 

Я использую логическое значение, чтобы остановить цикл, и в тот момент, продолжая цикл путем прессования button1:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button1: 

     b1.setBackgroundColor(0xffffffff); 
     b2.setBackgroundColor(0xffffffff); 
     b3.setBackgroundColor(0xffffffff); 
     b4.setBackgroundColor(0xffffffff); 
     b1bool=false; 
     ii++; 
     play(); 



     break; 
    case R.id.button2: 
     if(b2bool == true) 
     { 


     } 

     break; 
    case R.id.button3: 
     if(b3bool == true) 
     { 


     } 

     break; 
    case R.id.button4: 
     if(b4bool == true) 
     { 


     } 

     break; 
    } 
} 

Я пришел к StackOverflow, потому что мой обычный способ решить программирования проблемы как правило, очень длинная извилистая и неэффективная вообще, мне нужно, чтобы вы испытали советы программистов о том, как решить проблему, когда вы дадите мне решение или часть решения, которое я хочу знать, как вы прибыли туда, чтобы я мог лучше изучить подход чем у меня сейчас.

Я думал о создании метода для каждого из 50 уровней и в нем код для запуска каждого уровня и называть это в цикле for 50 раз, это нехорошее решение, но пока единственный способ я может думать об этом. Любые советы высоко ценится.

ответ

2

Государственные машины, подобные этому, могут привести к извилистому коду, и я верю, что это то, что вы видите.

Рассмотрите возможность удаления цикла и вместо этого запускайте свой код воспроизведения с использованием событий ввода/входа в систему: нажатия кнопок и обратных вызовов жизненного цикла активности. Вы сможете удалить весь код проверки флага.

Кроме того, рассмотрите возможность реализации каждой «инструкции» и «правильного ввода» с использованием отдельных классов - Ориентация объекта. Это позволит вашему коду быть более масштабируемым, в то же время ограничивая инфляцию кода от добавления новых взаимодействий. Вы можете видеть, соответствует ли ваш пример, что оператор switch занимает много строк. Представьте себе, что вам нужно перебирать коллекцию «ответов», пока не найдете совпадение действий, сделанных пользователем.

enter image description here

Вы обратите внимание на отсутствие примеров кода, предоставляемых. Как опыт обучения, реализация моих предложений - это опрятный эксперимент, и примеры могут ограничивать преподаваемые уроки.

+0

Спасибо за ваш ответ. Я прочитал его и потратил много времени, пытаясь вырвать способ сделать это, но я как бы потерян. Дело в том, что ваш ответ имеет прекрасный смысл, я вижу в голове, почему делать это таким образом было бы наилучшим образом, мне просто не хватает опыта, чтобы сделать это до сих пор. Спасибо!! – deucalion0

+1

Я отредактировал свой ответ с небольшой диаграммой, чтобы я дал больше ясности. – Gusdor

+0

Спасибо, вы предоставили мне то, что я просил, советы о том, как разрабатывать и разрабатывать мое приложение! Я буду использовать это в качестве основы! – deucalion0

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