simple game using 2 mbed devices

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed LSM9DS0

Revision:
0:8016d44e8294
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/player1/main.cpp	Tue Oct 20 20:04:10 2015 +0000
@@ -0,0 +1,334 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "uLCD_4DGL.h"
+#include <math.h>
+
+Serial pc(USBTX, USBRX);
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+//digital in for player 1 contorls
+DigitalIn up1(p16);
+DigitalIn center1(p17);
+DigitalIn left1(p15);
+DigitalIn down1(p19);
+DigitalIn right1(p20);
+////
+//////digital in for player 2 controls
+DigitalIn up2(p22);
+DigitalIn center2(p23);
+DigitalIn left2(p24);
+DigitalIn down2(p25);
+DigitalIn right2(p26);
+//pwmout for sound
+AnalogOut sound_out(p18);
+//
+////mutex lock for printing to the lcd (only one thread can have the lock at once)
+//Mutex p1_mutex;
+//Mutex p2_mutex;
+//
+//the lcd instance to print to
+uLCD_4DGL uLCD(p9, p10, p11);
+
+typedef struct {
+    int x;
+    int y;
+    int old_x;
+    int old_y;
+    int points;
+    int size;
+    int color;
+} player;
+
+player player1 = {5,5,0,0,0,5,0xFFFFFF}; 
+player player2 = {120,120,0,0,0,5,0xFF00FF}; 
+
+
+int getDX(int left, int right){
+    if(left == 0)
+        return -1;
+    else if (right == 0)
+        return 1;
+    else 
+        return 0;
+}
+
+int getDY(int up, int down){
+    if(up == 0)
+        return -1;
+    else if (down == 0)
+        return 1;
+    else 
+        return 0;
+}
+
+
+void getP1Info(void const *args){
+    while(1){
+//        int dx = getDX(left1, right1);
+//        int dy = getDY(up1, down1);
+//        p1_mutex.lock();
+//        player1.x += dx;
+//        player1.y += dy;
+//        p1_mutex.unlock();
+//        
+        led1 = !led1;
+        Thread::wait(100);
+    }
+    
+}
+
+void getP2Info(void const *args){
+    while(1){
+ //       int dx = getDX(left2, right2);
+//        int dy = getDY(up2, down2);
+//        p2_mutex.lock();
+//        player2.x += dx;
+//        player2.y += dy;
+//        p2_mutex.unlock();
+//        
+        led2 = !led2;
+        Thread::wait(100);
+        
+        
+    }
+}
+
+void playMusic(double amp){
+    sound_out = amp;
+}
+
+////the method that displays information to 
+//void display2LCD(char x, char y, const char* s){
+//    lcd.locate(x,y);
+//    lcd.printf("%s\n", s);
+//}
+
+char* strAppendInt(const char* s, int i){
+    char integer_string[32];
+    sprintf(integer_string, "%d", i);
+
+    char* new_s = (char*) malloc(strlen(s) + strlen(integer_string));
+    strcpy(new_s, s);
+    strcat(new_s, integer_string); // other_string now contains "Integer: 1234"
+    
+    return new_s;
+}
+
+void fixPlayersXY(player* player){
+    if(player->x < 2){
+        player->x = 3;
+    }else if(player->x > 126){
+        player->x = 125;
+    }
+    
+    if(player->y < 2){
+        player->y = 3;
+    }else if(player->y > 126){
+        player->y = 125;
+    }
+}
+
+void update(){
+    while(1){
+        //p1_mutex.lock();
+        
+        int dx = getDX(left1, right1);
+        int dy = getDY(up1, down1);
+        player1.x += dx;
+        player1.y += dy;
+        fixPlayersXY(&player1);
+        uLCD.circle(player1.old_x , player1.old_y , player1.size, 0);
+        uLCD.circle(player1.x , player1.y , player1.size, player1.color);
+        player1.old_x = player1.x;
+        player1.old_y = player1.y;
+        int x1 = player1.x;
+        int y1 = player1.y;
+        
+ //       char* s = "\n1:";
+//        pc.printf(strAppendInt(strAppendInt(s, x1), y1));
+        
+        //p1_mutex.unlock();
+        
+        //p2_mutex.lock();
+        int dx2 = getDX(left2, right2);
+        int dy2 = getDY(up2, down2);        
+        player2.x += dx2;
+        player2.y += dy2;
+        fixPlayersXY(&player2);
+                
+        uLCD.circle(player2.old_x , player2.old_y , player2.size, 0);
+        uLCD.circle(player2.x , player2.y , player2.size, player2.color);
+        player2.old_x = player2.x;
+        player2.old_y = player2.y;
+        int x2 = player2.x;
+        int y2 = player2.y;
+        
+        //char* s1 = " 2:";
+        //pc.printf(strAppendInt(strAppendInt(s1, x2), y2));
+        
+        //p2_mutex.unlock();
+        
+        double dist = sqrt((double) ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));
+        //char* s2 = " d:";
+        //pc.printf(strAppendInt(s2, (int) (dist*100)));
+        
+        playMusic(dist/1810.0);
+        
+        //WINNING CONDITION        
+        if(dist < (double) player1.size || dist < (double) player2.size){
+            while(1){
+                playMusic(0.0);
+            }
+        }
+
+        //uLCD.filled_circle(60, 50, 30, 0xFF00FF);
+//        uLCD.triangle(120, 100, 40, 40, 10, 100, 0x0000FF);
+//        uLCD.line(0, 0, 80, 60, 0xFF0000);
+//        uLCD.filled_rectangle(50, 50, 100, 90, 0x00FF00);
+//        uLCD.pixel(60, 60, BLACK);
+//        uLCD.read_pixel(120, 70);
+//        uLCD.circle(120, 60, 10, BLACK);
+//        uLCD.set_font(FONT_7X8);
+//        uLCD.text_mode(TRANSPARENT);
+//        uLCD.text_bold(ON);
+//        uLCD.text_char('B', 9, 8, BLACK);
+//        uLCD.text_char('I',10, 8, BLACK);
+//        uLCD.text_char('G',11, 8, BLACK);
+//        uLCD.text_italic(ON);
+//        uLCD.text_string("This is a test of string", 1, 4, FONT_7X8, WHITE);
+//        wait(2);
+        
+        led3 = !led3;
+        wait(0.05);
+    }
+}
+
+
+//sets up the LCD display
+void setup(){
+    //set up the lcd
+    uLCD.baudrate(3000000);
+    uLCD.background_color(0);
+    uLCD.cls();
+    uLCD.printf("Initializing...");
+    uLCD.cls();
+    
+    pc.baud(9600);
+    
+    //load the wave file from sd
+    //loadWaveFileFromSD();
+}
+
+
+int main() {
+    //set up for the threads
+    setup();
+
+    //test();
+
+//    Thread t1(getP1Info);
+//    Thread t2(getP2Info);
+    //one of the threads is just going to be the main method
+    update();
+}
+
+
+
+//        int dur = mySpeaker.getDuration();
+//        int note = mySpeaker.getNoteCount();
+//        
+//        char* s = "Duration:";
+//        s = strAppendInt(s, dur);
+//        strcat(s, ", Current Note:");
+//        s = strAppendInt(s, note); 
+//        
+//        display2LCD(0, 0, s);
+//        
+//        Thread::wait(1000);
+
+////appends an integer to a string and returns the pointer to the new string
+
+
+
+//
+//void test(){
+//    uLCD.printf("\nHello uLCD World\n"); //Default Green on black text
+//    uLCD.printf("\n  Starting Demo...");
+//    uLCD.text_width(4); //4X size text
+//    uLCD.text_height(4);
+//    uLCD.color(RED);
+//    for (int i=10; i>=0; --i) {
+//        uLCD.locate(1,2);
+//        uLCD.printf("%2D",i);
+//        wait(.5);
+//    }
+//    uLCD.cls();
+//    uLCD.printf("Change baudrate......");
+//    uLCD.baudrate(3000000); //jack up baud rate to max for fast display
+//    //if demo hangs here - try lower baud rates
+//    //
+//    // printf text only full screen mode demo
+//    uLCD.background_color(BLUE);
+//    uLCD.cls();
+//    uLCD.locate(0,0);
+//    uLCD.color(WHITE);
+//    uLCD.textbackground_color(BLUE);
+//    uLCD.set_font(FONT_7X8);
+//    uLCD.text_mode(OPAQUE);
+//    int i=0;
+//    while(i<64) {
+//        if(i%16==0) uLCD.cls();
+//        uLCD.printf("TxtLine %2D Page %D\n",i%16,i/16 );
+//        i++; //16 lines with 18 charaters per line
+//    }
+//    wait(0.5);
+//    //demo graphics commands
+//    uLCD.background_color(BLACK);
+//    uLCD.cls();
+//    uLCD.background_color(DGREY);
+//    uLCD.filled_circle(60, 50, 30, 0xFF00FF);
+//    uLCD.triangle(120, 100, 40, 40, 10, 100, 0x0000FF);
+//    uLCD.line(0, 0, 80, 60, 0xFF0000);
+//    uLCD.filled_rectangle(50, 50, 100, 90, 0x00FF00);
+//    uLCD.pixel(60, 60, BLACK);
+//    uLCD.read_pixel(120, 70);
+//    uLCD.circle(120, 60, 10, BLACK);
+//    uLCD.set_font(FONT_7X8);
+//    uLCD.text_mode(TRANSPARENT);
+//    uLCD.text_bold(ON);
+//    uLCD.text_char('B', 9, 8, BLACK);
+//    uLCD.text_char('I',10, 8, BLACK);
+//    uLCD.text_char('G',11, 8, BLACK);
+//    uLCD.text_italic(ON);
+//    uLCD.text_string("This is a test of string", 1, 4, FONT_7X8, WHITE);
+//    wait(2);
+// 
+////Bouncing Ball Demo
+//    float fx=50.0,fy=21.0,vx=1.0,vy=0.4;
+//    int x=50,y=21,radius=4;
+//    uLCD.background_color(BLACK);
+//    uLCD.cls();
+//    //draw walls
+//    uLCD.line(0, 0, 127, 0, WHITE);
+//    uLCD.line(127, 0, 127, 127, WHITE);
+//    uLCD.line(127, 127, 0, 127, WHITE);
+//    uLCD.line(0, 127, 0, 0, WHITE);
+//    for (int i=0; i<1500; i++) {
+//        //draw ball
+//        uLCD.filled_circle(x, y, radius, RED);
+//        //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;
+//        //erase old ball location
+//        uLCD.filled_circle(x, y, radius, BLACK);
+//        //move ball
+//        fx=fx+vx;
+//        fy=fy+vy;
+//        x=(int)fx;
+//        y=(int)fy;
+//    }
+//}
\ No newline at end of file