Modified Bomberman Game in mbed

Dependencies:   4DGL-uLCD-SE USBDevice mbed

Committer:
tshin7
Date:
Thu Oct 22 20:29:08 2015 +0000
Revision:
1:e62bd2dbaed4
Parent:
0:d67cfa38e861
asfaf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tshin7 0:d67cfa38e861 1 // uLCD-144-G2 demo program for uLCD-4GL LCD driver library
tshin7 0:d67cfa38e861 2 //
tshin7 0:d67cfa38e861 3 #include "mbed.h"
tshin7 0:d67cfa38e861 4 #include "uLCD_4DGL.h"
tshin7 0:d67cfa38e861 5 #include "rtos.h"
tshin7 0:d67cfa38e861 6
tshin7 0:d67cfa38e861 7 Ticker dirSet;
tshin7 0:d67cfa38e861 8 Ticker XorY;
tshin7 0:d67cfa38e861 9 Serial pc (USBTX,USBRX);
tshin7 0:d67cfa38e861 10 Mutex mutex;
tshin7 0:d67cfa38e861 11
tshin7 0:d67cfa38e861 12 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
tshin7 0:d67cfa38e861 13 float fx1=rand()%100+1,fy1=rand()%100+1,fx2=rand()%100+1,fy2=rand()%100+1,fx3=rand()%100+1,fy3=rand()%100+1, vx=1, vy=1;
tshin7 0:d67cfa38e861 14 int x1=(int)fx1,y1=(int)fy1,x2=(int)fx2,y2=(int)fy2,x3=(int)fx3,y3=(int)fy3, radius=3;
tshin7 0:d67cfa38e861 15 int xory1;
tshin7 0:d67cfa38e861 16 int xory2;
tshin7 0:d67cfa38e861 17 int xdir1;
tshin7 0:d67cfa38e861 18 int xdir2;
tshin7 0:d67cfa38e861 19 int ydir1;
tshin7 0:d67cfa38e861 20 int ydir2;
tshin7 0:d67cfa38e861 21 int hit1=0;
tshin7 0:d67cfa38e861 22 int hit2=0;
tshin7 0:d67cfa38e861 23 int timer=0;
tshin7 0:d67cfa38e861 24 int x4;
tshin7 0:d67cfa38e861 25 int y4;
tshin7 0:d67cfa38e861 26 char move;
tshin7 0:d67cfa38e861 27
tshin7 0:d67cfa38e861 28 void drawWalls() {
tshin7 0:d67cfa38e861 29 //draw walls
tshin7 0:d67cfa38e861 30 uLCD.line(0, 0, 127, 0, WHITE);
tshin7 0:d67cfa38e861 31 uLCD.line(127, 0, 127, 127, WHITE);
tshin7 0:d67cfa38e861 32 uLCD.line(127, 127, 0, 127, WHITE);
tshin7 0:d67cfa38e861 33 uLCD.line(0, 127, 0, 0, WHITE);
tshin7 0:d67cfa38e861 34 }
tshin7 0:d67cfa38e861 35
tshin7 0:d67cfa38e861 36 void setxory(){
tshin7 0:d67cfa38e861 37 xory1 = rand()%2;
tshin7 0:d67cfa38e861 38 xory2 = rand()%2;
tshin7 0:d67cfa38e861 39 }
tshin7 0:d67cfa38e861 40
tshin7 0:d67cfa38e861 41 void setDir(){
tshin7 0:d67cfa38e861 42 //set value of movement left/right and up/down
tshin7 0:d67cfa38e861 43 xdir1 = rand()%2;
tshin7 0:d67cfa38e861 44 ydir1 = rand()%2;
tshin7 0:d67cfa38e861 45 xdir2 = rand()%2;
tshin7 0:d67cfa38e861 46 ydir2 = rand()%2;
tshin7 0:d67cfa38e861 47 }
tshin7 0:d67cfa38e861 48
tshin7 0:d67cfa38e861 49 void drawBaddie1() {
tshin7 0:d67cfa38e861 50 //draw baddie1
tshin7 0:d67cfa38e861 51 uLCD.filled_circle(x1, y1, radius, RED);
tshin7 0:d67cfa38e861 52 }
tshin7 0:d67cfa38e861 53
tshin7 0:d67cfa38e861 54 void drawBaddie2() {
tshin7 0:d67cfa38e861 55 //draw baddie2
tshin7 0:d67cfa38e861 56 uLCD.filled_circle(x2, y2, radius, RED);
tshin7 0:d67cfa38e861 57 }
tshin7 0:d67cfa38e861 58 void eraseBaddie1() {
tshin7 0:d67cfa38e861 59 //erase old baddie1's locations
tshin7 0:d67cfa38e861 60 uLCD.filled_circle(x1, y1, radius, BLACK);
tshin7 0:d67cfa38e861 61 }
tshin7 0:d67cfa38e861 62 void eraseBaddie2() {
tshin7 0:d67cfa38e861 63 //erase old baddie2's locations
tshin7 0:d67cfa38e861 64 uLCD.filled_circle(x2, y2, radius, BLACK);
tshin7 0:d67cfa38e861 65 }
tshin7 0:d67cfa38e861 66 void moveBaddie1() {
tshin7 0:d67cfa38e861 67 //move baddie1
tshin7 0:d67cfa38e861 68 if (xory1==0){
tshin7 0:d67cfa38e861 69 if ((xdir1==0)||(x1<=radius+1)) fx1=fx1+vx;
tshin7 0:d67cfa38e861 70 if ((xdir1==1)||(x1>=126-radius)) fx1=fx1-vx;
tshin7 0:d67cfa38e861 71 } else if (xory1==1){
tshin7 0:d67cfa38e861 72 if ((ydir1==0)||(y1<=radius+1)) fy1=fy1+vy;
tshin7 0:d67cfa38e861 73 if ((ydir1==1)||(y1>=126-radius)) fy1=fy1-vy;
tshin7 0:d67cfa38e861 74 }
tshin7 0:d67cfa38e861 75 x1=(int)fx1;
tshin7 0:d67cfa38e861 76 y1=(int)fy1;
tshin7 0:d67cfa38e861 77 }
tshin7 0:d67cfa38e861 78
tshin7 0:d67cfa38e861 79 void moveBaddie2() {
tshin7 0:d67cfa38e861 80 //move baddie2
tshin7 0:d67cfa38e861 81 if (xory2==0){
tshin7 0:d67cfa38e861 82 if ((xdir2==0)||(x2<=radius+1)) fx2=fx2+vx;
tshin7 0:d67cfa38e861 83 if ((xdir2==1)||(x2>=126-radius)) fx2=fx2-vx;
tshin7 0:d67cfa38e861 84 } else if (xory1==1){
tshin7 0:d67cfa38e861 85 if ((ydir2==0)||(y2<=radius+1)) fy2=fy2+vy;
tshin7 0:d67cfa38e861 86 if ((ydir2==1)||(y2>=126-radius)) fy2=fy2-vy;
tshin7 0:d67cfa38e861 87 }
tshin7 0:d67cfa38e861 88 x2=(int)fx2;
tshin7 0:d67cfa38e861 89 y2=(int)fy2;
tshin7 0:d67cfa38e861 90 }
tshin7 0:d67cfa38e861 91
tshin7 0:d67cfa38e861 92 void drawHero() {
tshin7 0:d67cfa38e861 93 //draw Hero
tshin7 0:d67cfa38e861 94 uLCD.filled_circle(x3, y3, radius, GREEN);
tshin7 0:d67cfa38e861 95 }
tshin7 0:d67cfa38e861 96
tshin7 0:d67cfa38e861 97 void eraseHero() {
tshin7 0:d67cfa38e861 98 //erase old hero's location
tshin7 0:d67cfa38e861 99 uLCD.filled_circle(x3, y3, radius, BLACK);
tshin7 0:d67cfa38e861 100 }
tshin7 0:d67cfa38e861 101
tshin7 0:d67cfa38e861 102 void moveHero() {
tshin7 0:d67cfa38e861 103 //move hero's location
tshin7 0:d67cfa38e861 104 if (pc.readable()){
tshin7 0:d67cfa38e861 105 move = pc.getc();
tshin7 0:d67cfa38e861 106 if ((move=='d')||(x3<=radius+1)) fx3=fx3+2;
tshin7 0:d67cfa38e861 107 else if ((move=='a')||(x3>=126-radius)) fx3=fx3-2;
tshin7 0:d67cfa38e861 108 else if ((move=='s')||(y3<=radius+1)) fy3=fy3+2;
tshin7 0:d67cfa38e861 109 else if ((move=='w')||(y3>=126-radius)) fy3=fy3-2;
tshin7 0:d67cfa38e861 110 }
tshin7 0:d67cfa38e861 111 x3=(int)fx3;
tshin7 0:d67cfa38e861 112 y3=(int)fy3;
tshin7 0:d67cfa38e861 113 }
tshin7 0:d67cfa38e861 114 void bomb() {
tshin7 0:d67cfa38e861 115 if (move=='m'){
tshin7 1:e62bd2dbaed4 116 pc.printf("Boooooom!\n\r");
tshin7 0:d67cfa38e861 117 x4=x3;
tshin7 0:d67cfa38e861 118 y4=y3;
tshin7 1:e62bd2dbaed4 119 while(timer<=50){
tshin7 1:e62bd2dbaed4 120 uLCD.filled_circle(x4,y4,radius,BLUE);
tshin7 0:d67cfa38e861 121 drawHero();
tshin7 0:d67cfa38e861 122 eraseHero();
tshin7 0:d67cfa38e861 123 moveHero();
tshin7 0:d67cfa38e861 124 drawHero();
tshin7 0:d67cfa38e861 125 drawBaddie1();
tshin7 0:d67cfa38e861 126 eraseBaddie1();
tshin7 0:d67cfa38e861 127 moveBaddie1();
tshin7 0:d67cfa38e861 128 drawBaddie1();
tshin7 0:d67cfa38e861 129 drawBaddie2();
tshin7 0:d67cfa38e861 130 eraseBaddie2();
tshin7 0:d67cfa38e861 131 moveBaddie2();
tshin7 0:d67cfa38e861 132 drawBaddie2();
tshin7 0:d67cfa38e861 133 timer++;
tshin7 0:d67cfa38e861 134 }
tshin7 0:d67cfa38e861 135 timer=0;
tshin7 0:d67cfa38e861 136 uLCD.filled_rectangle(x4+3, y4+20, x4-3, y4-20, BLUE);
tshin7 0:d67cfa38e861 137 uLCD.filled_rectangle(x4+20, y4+3, x4-20, y4-3, BLUE);
tshin7 0:d67cfa38e861 138 wait(1);
tshin7 0:d67cfa38e861 139 uLCD.filled_rectangle(x4+3, y4+20, x4-3, y4-20, BLACK);
tshin7 0:d67cfa38e861 140 uLCD.filled_rectangle(x4+20, y4+3, x4-20, y4-3, BLACK);
tshin7 1:e62bd2dbaed4 141 if ((((x1-radius)<=(x4+20))&&((y1>=y4-5)&&(y1<=y4+5)))&&(((x1+radius)>=(x4-20))&&((y1>=y4-5)&&(y1<=y4+5)))){
tshin7 0:d67cfa38e861 142 hit1=1;
tshin7 0:d67cfa38e861 143 eraseBaddie1();
tshin7 0:d67cfa38e861 144 }
tshin7 0:d67cfa38e861 145 else if((((y1-radius)<=(y4+20))&&((x1>=x4-5)&&(x1<=x4+5)))&&(((y1-radius)>=(y4-20))&&((x1>=x4-5)&&(x1<=x4+5)))){
tshin7 0:d67cfa38e861 146 hit1=1;
tshin7 0:d67cfa38e861 147 eraseBaddie1();
tshin7 0:d67cfa38e861 148 }
tshin7 0:d67cfa38e861 149 else if ((((x2-radius)<=(x4+20))&&((y2>=y4-5)&&(y2<=y4+5)))&&(((x2+radius)>=(x4-20))&&((y2>=y4-5)&&(y2<=y4+5)))){
tshin7 0:d67cfa38e861 150 hit2=1;
tshin7 0:d67cfa38e861 151 eraseBaddie2();
tshin7 0:d67cfa38e861 152 }
tshin7 0:d67cfa38e861 153 else if ((((y2-radius)<=(y4+20))&&((x2>=x4-5)&&(x2<=x4+5)))&&(((y2-radius)>=(y4-20))&&((x2>=x4-5)&&(x2<=x4+5)))){
tshin7 0:d67cfa38e861 154 hit2=1;
tshin7 0:d67cfa38e861 155 eraseBaddie1();
tshin7 0:d67cfa38e861 156 }
tshin7 0:d67cfa38e861 157 }
tshin7 0:d67cfa38e861 158 }
tshin7 0:d67cfa38e861 159
tshin7 0:d67cfa38e861 160 int main(){
tshin7 0:d67cfa38e861 161 uLCD.baudrate(300000);
tshin7 0:d67cfa38e861 162 uLCD.background_color(BLACK);
tshin7 0:d67cfa38e861 163 uLCD.cls();
tshin7 0:d67cfa38e861 164 uLCD.text_width(1);
tshin7 0:d67cfa38e861 165 uLCD.text_height(1);
tshin7 0:d67cfa38e861 166 uLCD.printf("Modified Bomberman\n\r\n\rPress s\n\rto start Game");
tshin7 0:d67cfa38e861 167 if(pc.getc()=='s'){
tshin7 0:d67cfa38e861 168 uLCD.background_color(BLACK);
tshin7 0:d67cfa38e861 169 uLCD.cls();
tshin7 0:d67cfa38e861 170 }
tshin7 0:d67cfa38e861 171 drawWalls();
tshin7 0:d67cfa38e861 172 XorY.attach(&setxory, 0.5);
tshin7 0:d67cfa38e861 173 dirSet.attach(&setDir,0.5);
tshin7 0:d67cfa38e861 174 while(1){
tshin7 0:d67cfa38e861 175 drawHero();
tshin7 0:d67cfa38e861 176 eraseHero();
tshin7 0:d67cfa38e861 177 moveHero();
tshin7 0:d67cfa38e861 178 bomb();
tshin7 0:d67cfa38e861 179 drawHero();
tshin7 0:d67cfa38e861 180 if(hit1!=1){
tshin7 0:d67cfa38e861 181 drawBaddie1();
tshin7 0:d67cfa38e861 182 eraseBaddie1();
tshin7 0:d67cfa38e861 183 moveBaddie1();
tshin7 0:d67cfa38e861 184 drawBaddie1();
tshin7 0:d67cfa38e861 185 }
tshin7 0:d67cfa38e861 186 if(hit2!=1){
tshin7 0:d67cfa38e861 187 drawBaddie2();
tshin7 0:d67cfa38e861 188 eraseBaddie2();
tshin7 0:d67cfa38e861 189 moveBaddie2();
tshin7 0:d67cfa38e861 190 drawBaddie2();
tshin7 0:d67cfa38e861 191 }
tshin7 0:d67cfa38e861 192 if(hit1==1&&hit2==1)
tshin7 0:d67cfa38e861 193 {
tshin7 0:d67cfa38e861 194 uLCD.cls();
tshin7 0:d67cfa38e861 195 uLCD.printf("YOU WIN!");
tshin7 0:d67cfa38e861 196 break;
tshin7 0:d67cfa38e861 197 }
tshin7 0:d67cfa38e861 198 }
tshin7 0:d67cfa38e861 199 }