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.

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }