2012-03-12 5 views
0

Я работаю над проектом дизайна проектов для одного из моих классов, используя ротационный телефон и набор ардуинов для создания игры на основе автоматических телефонных меню. Последовательный вход с вращающегося диска работает через arduino, и теперь я использую обработку для записи меню.Как написать вложенное, если или случай, чтобы создать меню ввода с подсказками?

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

Я совершенно новичок в этом, но многому научился в классе.

Мой вопрос заключается в том, как я могу сделать непрерывный набор вложенных if/then-statments ИЛИ использовать регистр и переключиться для перемещения по серии подсказок и входов?

Вот мой эскиз до сих пор:

import processing.serial.*; 

Serial port; // Create object from Serial class 
float val; // Data received from the serial port 

boolean task1prompted; 
boolean task1; 
boolean task2; 
boolean dialed; 

PFont font; 

void setup() { 
    size(800, 400); 
    background(0, 0, 0); 
    smooth(); 
    // IMPORTANT NOTE: 
    // The first serial port retrieved by Serial.list() 
    // should be your Arduino. If not, uncomment the next 
    // line by deleting the // before it. Run the sketch 
    // again to see a list of serial ports. Then, change 
    // the 0 in between [ and ] to the number of the port 
    // that your Arduino is connected to. 
    //println(Serial.list()); 
    String arduinoPort = Serial.list()[0]; 
    port = new Serial(this, arduinoPort, 9600); 

    task1 = false; 
    task2 = false; 
    task1prompted = false; 

    font = createFont("Arial", 32); 
    textFont(font, 32); 
    textAlign(CENTER); 
} 

void draw() { 
    if (port.available() > 0) { // If data is available, 
     val = port.read();  // read it and store it in val 
     if (val >= 48 && val <= 57) { 
      val = map(val, 48, 57, 0, 9); // Convert the value 
     } 
     println(val); 
    } 

    if (val == 97) { 
     println("dialing"); 
    } 

    if (val == 98){ 
     println("dialed"); 
     dialed = true; 
    } 

    /// switch will activate the task1 variable. 
    // Play sound file for the prompt. 
    if (task1prompted == false){ 
     delay(1000); 
     println("for spanish, press one. for french, press 2..."); 
     task1prompted = true; 
    } 

    task1 = true; 

    if (task1 == true && dialed == true) { 
     ///play sound file 

     if (val == 5) { 
      println("Thank you for playing... Blah blah next prompt."); 
      dialed = true; 
      task1=false; 
      task2=true; 
     } else 
      if (val != 5) { 
      println("We're sorry, all of our international operators are busy"); 
      task1 = true; 
      task2 = false; 
      dialed = false; 
     } 

    } 
    else 
     if (task2 == true){ 
      delay(1000); 
      println("task2 start"); 
     } 
} 

Мой инструктор помог мне получить это далеко, и я обыскивал ответы о том, как продолжать идти к следующей задаче/строке. Было бы проще использовать корпус и переключатель? И я даже делаю вложенные, если утверждения правильно?

Ну, я просто попытался это с эскиза и случае команды следующим образом:

/// Switch will activate the task1 variable. 
    // Play sound file for the prompt. 
    if (task1prompted == false){ 
     delay(1000); 
     println("for spanish, press one. for french, press 2..."); 
     task1prompted = true; 
    } 

    task1 = true; 

    if (task1 == true && dialed == true) { 
     ///Play sound file 

     int lang = (int)(val+0); 

     switch(lang) { 
      case 1: 
      case 2: 
      case 3: 
      case 4: 
       println("sorry no international operators"); // If 1-4 go back to choices 
       task1 = true; 
       task2 = false; 
       dialed = false; 
       break; 
      case 5: 
       println("thank you, move to next prompt"); // If 5 go to next prompt 
       task1=false; 
       task2=true; 
       dialed = true; 
       break; 
      case 6: 
      case 7: 
      case 8: 
      case 9: 
      case 0: 
       println("not a valid option, you lose"); // If not 1-5 go back to beginning 
       task1=false; 
       task2=false; 
       dialed = true; 
       break; 
     } 

     if (task2prompted == false){ 
      delay(1000); 
      println("please listen while we test the line"); 
      task2prompted = true; 
     } 

     task2 = true; 

     if (task2 == true && dialed == true) { 
     } ///Play sound file 

     int tone = (int)(val+0); 

     switch(tone) { 
      case 1: 
      case 2: 
      case 3: 
      case 5: 
      case 6: 
      case 7: 
      case 8: 
      case 9: 
      case 0: 
      println("not a valid connection, you lose"); // If not 4 go back to beginning 
      task2 = false; 
      task3 = false; 
      dialed = false; 
      break; 
      case 4: 
      println("thank you, move to next prompt"); // If 4 move to next prompt 
      task2=false; 
      task3=true; 
      dialed = true; 
      break; 
     } 
    } 
} 

Я до сих пор путают о том, как сделать это иметь уровни и не все происходят одновременно.

ответ

0

Возможно, вы захотите найти finite state machines. Это довольно распространенный подход к работе с пользовательскими интерфейсами, управляемыми событиями.

0

Я не совсем уверен, что ваш вопрос, но, возможно, что-то здесь будет ответить на него, если не только уточнить, что вы ищете

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

Пример:

switch(tone) { 
     case 4: 
     println("thank you, move to next prompt"); // If 4 move to next prompt 
     task2=false; 
     task3=true; 
     dialed = true; 
     break; 
     default: 
     println("not a valid connection, you lose"); // If not 4 go back to beginning 
     task2 = false; 
     task3 = false; 
     dialed = false; 
    } 

по умолчанию случаю не нужен перерыв, потому что это в конце. Но, по сути, это ловушка во всех случаях, если ничего не пострадает.

Кроме того, в некоторых из кода выше

if (val == 97) { 
    println("dialing"); 
} 

if (val == 98){ 
    println("dialed"); 
    dialed = true; 
} 

лучше использовать «еще, если», чтобы сделать его не нужно проверять через оба, если один правильный

if (val == 97) { 
    println("dialing"); 
} 

else if (val == 98){ 
    println("dialed"); 
    dialed = true; 
}