Marco Zecchini
/
Exercise_workshop_final
solved workshop exercise
main.cpp@0:f4a1a7ba4cdc, 2019-03-12 (annotated)
- Committer:
- marcozecchini
- Date:
- Tue Mar 12 15:00:59 2019 +0000
- Revision:
- 0:f4a1a7ba4cdc
Final commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcozecchini | 0:f4a1a7ba4cdc | 1 | #include "main.h" |
marcozecchini | 0:f4a1a7ba4cdc | 2 | |
marcozecchini | 0:f4a1a7ba4cdc | 3 | string readline_serial(){ //LO FANNO |
marcozecchini | 0:f4a1a7ba4cdc | 4 | string buffer = ""; |
marcozecchini | 0:f4a1a7ba4cdc | 5 | |
marcozecchini | 0:f4a1a7ba4cdc | 6 | while(!expired){ |
marcozecchini | 0:f4a1a7ba4cdc | 7 | if(pc.readable() > 0){ |
marcozecchini | 0:f4a1a7ba4cdc | 8 | char c = pc.getc(); |
marcozecchini | 0:f4a1a7ba4cdc | 9 | buffer = buffer + c; |
marcozecchini | 0:f4a1a7ba4cdc | 10 | if (c=='!'){ |
marcozecchini | 0:f4a1a7ba4cdc | 11 | return buffer.substr(0, buffer.length()-1); |
marcozecchini | 0:f4a1a7ba4cdc | 12 | } |
marcozecchini | 0:f4a1a7ba4cdc | 13 | } |
marcozecchini | 0:f4a1a7ba4cdc | 14 | } |
marcozecchini | 0:f4a1a7ba4cdc | 15 | |
marcozecchini | 0:f4a1a7ba4cdc | 16 | expired = false; |
marcozecchini | 0:f4a1a7ba4cdc | 17 | return 0; |
marcozecchini | 0:f4a1a7ba4cdc | 18 | |
marcozecchini | 0:f4a1a7ba4cdc | 19 | } |
marcozecchini | 0:f4a1a7ba4cdc | 20 | |
marcozecchini | 0:f4a1a7ba4cdc | 21 | string readline_questions(){ // LO MANTENGO |
marcozecchini | 0:f4a1a7ba4cdc | 22 | size_t pos = questions.find("!"); |
marcozecchini | 0:f4a1a7ba4cdc | 23 | string buffer = questions.substr(0, pos); |
marcozecchini | 0:f4a1a7ba4cdc | 24 | read_questions += buffer; |
marcozecchini | 0:f4a1a7ba4cdc | 25 | questions = questions.substr(pos+1); |
marcozecchini | 0:f4a1a7ba4cdc | 26 | |
marcozecchini | 0:f4a1a7ba4cdc | 27 | return buffer; |
marcozecchini | 0:f4a1a7ba4cdc | 28 | } |
marcozecchini | 0:f4a1a7ba4cdc | 29 | |
marcozecchini | 0:f4a1a7ba4cdc | 30 | void parse_line(string line, question_t *res){ //LO FANNO |
marcozecchini | 0:f4a1a7ba4cdc | 31 | int word = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 32 | size_t i = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 33 | string temp = ""; |
marcozecchini | 0:f4a1a7ba4cdc | 34 | |
marcozecchini | 0:f4a1a7ba4cdc | 35 | for (word = 0; word < 5; word++){ |
marcozecchini | 0:f4a1a7ba4cdc | 36 | size_t pos = line.find(";"); |
marcozecchini | 0:f4a1a7ba4cdc | 37 | res[word].answer = line.substr(i, pos); |
marcozecchini | 0:f4a1a7ba4cdc | 38 | res[word].shown = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 39 | line = line.substr(pos+1); |
marcozecchini | 0:f4a1a7ba4cdc | 40 | |
marcozecchini | 0:f4a1a7ba4cdc | 41 | } |
marcozecchini | 0:f4a1a7ba4cdc | 42 | } |
marcozecchini | 0:f4a1a7ba4cdc | 43 | |
marcozecchini | 0:f4a1a7ba4cdc | 44 | void expired_timeout(){ //LO FANNO |
marcozecchini | 0:f4a1a7ba4cdc | 45 | expired = true; |
marcozecchini | 0:f4a1a7ba4cdc | 46 | timeout.detach(); |
marcozecchini | 0:f4a1a7ba4cdc | 47 | } |
marcozecchini | 0:f4a1a7ba4cdc | 48 | |
marcozecchini | 0:f4a1a7ba4cdc | 49 | void pressed(){ //LO FANNO |
marcozecchini | 0:f4a1a7ba4cdc | 50 | if (!answering) pc.printf(">>> GAME PAUSED FOR 30 seconds <<<\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 51 | |
marcozecchini | 0:f4a1a7ba4cdc | 52 | wait(30.0); |
marcozecchini | 0:f4a1a7ba4cdc | 53 | |
marcozecchini | 0:f4a1a7ba4cdc | 54 | pc.printf(">>> GAME RESUMED <<<\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 55 | |
marcozecchini | 0:f4a1a7ba4cdc | 56 | } |
marcozecchini | 0:f4a1a7ba4cdc | 57 | |
marcozecchini | 0:f4a1a7ba4cdc | 58 | void toggling(){ //LO FANNO |
marcozecchini | 0:f4a1a7ba4cdc | 59 | while(answering){ |
marcozecchini | 0:f4a1a7ba4cdc | 60 | led = !led; |
marcozecchini | 0:f4a1a7ba4cdc | 61 | wait(0.1); |
marcozecchini | 0:f4a1a7ba4cdc | 62 | } |
marcozecchini | 0:f4a1a7ba4cdc | 63 | } |
marcozecchini | 0:f4a1a7ba4cdc | 64 | |
marcozecchini | 0:f4a1a7ba4cdc | 65 | int main() |
marcozecchini | 0:f4a1a7ba4cdc | 66 | { |
marcozecchini | 0:f4a1a7ba4cdc | 67 | mybutton.fall(&pressed); |
marcozecchini | 0:f4a1a7ba4cdc | 68 | pc.printf("Welcome to IoTQuiz! Are you ready to play? When you are ready send !\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 69 | readline_serial(); |
marcozecchini | 0:f4a1a7ba4cdc | 70 | |
marcozecchini | 0:f4a1a7ba4cdc | 71 | pc.printf("How many players are there?\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 72 | number_of_participants = atoi(readline_serial().data()); |
marcozecchini | 0:f4a1a7ba4cdc | 73 | |
marcozecchini | 0:f4a1a7ba4cdc | 74 | pc.printf("There are %d participants\n\r", number_of_participants); |
marcozecchini | 0:f4a1a7ba4cdc | 75 | int turn = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 76 | int results[number_of_participants]; |
marcozecchini | 0:f4a1a7ba4cdc | 77 | while (turn < TURN * number_of_participants){ |
marcozecchini | 0:f4a1a7ba4cdc | 78 | |
marcozecchini | 0:f4a1a7ba4cdc | 79 | int participant = turn % number_of_participants; |
marcozecchini | 0:f4a1a7ba4cdc | 80 | if (turn < number_of_participants) results[participant] = 0; // properly initialization of results. |
marcozecchini | 0:f4a1a7ba4cdc | 81 | |
marcozecchini | 0:f4a1a7ba4cdc | 82 | pc.printf("It's the turn of player %d\n\r", participant); |
marcozecchini | 0:f4a1a7ba4cdc | 83 | wait(5.0); |
marcozecchini | 0:f4a1a7ba4cdc | 84 | |
marcozecchini | 0:f4a1a7ba4cdc | 85 | answering = true; //from now on no more pause |
marcozecchini | 0:f4a1a7ba4cdc | 86 | question_t parsed_line[5]; |
marcozecchini | 0:f4a1a7ba4cdc | 87 | parse_line(readline_questions(), parsed_line); |
marcozecchini | 0:f4a1a7ba4cdc | 88 | pc.printf(">>> QUESTION: %s\n\r", parsed_line[0].answer.data()); |
marcozecchini | 0:f4a1a7ba4cdc | 89 | parsed_line[0].shown = 1; |
marcozecchini | 0:f4a1a7ba4cdc | 90 | |
marcozecchini | 0:f4a1a7ba4cdc | 91 | //To order randomly the answers |
marcozecchini | 0:f4a1a7ba4cdc | 92 | int question_shown = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 93 | while (question_shown < 4){ |
marcozecchini | 0:f4a1a7ba4cdc | 94 | int i = rand() % 4 + 1; |
marcozecchini | 0:f4a1a7ba4cdc | 95 | if (parsed_line[i].shown == 0){ |
marcozecchini | 0:f4a1a7ba4cdc | 96 | pc.printf(">>> %d) %s\n\r", ++question_shown, parsed_line[i].answer.data()); |
marcozecchini | 0:f4a1a7ba4cdc | 97 | parsed_line[i].shown = 1; |
marcozecchini | 0:f4a1a7ba4cdc | 98 | parsed_line[i].shown_as = question_shown; |
marcozecchini | 0:f4a1a7ba4cdc | 99 | } |
marcozecchini | 0:f4a1a7ba4cdc | 100 | } |
marcozecchini | 0:f4a1a7ba4cdc | 101 | |
marcozecchini | 0:f4a1a7ba4cdc | 102 | pc.printf("\n\r>>> Select the correct answer, you have 10 seconds! (A number among 1 and 4)\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 103 | |
marcozecchini | 0:f4a1a7ba4cdc | 104 | //timeout starting |
marcozecchini | 0:f4a1a7ba4cdc | 105 | timeout.attach(&expired_timeout, 10.0); |
marcozecchini | 0:f4a1a7ba4cdc | 106 | Thread thread; //thread toggling led |
marcozecchini | 0:f4a1a7ba4cdc | 107 | thread.start(toggling); // starts |
marcozecchini | 0:f4a1a7ba4cdc | 108 | |
marcozecchini | 0:f4a1a7ba4cdc | 109 | int correct = atoi(readline_serial().data()); |
marcozecchini | 0:f4a1a7ba4cdc | 110 | answering = false; |
marcozecchini | 0:f4a1a7ba4cdc | 111 | |
marcozecchini | 0:f4a1a7ba4cdc | 112 | //join the thread and detach the timeout |
marcozecchini | 0:f4a1a7ba4cdc | 113 | thread.join(); |
marcozecchini | 0:f4a1a7ba4cdc | 114 | led = 0; |
marcozecchini | 0:f4a1a7ba4cdc | 115 | timeout.detach(); |
marcozecchini | 0:f4a1a7ba4cdc | 116 | |
marcozecchini | 0:f4a1a7ba4cdc | 117 | if (correct == parsed_line[1].shown_as) { |
marcozecchini | 0:f4a1a7ba4cdc | 118 | results[participant] += 1; |
marcozecchini | 0:f4a1a7ba4cdc | 119 | pc.printf("\n\r>>>Right Answer!\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 120 | } |
marcozecchini | 0:f4a1a7ba4cdc | 121 | else{ |
marcozecchini | 0:f4a1a7ba4cdc | 122 | pc.printf("\n\r>>> Wrong Answer or Time Expired!\n\r"); |
marcozecchini | 0:f4a1a7ba4cdc | 123 | } |
marcozecchini | 0:f4a1a7ba4cdc | 124 | |
marcozecchini | 0:f4a1a7ba4cdc | 125 | turn +=1 ; |
marcozecchini | 0:f4a1a7ba4cdc | 126 | if (turn % number_of_participants == 0){ |
marcozecchini | 0:f4a1a7ba4cdc | 127 | for (int i = 0; i<number_of_participants; i++){ |
marcozecchini | 0:f4a1a7ba4cdc | 128 | pc.printf("\n\rPLAYER %d: %d points\n\r", i, results[i]); |
marcozecchini | 0:f4a1a7ba4cdc | 129 | } |
marcozecchini | 0:f4a1a7ba4cdc | 130 | } |
marcozecchini | 0:f4a1a7ba4cdc | 131 | } |
marcozecchini | 0:f4a1a7ba4cdc | 132 | |
marcozecchini | 0:f4a1a7ba4cdc | 133 | } |