Guess a number. Using mbed serial port and a terminal on the PC, we can play this 2 player game. First player sets the secret number between 0 ..9, second player has 3 tries to guess it.
main.cpp@1:60ded2252111, 2015-05-07 (annotated)
- Committer:
- lmsousa
- Date:
- Thu May 07 09:20:55 2015 +0000
- Revision:
- 1:60ded2252111
- Parent:
- 0:29ea6e039941
- Child:
- 2:7c413a5377b8
Guess a number English edition. Using the KL25Z serial port (don't forget to install the PC driver) and a terminal emulator on the PC you can play the 'Guess a Number"
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lmsousa | 1:60ded2252111 | 1 | // Code by Luis Sousa |
lmsousa | 1:60ded2252111 | 2 | |
lmsousa | 0:29ea6e039941 | 3 | //#include <stdio.h> |
lmsousa | 0:29ea6e039941 | 4 | //#include <stdlib.h> |
lmsousa | 0:29ea6e039941 | 5 | //#include <time.h> |
lmsousa | 0:29ea6e039941 | 6 | //#include <conio.h> |
lmsousa | 0:29ea6e039941 | 7 | #include "mbed.h" |
lmsousa | 0:29ea6e039941 | 8 | |
lmsousa | 0:29ea6e039941 | 9 | Serial pc(USBTX, USBRX); |
lmsousa | 0:29ea6e039941 | 10 | DigitalOut redLED(LED_RED); // Define digital outputs for each LED color |
lmsousa | 0:29ea6e039941 | 11 | DigitalOut greenLED(LED_GREEN); |
lmsousa | 0:29ea6e039941 | 12 | DigitalOut blueLED(LED_BLUE); |
lmsousa | 0:29ea6e039941 | 13 | |
lmsousa | 0:29ea6e039941 | 14 | int main(void) |
lmsousa | 0:29ea6e039941 | 15 | { |
lmsousa | 0:29ea6e039941 | 16 | pc.baud(9600); |
lmsousa | 1:60ded2252111 | 17 | int ntent = 3; //max tries |
lmsousa | 1:60ded2252111 | 18 | int nint = 0; //guess |
lmsousa | 1:60ded2252111 | 19 | int nsec = 0; //secret number |
lmsousa | 0:29ea6e039941 | 20 | int acertou = 0; |
lmsousa | 1:60ded2252111 | 21 | int valid = 0; //valid number? |
lmsousa | 0:29ea6e039941 | 22 | int play = 1; |
lmsousa | 1:60ded2252111 | 23 | char opcao='N'; //option |
lmsousa | 0:29ea6e039941 | 24 | int n=0; |
lmsousa | 0:29ea6e039941 | 25 | |
lmsousa | 0:29ea6e039941 | 26 | do { |
lmsousa | 0:29ea6e039941 | 27 | redLED = 1; // This a common anode RGB LED, with the anodes connected |
lmsousa | 0:29ea6e039941 | 28 | greenLED = 1; // to 1. Thus, to turn a color off you counterintuitively set |
lmsousa | 0:29ea6e039941 | 29 | blueLED = 1; // it to 1, so there is no voltage difference across the LED |
lmsousa | 0:29ea6e039941 | 30 | /* NEW GAME */ |
lmsousa | 0:29ea6e039941 | 31 | do { |
lmsousa | 0:29ea6e039941 | 32 | // clrscr(); |
lmsousa | 1:60ded2252111 | 33 | pc.printf("Enter secret number ? (0-9) \n"); |
lmsousa | 0:29ea6e039941 | 34 | nsec=pc.getc() - '0'; |
lmsousa | 0:29ea6e039941 | 35 | //scanf("%d", &nsec); |
lmsousa | 0:29ea6e039941 | 36 | if((nsec>=0)&(nsec<=9)) valid=1; |
lmsousa | 0:29ea6e039941 | 37 | else { |
lmsousa | 0:29ea6e039941 | 38 | valid=0; |
lmsousa | 1:60ded2252111 | 39 | pc.printf("Invalid number. Must be in the 0 .. 9 range \n "); |
lmsousa | 0:29ea6e039941 | 40 | } |
lmsousa | 0:29ea6e039941 | 41 | } while(! valid); |
lmsousa | 0:29ea6e039941 | 42 | ntent=3; |
lmsousa | 0:29ea6e039941 | 43 | acertou=0; |
lmsousa | 1:60ded2252111 | 44 | // clrscr(); /* player 2 can't see previous screen */ |
lmsousa | 0:29ea6e039941 | 45 | for (n=0; n<40; n++) { |
lmsousa | 0:29ea6e039941 | 46 | pc.printf(" \n"); |
lmsousa | 0:29ea6e039941 | 47 | } |
lmsousa | 1:60ded2252111 | 48 | |
lmsousa | 0:29ea6e039941 | 49 | do { |
lmsousa | 0:29ea6e039941 | 50 | do { |
lmsousa | 1:60ded2252111 | 51 | pc.printf("Guess the number. You have %d tries \n",ntent); |
lmsousa | 0:29ea6e039941 | 52 | nint=pc.getc() -'0'; |
lmsousa | 0:29ea6e039941 | 53 | //scanf("%d", &nint); |
lmsousa | 0:29ea6e039941 | 54 | valid =(nint>=0)&(nint<=9); |
lmsousa | 0:29ea6e039941 | 55 | } while (! valid); |
lmsousa | 0:29ea6e039941 | 56 | ntent--; |
lmsousa | 0:29ea6e039941 | 57 | if (nint < nsec) { |
lmsousa | 1:60ded2252111 | 58 | pc.printf("Too low. \n"); |
lmsousa | 0:29ea6e039941 | 59 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 60 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 61 | blueLED = 0; |
lmsousa | 0:29ea6e039941 | 62 | } else if (nint > nsec) { |
lmsousa | 1:60ded2252111 | 63 | pc.printf("Too high. \n"); |
lmsousa | 0:29ea6e039941 | 64 | redLED = 0; |
lmsousa | 0:29ea6e039941 | 65 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 66 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 67 | } else { /* if (nint == nsec) */ |
lmsousa | 1:60ded2252111 | 68 | pc.printf("You guessed!! %d tries missing! \n", ntent); |
lmsousa | 0:29ea6e039941 | 69 | acertou = 1; |
lmsousa | 0:29ea6e039941 | 70 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 71 | greenLED = 0; |
lmsousa | 0:29ea6e039941 | 72 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 73 | } |
lmsousa | 0:29ea6e039941 | 74 | if (ntent ==0 & !acertou) { |
lmsousa | 1:60ded2252111 | 75 | pc.printf("No more tries!!! You lost! \n"); |
lmsousa | 0:29ea6e039941 | 76 | redLED = 0; |
lmsousa | 0:29ea6e039941 | 77 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 78 | blueLED = 1; |
lmsousa | 1:60ded2252111 | 79 | } else if (!acertou) pc.printf("Try Again \n"); |
lmsousa | 0:29ea6e039941 | 80 | } while ((!acertou)&(ntent>0)); |
lmsousa | 1:60ded2252111 | 81 | pc.printf("New game? (Y/N) \n"); |
lmsousa | 0:29ea6e039941 | 82 | opcao=pc.getc(); |
lmsousa | 0:29ea6e039941 | 83 | // scanf(" %c", &opcao); |
lmsousa | 0:29ea6e039941 | 84 | // opcao = getchar(); */ |
lmsousa | 1:60ded2252111 | 85 | if((opcao =='Y')||(opcao =='y')) play=1; |
lmsousa | 0:29ea6e039941 | 86 | else { |
lmsousa | 0:29ea6e039941 | 87 | play=0; |
lmsousa | 0:29ea6e039941 | 88 | // clrscr(); |
lmsousa | 1:60ded2252111 | 89 | pc.printf("Game Over! \n"); |
lmsousa | 0:29ea6e039941 | 90 | } |
lmsousa | 0:29ea6e039941 | 91 | } while (play); |
lmsousa | 0:29ea6e039941 | 92 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 93 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 94 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 95 | return 0; |
lmsousa | 0:29ea6e039941 | 96 | } |