Marco Zecchini
/
Exercise_workshop_final
solved workshop exercise
main.cpp
- Committer:
- marcozecchini
- Date:
- 2019-03-12
- Revision:
- 0:f4a1a7ba4cdc
File content as of revision 0:f4a1a7ba4cdc:
#include "main.h" string readline_serial(){ //LO FANNO string buffer = ""; while(!expired){ if(pc.readable() > 0){ char c = pc.getc(); buffer = buffer + c; if (c=='!'){ return buffer.substr(0, buffer.length()-1); } } } expired = false; return 0; } string readline_questions(){ // LO MANTENGO size_t pos = questions.find("!"); string buffer = questions.substr(0, pos); read_questions += buffer; questions = questions.substr(pos+1); return buffer; } void parse_line(string line, question_t *res){ //LO FANNO int word = 0; size_t i = 0; string temp = ""; for (word = 0; word < 5; word++){ size_t pos = line.find(";"); res[word].answer = line.substr(i, pos); res[word].shown = 0; line = line.substr(pos+1); } } void expired_timeout(){ //LO FANNO expired = true; timeout.detach(); } void pressed(){ //LO FANNO if (!answering) pc.printf(">>> GAME PAUSED FOR 30 seconds <<<\n\r"); wait(30.0); pc.printf(">>> GAME RESUMED <<<\n\r"); } void toggling(){ //LO FANNO while(answering){ led = !led; wait(0.1); } } int main() { mybutton.fall(&pressed); pc.printf("Welcome to IoTQuiz! Are you ready to play? When you are ready send !\n\r"); readline_serial(); pc.printf("How many players are there?\n\r"); number_of_participants = atoi(readline_serial().data()); pc.printf("There are %d participants\n\r", number_of_participants); int turn = 0; int results[number_of_participants]; while (turn < TURN * number_of_participants){ int participant = turn % number_of_participants; if (turn < number_of_participants) results[participant] = 0; // properly initialization of results. pc.printf("It's the turn of player %d\n\r", participant); wait(5.0); answering = true; //from now on no more pause question_t parsed_line[5]; parse_line(readline_questions(), parsed_line); pc.printf(">>> QUESTION: %s\n\r", parsed_line[0].answer.data()); parsed_line[0].shown = 1; //To order randomly the answers int question_shown = 0; while (question_shown < 4){ int i = rand() % 4 + 1; if (parsed_line[i].shown == 0){ pc.printf(">>> %d) %s\n\r", ++question_shown, parsed_line[i].answer.data()); parsed_line[i].shown = 1; parsed_line[i].shown_as = question_shown; } } pc.printf("\n\r>>> Select the correct answer, you have 10 seconds! (A number among 1 and 4)\n\r"); //timeout starting timeout.attach(&expired_timeout, 10.0); Thread thread; //thread toggling led thread.start(toggling); // starts int correct = atoi(readline_serial().data()); answering = false; //join the thread and detach the timeout thread.join(); led = 0; timeout.detach(); if (correct == parsed_line[1].shown_as) { results[participant] += 1; pc.printf("\n\r>>>Right Answer!\n\r"); } else{ pc.printf("\n\r>>> Wrong Answer or Time Expired!\n\r"); } turn +=1 ; if (turn % number_of_participants == 0){ for (int i = 0; i<number_of_participants; i++){ pc.printf("\n\rPLAYER %d: %d points\n\r", i, results[i]); } } } }