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