Code for Player 1 of Rock Paper Scissors Game

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player

main.cpp

Committer:
pkulkarni34
Date:
2015-10-19
Revision:
1:5841ff349aae
Parent:
0:75276caf1a37
Child:
2:d6ccc8dae85b

File content as of revision 1:5841ff349aae:

//ECE 4180 Mini Project
//Prachi Kulkarni and Kendra Dodson

#include "mbed.h"
#include "uLCD_4DGL.h"
#include "SDFileSystem.h"
#include "wave_player.h"
 
SDFileSystem sd(p5, p6, p7, p8, "sd");
AnalogOut DACout(p18);
wave_player waver(&DACout); // Wave Player

//DigitalOut myled(LED1);
uLCD_4DGL lcd(p28, p27, p29); //uLCD
DigitalIn pb1(p17); //Pushbutton 1 
DigitalIn pb2(p19); //Pushbutton 2
DigitalIn pb3(p20); //Pushbutton 3

PwmOut led1(p21); //led 1
PwmOut led2(p22); //led2
PwmOut led3(p23); //led3

//shiftbrite
DigitalOut latch(p15);
DigitalOut enable(p16);
SPI spi(p11, p12, p13);

//Choice
//Choice = 1 for rock
//Choice = 2 for paper
//Choice = 3 for scissors
int choice1 = 0; //Player 1's choice
int choice2 = 0; //Player 2's choice

//Points
int p1 = 0; //Player 1's points
int p2 = 0; //Player 2's points

//RGB function for Shiftbrite
void RGB_LED(int red, int green, int blue);
void RGB_LED(int red, int green, int blue)
{
    unsigned int low_color=0;
    unsigned int high_color=0;
    high_color=(blue<<4)|((red&0x3C0)>>6);
    low_color=(((red&0x3F)<<10)|(green));
    spi.write(high_color);
    spi.write(low_color);
    latch=1;
    latch=0;
}


int main() {
    L1:
    spi.format(16,0);
    spi.frequency(500000);
    enable=0;
    latch=0;
    pb1.mode(PullUp);
    wait(0.001);
    pb2.mode(PullUp);
    wait(0.001);
    pb3.mode(PullUp);
    wait(0.001);
    
    //Display 
    lcd.locate(0,0);
    //lcd_mutex.lock();
    lcd.printf("Rock Paper Scissor");
    lcd.locate(0,4);
    lcd.printf("Button 1 for Rocks");
    lcd.locate(0,6);
    lcd.printf("Button 2 for Paper");
    lcd.locate(0,8);
    lcd.printf("Button 3 for Scissors\n\n");
    lcd.printf("Press 1 to continue");
    wait(2);
    
    while(1){
    //If push button 1 is pressed, start the game!
    if(pb1 != 1){
    L3:
    lcd.cls(); //Clear screen
    
    //Tell player 1 that she/he has 5 seconds to chose between rock,paper and scissors
    lcd.locate(0,4);
    lcd.printf("     Player 1 \n\n\n");
    lcd.printf("You have 5 seconds");
    lcd.printf("    to choose\n");
    lcd.printf("    an option!\n");
    wait(2);
    

    //Start timer for 5 seconds
    int i;
    int red = 1;
    for(i = 5; i > -1 ; i--){
        lcd.cls();
        lcd.locate(4,4); //Place text in the center of the screen
        lcd.text_width(8); //Set tet width
        lcd.text_height(8); //Set text height
        lcd.text_bold(ON); //Set text style to 'bold'
        RGB_LED(red*25,0,0);//Increase intensity of light on shiftbrite as time decreases
        red = red + 5;
        lcd.printf("%d",i); //Display time left on LCD
        wait(1);
        //Press pushbutton 1 to choose rock
        if(pb1 != 1) {
            lcd.cls();
            choice1 = 1;
            lcd.printf("You chose rock!");
            lcd.circle(60, 60, 30,WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        //Press pushbutton 2 to choose paper
         if(pb2 != 1) {
            lcd.cls();
            choice1 = 2;
            lcd.printf("You chose paper!");
            lcd.rectangle(40, 60, 80,100,WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        //Press pushbutton 3 to choose scissor
           if(pb3 != 1) {
            lcd.cls();
            choice1 = 3;
            lcd.printf("You chose scissors!");
            lcd.circle(50, 60, 10,WHITE);
            lcd.circle(50, 80, 10,WHITE);
            lcd.line(62, 61, 90, 85, WHITE);
            lcd.line(62, 81, 90, 55, WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        }
        RGB_LED(0,0,0); // Reset shitbrite color
          
        //If user doesn't choose an option, show "Time Out" message and restart game
        if(i == -1){
            lcd.cls();
            lcd.printf("Your time is up"); 
            wait(5);
            goto L1; //Starts the game again
            }  
            
    lcd.cls(); //Clear screen
    wait(2);
    
    //Check to see if Player 2 is ready to play
    lcd.printf("Press 1 if P2 is  ready");
    
    //Start timer for player 2 if player 2 presses pushbutton 1
    while(1){
        if(pb1 != 1) break;
        }
    lcd.cls();
    wait(1);
    
    lcd.locate(0,4);
    lcd.printf("     Player 2 \n\n\n");
    lcd.printf("You have 5 seconds");
    lcd.printf("    to choose\n");
    lcd.printf("    an option!\n");
    wait(5);
    

    
    int j;
    int blue = 1;
    for(j = 5; j > -1 ; j--){
        lcd.cls();
        lcd.locate(4,4);
        lcd.text_width(8);
        lcd.text_height(8);
        RGB_LED(0,0,blue*25);
        blue = blue + 5;
        lcd.printf("%d",j);
        wait(1);
        
        //Rock
        if(pb1 != 1) {
            lcd.cls();
            choice2 = 1;
            lcd.printf("You chose rock!");
            lcd.circle(60, 60, 30,WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        //Paper
         if(pb2 != 1) {
            lcd.cls();
            choice2 = 2;
            lcd.printf("You chose paper!");
            lcd.rectangle(40, 60, 80,100,WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        //Scissors
           if(pb3 != 1) {
            lcd.cls();
            choice2 = 3;
            lcd.printf("You chose scissors!");
            lcd.circle(50, 60, 10,WHITE);
            lcd.circle(50, 80, 10,WHITE);
            lcd.line(62, 61, 90, 85, WHITE);
            lcd.line(62, 81, 90, 55, WHITE);
            wait(2);
            lcd.cls();
            break;
        }
        }   
        
        //Time out message
        if(j == -1){
            lcd.cls();
            lcd.printf("Your time is up"); 
            wait(5);
            goto L1;
            }  
         RGB_LED(0,0,0);   
            
    
        //Check to see who won
        
        //Case 1 : Both players choose same option        
        if(choice1 == 1 && choice2 == 1 ||
            choice1== 2 && choice2 == 2 || 
            choice1 == 3 && choice2 == 3 ) {
                lcd.cls();
                lcd.printf("It's a draw!");
                wait(4);
                lcd.cls();
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
                }
          //Case 2:
          //Player 1 : Rock
          //Player 2 : Paper      
          else if(choice1 == 1 && choice2 == 2){
              
                lcd.cls();
                lcd.printf("Player 1 chose Rock\n");
                lcd.printf("Player 2 chose Paper\n\n");
                
                lcd.printf("Player 2 wins!");
                lcd.rectangle(40, 60, 80,100,WHITE);
                p2++;
                wait(4);
                lcd.cls();
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }}
           //Case 3:
          //Player 1 : Paper
          //Player 2 : Rock
            else if(choice2== 1 && choice1== 2){
              
                lcd.cls();
                lcd.printf("P1 chose Paper\n");
                lcd.printf("P2 chose Rock\n\n");
                lcd.printf("P1 wins!");
                lcd.rectangle(40, 60, 80,100,WHITE);
                p1++;
                wait(5);
                lcd.cls();
                lcd.printf("P1 Score : %d\n",p1);
                lcd.printf("P2 Score : %d\n\n",p2);
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }     
    
           //Case 4:
          //Player 1 : Paper
          //Player 2 : Scissor
    
            else if(choice1 == 2 && choice2 == 3){
              
                lcd.cls();
                lcd.printf("P1 chose Paper\n");
                lcd.printf("P2 chose Scissors\n\n");
                
                lcd.printf("Player 2 wins!");
                p2++;
                lcd.circle(50, 60, 10,WHITE);
                lcd.circle(50, 80, 10,WHITE);
                lcd.line(62, 61, 90, 85, WHITE);
                lcd.line(62, 81, 90, 55, WHITE);
                wait(5);
                lcd.cls();
                lcd.printf("P1 Score : %d\n",p1);
                lcd.printf("P2 Score : %d\n\n",p2);
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }     
    //Case 5:
    //Player 1 : Scissor
    //Player 2 : Paper
    else if(choice1 == 3 && choice2 == 2){
              
                lcd.cls();
            
                lcd.printf("P1 chose Scissors\n");
                lcd.printf("P2 chose Paper\n\n");
                
                lcd.printf("P1 wins!");
                p1++;
                lcd.circle(50, 60, 10,WHITE);
                lcd.circle(50, 80, 10,WHITE);
                lcd.line(62, 61, 90, 85, WHITE);
                lcd.line(62, 81, 90, 55, WHITE);
                wait(5);
                lcd.cls();
                lcd.printf("P1 Score : %d\n",p1);
                lcd.printf("P2 Score : %d\n\n",p2);
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }     
    //Case 6:
    //Player 1 : Rock
    //Player 2 : Scissors
    else if(choice1 == 1 && choice2 == 3){
              
                lcd.cls();
                lcd.printf("P1 chose Rock\n");
                lcd.printf("P2 chose Scissors\n\n");
                
                lcd.printf("P1 wins!");
                p1++;
                lcd.circle(60, 60, 30,WHITE);
                wait(5);
                lcd.cls();
                lcd.printf("P1 Score : %d\n",p1);
                lcd.printf("P2 Score : %d\n\n",p2);
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }   
    //Case 7:
    //Player 1 : Scissors
    //Player 2 : Rock      
               
    else if(choice1 == 3 && choice2 == 1){
              
                lcd.cls();
                lcd.printf("P1 chose Scissors\n");
                lcd.printf("P2 chose Rock\n\n");
                
                lcd.printf("P2 wins!");
                p2++;
                lcd.circle(60, 60, 30,WHITE);
                wait(5);
                lcd.cls();
                lcd.printf("P1 Score : %d\n",p1);
                lcd.printf("P2 Score : %d\n\n",p2);
                lcd.printf("Press 1 to continue\n\n");
                lcd.printf("Press 2 to end\n\n");
                
                while(1){
                    if(pb1 != 1) {
                        lcd.cls();
                        goto L3;
                    }
                    else if(pb2 != 1) goto L2;
                }
               }     
    
    }  
    
    
            
    
    
    // Code to play a wave file
    /* FILE *wave_file;
    printf("\n\n\nHello, wave world!\n");
    wave_file=fopen("/sd/mydir/HG.wav","r");
    waver.play(wave_file);
    wait(5);
    printf("ok!!");
    fclose(wave_file);
    */
    
    
//If game ends :
L2:
lcd.cls();


                        //Create animation of two bouncing balls
                        float fx=50.0,fy=21.0,vx=5.0,vy=0.4,vx2=5,fx2=40.0;
                        int x=50,y=21,radius=4;
                        int x2 = 30, y2 = 10;
                        //draw walls
                        wait(2);
                        //If Player 1's score is higher than Player 2's score
                        if(p1 > p2) 
                        //lcd.printf("Player 1 wins!");
                        lcd.text_string("Player 1 Wins!", 2, 4, FONT_7X8, WHITE);
                        //If Player 1's score is equal to Player 2's score
                        else if(p1 == p2) 
                        //lcd.printf("It's a draw!");
                        lcd.text_string("It's a draw!", 2, 4, FONT_7X8, WHITE);
                        //If Player 2's score is higher than Player 1's score        
                        else if(p2 > p1) 
                        //lcd.printf("Player 2 wins!");
                       lcd.text_string("Player 2 Wins!", 2, 4, FONT_7X8, WHITE);
                       
                       
                            for (int i=0; i<100; i++) {
                                //draw ball
                                //lcd.cls();
                        if(p1 > p2) 
                        //lcd.printf("Player 1 wins!");
                        lcd.text_string("Player 1 Wins!", 2, 4, FONT_7X8, WHITE);
                        
                        else if(p1 == p2) 
                        //lcd.printf("It's a draw!");
                      lcd.text_string("It's a draw!", 2, 4, FONT_7X8, WHITE);
                                
                        else if(p2 > p1) 
                        //lcd.printf("Player 2 wins!");
                        lcd.text_string("Player 2 Wins!", 2, 4, FONT_7X8, WHITE);
                                
                                lcd.filled_circle(x, y, radius, RED);
                                lcd.filled_circle(x2,y2,radius,BLUE);
                                RGB_LED(x,y,x);
                                //bounce off edge walls and slow down a bit
                                if ((x<=radius+1) || (x>=126-radius)) vx = -.90*vx;
                                if ((y<=radius+1) || (y>=126-radius)) vy = -.90*vy;
                                if ((x2<=radius+1) || (x2>=126-radius)) vx2 = -.90*vx2;
                                if ((y2<=radius+1) || (y2>=126-radius)) vy = -.90*vy;
                                //erase old ball location
                                lcd.filled_circle(x, y, radius, BLACK);
                                lcd.filled_circle(x2, y2, radius, BLACK);
                                //move ball
                                fx=fx+vx;
                                fx2=fx2+vx2;
                                fy=fy+vy;
                                x=(int)fx;
                                y=(int)fy;
                                x2=(int)fx2;
                                y2=(int)fy;
                                }
wait(3);
lcd.cls();
lcd.printf("End!");
wait(3);
lcd.cls();
}