Как написать вложенный if или case, чтобы сделать запрос меню ввода? - PullRequest
0 голосов
/ 12 марта 2012

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

У меня есть план действий, и я начал кодировать некоторые операторы if then, чтобы начать работу, но теперь я наткнулся на case и switch.

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

Мой вопрос заключается в том, как создать непрерывный набор вложенных операторов if / then или ИСПОЛЬЗОВАТЬ регистр и переключаться между сериями запросов и вводов?

Вот мой набросок:

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");
        }
}

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

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

    /// 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;
        }
    }
}

Я все еще не понимаю, как сделать так, чтобы уровни имели уровни, и не все происходило одновременно.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

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

0 голосов
/ 31 июля 2012

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

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

Пример:

    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;
}

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

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

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