solved workshop exercise

Committer:
marcozecchini
Date:
Tue Mar 12 15:00:59 2019 +0000
Revision:
0:f4a1a7ba4cdc
Final commit;

Who changed what in which revision?

UserRevisionLine numberNew 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 }