2 Player Tron

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

Fork of 2PlayerTron by Martin Yeh

Files at this revision

API Documentation at this revision

Comitter:
myeh
Date:
Tue Oct 20 22:00:45 2015 +0000
Commit message:
Version 1.0

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
wave_player.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 682f13c1e0b8 4DGL-uLCD-SE.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/4180_1/code/4DGL-uLCD-SE/#e39a44de229a
diff -r 000000000000 -r 682f13c1e0b8 SDFileSystem.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
diff -r 000000000000 -r 682f13c1e0b8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,286 @@
+
+// uLCD-144-G2 demo program for uLCD-4GL LCD driver library
+//
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "rtos.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+ 
+uLCD_4DGL uLCD(p9,p10,p8); // serial tx, serial rx, reset pin;
+BusIn joy1(p11,p12,p13,p14,p15);
+BusIn joy2(p16,p17,p19,p20,p21);
+
+int player1_direction = 1;
+int player2_direction = 2;
+bool hitClick;
+bool play1 = false;
+int choice = 1;
+FILE *wave_file;
+
+SDFileSystem sd(p5, p6, p7, p27, "sd"); //SD card
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+
+// Thread 1
+// Joystick 1
+void joy1_thread(void const *args) {
+    while(true) {
+        switch(joy1) {
+            case 0x1e: 
+            if (player1_direction != 4) {
+                player1_direction = 3; 
+            }
+            break;
+            case 0x1d: hitClick = true; break;
+            case 0x1b: 
+            if (player1_direction != 1) {
+                player1_direction = 2; 
+            }
+            break;
+            case 0x17:
+            if (player1_direction != 3) {
+                player1_direction = 4; 
+            }
+            break;
+            case 0xf: 
+            if (player1_direction != 2) {
+                player1_direction = 1; 
+            }
+            break;
+        }
+        
+        Thread::wait(50);
+    }
+}
+
+// Thread 2
+// Joystick 2
+void joy2_thread(void const *args) {
+    while(true) {
+        switch(joy2) {
+            case 0x1e: 
+            if (player2_direction != 4) {
+                player2_direction = 3; 
+            }
+            break;
+            case 0x1d: hitClick = true; break;
+            case 0x1b: 
+            if (player2_direction != 1) {
+                player2_direction = 2; 
+            }
+            break;
+            case 0x17:
+            if (player2_direction != 3) {
+                player2_direction = 4; 
+            }
+            break;
+            case 0xf: 
+            if (player2_direction != 2) {
+                player2_direction = 1; 
+            }
+            break;
+        }
+        
+        Thread::wait(50);
+    }
+}
+
+int main()
+{
+    Thread thread(joy1_thread);
+    Thread thread2(joy2_thread);
+    
+    
+    while (true) {
+        uLCD.filled_rectangle(0, 0, 128, 128, 0x000000);
+        uLCD.text_width(4); //4X size text
+        uLCD.text_height(4);
+        uLCD.color(RED);
+        
+        
+        wave_file=fopen("/sd/wavfiles/dp_tron_start.wav","r");
+        waver.play(wave_file);
+        fclose(wave_file);
+        
+        for (int i=4; i>=0; --i) {
+            uLCD.locate(1.9,1.9);
+            uLCD.printf("%d",i);
+            Thread::wait(400);
+        }
+        uLCD.cls();
+        
+        player1_direction = 1;
+        player2_direction = 2;
+        int velocity = 2;
+        int p1x = 50;
+        int p1y = 50;
+        int p2x = 100;
+        int p2y = 100;
+        int size = 2;
+        int vel = 2;
+        int count = 0;
+        int p1xH[1000];
+        int p1yH[1000];
+        int p2xH[1000];
+        int p2yH[1000];
+        int lost_player = 0;
+        
+        
+        
+        bool game = true;
+        uLCD.filled_rectangle(0, 0, 128, 128, 0x000000);
+        //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);
+        
+        uLCD.filled_rectangle(p1x, p1y, p1x + size, p1y + size, 0xFF0000);
+        uLCD.filled_rectangle(p2x, p2y, p2x + size, p2y + size, 0x0000FF);
+        
+        while(game) {
+            // check the previous paths
+            p1xH[count] = p1x;
+            p1yH[count] = p1y;
+            p2xH[count] = p2x;
+            p2yH[count] = p2y;
+            
+            // Movement for Player 1
+            if (player1_direction == 1) { // moving right
+                if (p1x >= 126 - size) {
+                    lost_player = 1;
+                    game = false;
+                } 
+                p1x = p1x + vel;
+                
+            } else if (player1_direction == 2) { // moving left
+                if (p1x <= size + 1) {
+                    lost_player = 1;
+                    game = false;
+                }
+                p1x = p1x - vel;
+            
+            } else if (player1_direction == 3) { // moving up
+                if (p1y <= size + 1) {
+                    lost_player = 1;
+                    game = false;
+                } 
+                p1y = p1y - vel;
+            
+            } else if (player1_direction == 4) { // moving down
+                if (p1y >= 126 - size) {
+                    lost_player = 1;
+                    game = false;
+                }
+                p1y = p1y + vel;
+            }
+            
+            
+            // Movement for Player 2
+            if (player2_direction == 1) { // moving right
+                if (p2x >= 126 - size) {
+                    lost_player = 2;
+                    game = false;
+                } 
+                p2x = p2x + vel;
+            } else if (player2_direction == 2) { // moving left
+                if (p2x <= size + 1) {
+                    lost_player = 2;
+                    game = false;
+                }
+                p2x = p2x - vel;
+            } else if (player2_direction == 3) { // moving up
+                if (p2y <= size + 1) {
+                    lost_player = 2;
+                    game = false;
+                } 
+                p2y = p2y - vel;
+                
+            } else if (player2_direction == 4) { // moving down
+                if (p2y >= 126 - size) {
+                    lost_player = 2;
+                    game = false;
+                }
+                p2y = p2y + vel;
+            }
+            
+            //collision check
+            bool found = false;
+            for (int i=0; (i < count+1 && !found); i++) {
+                // for player 1
+                if ((p2xH[i] > (p1x + size)) || ((p2xH[i] + size) < p1x) || ((p2yH[i] + size) < p1y) || (p2yH[i] > (p1y + size))) {
+                    
+                } else {
+                    found = true;
+                    game = false;
+                    lost_player = 1;
+                }
+                
+                if (i > 0) {
+                    int j = i - 1;
+                    if ((p1xH[j] >= (p1x + size)) || ((p1xH[j] + size) <= p1x) || ((p1yH[j] + size) <= p1y) || (p1yH[j] >= (p1y + size))) {
+                    
+                    } else {
+                        found = true;
+                        game = false;
+                        lost_player = 1;
+                    }
+                }
+                
+                // for player 2
+                if ((p1xH[i] > (p2x + size)) || ((p1xH[i] + size) < p2x) || ((p1yH[i] + size) < p2y) || (p1yH[i] > (p2y + size))) {
+                    //test passed
+                } else {
+                    found = true;
+                    game = false;
+                    lost_player = 2;
+                }
+                
+                if (i > 0) {
+                    int j = i - 1;
+                    if ((p2xH[j] >= (p2x + size)) || ((p2xH[j] + size) <= p2x) || ((p2yH[j] + size) <= p2y) || (p2yH[j] >= (p2y + size))) {
+                        
+                    } else {
+                        found = true;
+                        game = false;
+                        lost_player = 2;
+                    }
+                }
+            }
+            
+            
+            //Drawing the path.
+            uLCD.filled_rectangle(p1x, p1y, p1x + size, p1y + size, 0xFF0000);
+            uLCD.filled_rectangle(p2x, p2y, p2x + size, p2y + size, 0x0000FF);
+            
+            
+            
+            if (!game) {
+                uLCD.filled_rectangle(0, 0, 128, 128, 0x000000);
+                choice = 2;
+                play1 = true;
+                uLCD.locate(5,2);
+                uLCD.printf("Game over");
+                uLCD.locate(3,4);
+                uLCD.printf("Player %d LOST", lost_player);
+                uLCD.locate(2,9);
+                uLCD.color(GREEN);
+                uLCD.printf("Click to start!");
+                wave_file=fopen("/sd/wavfiles/dp_tron_end.wav","r");
+                waver.play(wave_file);
+                fclose(wave_file);
+                hitClick = false;
+                while (!hitClick) {
+                    Thread::wait(300);
+                }
+            }
+            count = count + 1;
+            Thread::wait(30);
+        }
+    
+    }
+    /*if ((x<=radius+1) || (x>=126-radius)) vx = -.90*vx;
+        if ((y<=radius+1) || (y>=126-radius)) vy = -.90*vy;*/
+//......more code demos can be found in main.cpp
+}
\ No newline at end of file
diff -r 000000000000 -r 682f13c1e0b8 mbed-rtos.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#12552ef4e980
diff -r 000000000000 -r 682f13c1e0b8 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68
\ No newline at end of file
diff -r 000000000000 -r 682f13c1e0b8 wave_player.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wave_player.lib	Tue Oct 20 22:00:45 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/sravet/code/wave_player/#acc3e18e77ad