QuickClick, a reaction timing game which allows single and multiplayer mode.

Dependencies:   Controller Display N5110 Operator mbed

Committer:
domkay97
Date:
Tue May 02 18:05:43 2017 +0000
Revision:
14:2d4e4c3ba44e
Parent:
13:a8c86ae9ca1b
Changed some method names, added more comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
domkay97 0:e19df24a20fc 1 #include "mbed.h"
domkay97 0:e19df24a20fc 2 #include "N5110.h"
domkay97 9:7237faca8baa 3 #include "Display.h"
domkay97 9:7237faca8baa 4 #include "Controller.h"
domkay97 0:e19df24a20fc 5 #include "Operator.h"
domkay97 0:e19df24a20fc 6
domkay97 9:7237faca8baa 7 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
domkay97 9:7237faca8baa 8 Display display;
domkay97 9:7237faca8baa 9 Controller ctrl;
domkay97 9:7237faca8baa 10 Operator Opp;
domkay97 9:7237faca8baa 11
domkay97 9:7237faca8baa 12 int num_players;
domkay97 0:e19df24a20fc 13 int instruction_val;
domkay97 14:2d4e4c3ba44e 14 int current_player;
domkay97 9:7237faca8baa 15 bool multi_player;
domkay97 0:e19df24a20fc 16 void starter();
domkay97 0:e19df24a20fc 17
domkay97 9:7237faca8baa 18 /** Polar coordinate struct */
domkay97 9:7237faca8baa 19
domkay97 9:7237faca8baa 20
domkay97 9:7237faca8baa 21 int main()
domkay97 9:7237faca8baa 22 {
domkay97 9:7237faca8baa 23
domkay97 13:a8c86ae9ca1b 24 lcd.init(); //the lcd and controller are configured and set to their default states
domkay97 9:7237faca8baa 25 display.init(); //
domkay97 9:7237faca8baa 26 ctrl.init(); //
domkay97 9:7237faca8baa 27
domkay97 13:a8c86ae9ca1b 28 starter(); //Method describing starting screen when the controller is first booted up
domkay97 9:7237faca8baa 29
domkay97 9:7237faca8baa 30 while(1) {
domkay97 14:2d4e4c3ba44e 31 current_player = Opp.check_next_player(current_player, lcd, ctrl, display); // find the current player after 10 goes or failure
domkay97 14:2d4e4c3ba44e 32 if (Opp.test_player(current_player, ctrl, display, lcd)) { //current player returns true or flase depending on success
domkay97 14:2d4e4c3ba44e 33 Opp.correct(current_player, ctrl); //process correct response
domkay97 9:7237faca8baa 34 } else {
domkay97 14:2d4e4c3ba44e 35 Opp.inCorrect(current_player, ctrl); // process incorrect response
domkay97 9:7237faca8baa 36
domkay97 14:2d4e4c3ba44e 37 if (!multi_player || (multi_player && Opp.both_dead()) ) { //game over called if single player or multiplayer and both players are dead
domkay97 12:c0f1f6d007dc 38 Opp.gameOver(ctrl, lcd); //display score and level
domkay97 9:7237faca8baa 39 display.init(); //reset waiting time
domkay97 9:7237faca8baa 40 starter();
domkay97 9:7237faca8baa 41 } //go back to starter screen
domkay97 3:e67f9ba37049 42 }
domkay97 0:e19df24a20fc 43 }
domkay97 9:7237faca8baa 44
domkay97 9:7237faca8baa 45
domkay97 0:e19df24a20fc 46 }
domkay97 5:b6fcee26c5ff 47
domkay97 9:7237faca8baa 48 void starter()
domkay97 9:7237faca8baa 49 {
domkay97 9:7237faca8baa 50
domkay97 9:7237faca8baa 51 num_players = 1;
domkay97 9:7237faca8baa 52
domkay97 9:7237faca8baa 53
domkay97 9:7237faca8baa 54 lcd.clear();
domkay97 9:7237faca8baa 55 lcd.printString("Quick Click",10,0);
domkay97 9:7237faca8baa 56
domkay97 8:22abb23cd8af 57 lcd.refresh();
domkay97 9:7237faca8baa 58 while (ctrl.check_event(Controller::JOY_PRESSED) == false) { // set single or multiplayer
domkay97 8:22abb23cd8af 59
domkay97 8:22abb23cd8af 60
domkay97 9:7237faca8baa 61 float flicked = ctrl.get_joy(); // pressing Joystick completes selection
domkay97 13:a8c86ae9ca1b 62 if (flicked > 1) { // flicking Joystick left or right selects no of players
domkay97 9:7237faca8baa 63 num_players--;
domkay97 9:7237faca8baa 64 }
domkay97 8:22abb23cd8af 65 if (flicked < -0.5) {
domkay97 9:7237faca8baa 66 num_players++;
domkay97 9:7237faca8baa 67 }
domkay97 9:7237faca8baa 68 if (num_players < 1) { // lowest value is 1
domkay97 9:7237faca8baa 69 num_players = 1;
domkay97 9:7237faca8baa 70 }
domkay97 13:a8c86ae9ca1b 71 if (num_players > 2) { // highest value is 2
domkay97 9:7237faca8baa 72 num_players = 2;
domkay97 9:7237faca8baa 73 }
domkay97 9:7237faca8baa 74
domkay97 9:7237faca8baa 75 if (num_players == 1) {
domkay97 10:7f5a9ec5fb26 76 lcd.printString("<Single>Player",0,2); // display message
domkay97 9:7237faca8baa 77 multi_player = false;
domkay97 14:2d4e4c3ba44e 78 current_player = 0;
domkay97 9:7237faca8baa 79
domkay97 9:7237faca8baa 80 } else {
domkay97 10:7f5a9ec5fb26 81 lcd.printString("<Multi >Player",0,2); // display message
domkay97 9:7237faca8baa 82 multi_player = true;
domkay97 14:2d4e4c3ba44e 83 current_player = 1;
domkay97 9:7237faca8baa 84 }
domkay97 10:7f5a9ec5fb26 85
domkay97 9:7237faca8baa 86 Opp.setup_players(num_players);
domkay97 10:7f5a9ec5fb26 87 lcd.printString("<JOYSTICK>",10,5);
domkay97 8:22abb23cd8af 88 lcd.refresh();
domkay97 8:22abb23cd8af 89 wait(0.2);
domkay97 9:7237faca8baa 90 }
domkay97 9:7237faca8baa 91
domkay97 9:7237faca8baa 92 lcd.clear();
domkay97 8:22abb23cd8af 93 lcd.printString("Quick Click",10,0); //text to be displayed when on starter screen
domkay97 7:365bd984c68e 94 lcd.printString("Start >",24,5);
domkay97 0:e19df24a20fc 95 lcd.refresh();
domkay97 9:7237faca8baa 96
domkay97 9:7237faca8baa 97
domkay97 9:7237faca8baa 98
domkay97 13:a8c86ae9ca1b 99 while (ctrl.check_event(Controller::START_PRESSED) == false) { //keep flashing the leds and perform no other action until start is pressed
domkay97 9:7237faca8baa 100 ctrl.ledsON();
domkay97 0:e19df24a20fc 101 wait(0.1);
domkay97 7:365bd984c68e 102 ctrl.ledsOFF();
domkay97 0:e19df24a20fc 103 wait(0.1);
domkay97 0:e19df24a20fc 104 }
domkay97 9:7237faca8baa 105 }