![](/media/cache/profiles/Pass2.jpg.50x50_q85.jpg)
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@0:29ea6e039941, 2015-05-05 (annotated)
- Committer:
- lmsousa
- Date:
- Tue May 05 19:07:37 2015 +0000
- Revision:
- 0:29ea6e039941
- Child:
- 1:60ded2252111
Guess a number, Portuguese edition. Using a terminal program in the PC conected to the mbed serial port we can play this 2 player game. The first player sets the secret number between 0 and 9, and the second player tries to guess it.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lmsousa | 0:29ea6e039941 | 1 | //#include <stdio.h> |
lmsousa | 0:29ea6e039941 | 2 | //#include <stdlib.h> |
lmsousa | 0:29ea6e039941 | 3 | //#include <time.h> |
lmsousa | 0:29ea6e039941 | 4 | //#include <conio.h> |
lmsousa | 0:29ea6e039941 | 5 | #include "mbed.h" |
lmsousa | 0:29ea6e039941 | 6 | |
lmsousa | 0:29ea6e039941 | 7 | Serial pc(USBTX, USBRX); |
lmsousa | 0:29ea6e039941 | 8 | DigitalOut redLED(LED_RED); // Define digital outputs for each LED color |
lmsousa | 0:29ea6e039941 | 9 | DigitalOut greenLED(LED_GREEN); |
lmsousa | 0:29ea6e039941 | 10 | DigitalOut blueLED(LED_BLUE); |
lmsousa | 0:29ea6e039941 | 11 | |
lmsousa | 0:29ea6e039941 | 12 | int main(void) |
lmsousa | 0:29ea6e039941 | 13 | { |
lmsousa | 0:29ea6e039941 | 14 | pc.baud(9600); |
lmsousa | 0:29ea6e039941 | 15 | int ntent = 3; //tentativas |
lmsousa | 0:29ea6e039941 | 16 | int nint = 0; //numero introduzido |
lmsousa | 0:29ea6e039941 | 17 | int nsec = 0; //numero secreto |
lmsousa | 0:29ea6e039941 | 18 | int acertou = 0; |
lmsousa | 0:29ea6e039941 | 19 | int valid = 0; //Numero e valido (0 ..9) |
lmsousa | 0:29ea6e039941 | 20 | int play = 1; |
lmsousa | 0:29ea6e039941 | 21 | char opcao='N'; |
lmsousa | 0:29ea6e039941 | 22 | int n=0; |
lmsousa | 0:29ea6e039941 | 23 | |
lmsousa | 0:29ea6e039941 | 24 | do { |
lmsousa | 0:29ea6e039941 | 25 | redLED = 1; // This a common anode RGB LED, with the anodes connected |
lmsousa | 0:29ea6e039941 | 26 | greenLED = 1; // to 1. Thus, to turn a color off you counterintuitively set |
lmsousa | 0:29ea6e039941 | 27 | blueLED = 1; // it to 1, so there is no voltage difference across the LED |
lmsousa | 0:29ea6e039941 | 28 | /* NEW GAME */ |
lmsousa | 0:29ea6e039941 | 29 | do { |
lmsousa | 0:29ea6e039941 | 30 | // clrscr(); |
lmsousa | 0:29ea6e039941 | 31 | pc.printf("Introduza o Numero Secreto (0-9) \n"); |
lmsousa | 0:29ea6e039941 | 32 | nsec=pc.getc() - '0'; |
lmsousa | 0:29ea6e039941 | 33 | //scanf("%d", &nsec); |
lmsousa | 0:29ea6e039941 | 34 | if((nsec>=0)&(nsec<=9)) valid=1; |
lmsousa | 0:29ea6e039941 | 35 | else { |
lmsousa | 0:29ea6e039941 | 36 | valid=0; |
lmsousa | 0:29ea6e039941 | 37 | pc.printf("Numero invalido. O numero deve estar entre 0 e 9 \n"); |
lmsousa | 0:29ea6e039941 | 38 | } |
lmsousa | 0:29ea6e039941 | 39 | } while(! valid); |
lmsousa | 0:29ea6e039941 | 40 | ntent=3; |
lmsousa | 0:29ea6e039941 | 41 | acertou=0; |
lmsousa | 0:29ea6e039941 | 42 | // clrscr(); /* o jogador 2 nao pode ver os ecrans anteriores */ |
lmsousa | 0:29ea6e039941 | 43 | for (n=0; n<40; n++) { |
lmsousa | 0:29ea6e039941 | 44 | pc.printf(" \n"); |
lmsousa | 0:29ea6e039941 | 45 | } |
lmsousa | 0:29ea6e039941 | 46 | /* Tentativa N */ |
lmsousa | 0:29ea6e039941 | 47 | do { |
lmsousa | 0:29ea6e039941 | 48 | do { |
lmsousa | 0:29ea6e039941 | 49 | pc.printf("Adivinhe o numero. Tem %d tentativas \n",ntent); |
lmsousa | 0:29ea6e039941 | 50 | nint=pc.getc() -'0'; |
lmsousa | 0:29ea6e039941 | 51 | //scanf("%d", &nint); |
lmsousa | 0:29ea6e039941 | 52 | valid =(nint>=0)&(nint<=9); |
lmsousa | 0:29ea6e039941 | 53 | } while (! valid); |
lmsousa | 0:29ea6e039941 | 54 | ntent--; |
lmsousa | 0:29ea6e039941 | 55 | if (nint < nsec) { |
lmsousa | 0:29ea6e039941 | 56 | pc.printf("Valor baixo. \n"); |
lmsousa | 0:29ea6e039941 | 57 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 58 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 59 | blueLED = 0; |
lmsousa | 0:29ea6e039941 | 60 | } else if (nint > nsec) { |
lmsousa | 0:29ea6e039941 | 61 | pc.printf("Valor alto. \n"); |
lmsousa | 0:29ea6e039941 | 62 | redLED = 0; |
lmsousa | 0:29ea6e039941 | 63 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 64 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 65 | } else { /* if (nint == nsec) */ |
lmsousa | 0:29ea6e039941 | 66 | pc.printf("Parabens acertou!! Faltavam %d tentativas! \n", ntent); |
lmsousa | 0:29ea6e039941 | 67 | acertou = 1; |
lmsousa | 0:29ea6e039941 | 68 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 69 | greenLED = 0; |
lmsousa | 0:29ea6e039941 | 70 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 71 | } |
lmsousa | 0:29ea6e039941 | 72 | if (ntent ==0 & !acertou) { |
lmsousa | 0:29ea6e039941 | 73 | pc.printf("Perdeu!!! Esgotou as tentativas \n"); |
lmsousa | 0:29ea6e039941 | 74 | redLED = 0; |
lmsousa | 0:29ea6e039941 | 75 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 76 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 77 | } else if (!acertou) pc.printf("Tente novamente \n"); |
lmsousa | 0:29ea6e039941 | 78 | } while ((!acertou)&(ntent>0)); |
lmsousa | 0:29ea6e039941 | 79 | pc.printf("Novo Jogo? (S/N) \n"); |
lmsousa | 0:29ea6e039941 | 80 | opcao=pc.getc(); |
lmsousa | 0:29ea6e039941 | 81 | // scanf(" %c", &opcao); |
lmsousa | 0:29ea6e039941 | 82 | // opcao = getchar(); */ |
lmsousa | 0:29ea6e039941 | 83 | if((opcao =='S')||(opcao =='s')) play=1; |
lmsousa | 0:29ea6e039941 | 84 | else { |
lmsousa | 0:29ea6e039941 | 85 | play=0; |
lmsousa | 0:29ea6e039941 | 86 | // clrscr(); |
lmsousa | 0:29ea6e039941 | 87 | pc.printf("Jogo Terminado! \n"); |
lmsousa | 0:29ea6e039941 | 88 | } |
lmsousa | 0:29ea6e039941 | 89 | } while (play); |
lmsousa | 0:29ea6e039941 | 90 | redLED = 1; |
lmsousa | 0:29ea6e039941 | 91 | greenLED = 1; |
lmsousa | 0:29ea6e039941 | 92 | blueLED = 1; |
lmsousa | 0:29ea6e039941 | 93 | return 0; |
lmsousa | 0:29ea6e039941 | 94 | } |