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 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?

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