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:
Thu May 07 10:23:53 2015 +0000
Revision:
2:7c413a5377b8
Parent:
1:60ded2252111
Fixed serial communication issues with carriage returns.

Who changed what in which revision?

UserRevisionLine numberNew 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 2:7c413a5377b8 33 pc.printf("Enter secret number ? (0-9) \r\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 2:7c413a5377b8 39 pc.printf("Invalid number. Must be in the 0 .. 9 range \r\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 2:7c413a5377b8 46 pc.printf(" \r\n");
lmsousa 0:29ea6e039941 47 }
lmsousa 1:60ded2252111 48
lmsousa 0:29ea6e039941 49 do {
lmsousa 0:29ea6e039941 50 do {
lmsousa 2:7c413a5377b8 51 pc.printf("Guess the number. You have %d tries \r\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 2:7c413a5377b8 58 pc.printf("Too low. ");
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 2:7c413a5377b8 63 pc.printf("Too high. ");
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 2:7c413a5377b8 68 pc.printf("You guessed!! %d tries missing! \r\n\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 2:7c413a5377b8 75 pc.printf("No more tries!!! You lost! \r\n\n");
lmsousa 0:29ea6e039941 76 redLED = 0;
lmsousa 0:29ea6e039941 77 greenLED = 1;
lmsousa 0:29ea6e039941 78 blueLED = 1;
lmsousa 2:7c413a5377b8 79 } else if (!acertou) pc.printf("Try Again \r\n\n");
lmsousa 0:29ea6e039941 80 } while ((!acertou)&(ntent>0));
lmsousa 2:7c413a5377b8 81 pc.printf("New game? (Y/N) \r\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 2:7c413a5377b8 89 pc.printf("Game Over! \r\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 }