![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Modified Bomberman Game in mbed
Dependencies: 4DGL-uLCD-SE USBDevice mbed
Diff: main.cpp
- Revision:
- 0:d67cfa38e861
- Child:
- 1:e62bd2dbaed4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 22 20:20:53 2015 +0000 @@ -0,0 +1,200 @@ +// uLCD-144-G2 demo program for uLCD-4GL LCD driver library +// +#include "mbed.h" +#include "uLCD_4DGL.h" +#include "rtos.h" + +Ticker dirSet; +Ticker XorY; +Serial pc (USBTX,USBRX); +Mutex mutex; + +uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; +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; +int x1=(int)fx1,y1=(int)fy1,x2=(int)fx2,y2=(int)fy2,x3=(int)fx3,y3=(int)fy3, radius=3; +int xory1; +int xory2; +int xdir1; +int xdir2; +int ydir1; +int ydir2; +int hit1=0; +int hit2=0; +int timer=0; +int x4; +int y4; +char move; + +void drawWalls() { + //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); +} + +void setxory(){ + xory1 = rand()%2; + xory2 = rand()%2; +} + +void setDir(){ + //set value of movement left/right and up/down + xdir1 = rand()%2; + ydir1 = rand()%2; + xdir2 = rand()%2; + ydir2 = rand()%2; +} + +void drawBaddie1() { + //draw baddie1 + uLCD.filled_circle(x1, y1, radius, RED); +} + +void drawBaddie2() { + //draw baddie2 + uLCD.filled_circle(x2, y2, radius, RED); +} +void eraseBaddie1() { + //erase old baddie1's locations + uLCD.filled_circle(x1, y1, radius, BLACK); +} +void eraseBaddie2() { + //erase old baddie2's locations + uLCD.filled_circle(x2, y2, radius, BLACK); +} +void moveBaddie1() { + //move baddie1 + if (xory1==0){ + if ((xdir1==0)||(x1<=radius+1)) fx1=fx1+vx; + if ((xdir1==1)||(x1>=126-radius)) fx1=fx1-vx; + } else if (xory1==1){ + if ((ydir1==0)||(y1<=radius+1)) fy1=fy1+vy; + if ((ydir1==1)||(y1>=126-radius)) fy1=fy1-vy; + } + x1=(int)fx1; + y1=(int)fy1; +} + +void moveBaddie2() { + //move baddie2 + if (xory2==0){ + if ((xdir2==0)||(x2<=radius+1)) fx2=fx2+vx; + if ((xdir2==1)||(x2>=126-radius)) fx2=fx2-vx; + } else if (xory1==1){ + if ((ydir2==0)||(y2<=radius+1)) fy2=fy2+vy; + if ((ydir2==1)||(y2>=126-radius)) fy2=fy2-vy; + } + x2=(int)fx2; + y2=(int)fy2; +} + +void drawHero() { + //draw Hero + uLCD.filled_circle(x3, y3, radius, GREEN); +} + +void eraseHero() { + //erase old hero's location + uLCD.filled_circle(x3, y3, radius, BLACK); +} + +void moveHero() { + //move hero's location + if (pc.readable()){ + move = pc.getc(); + if ((move=='d')||(x3<=radius+1)) fx3=fx3+2; + else if ((move=='a')||(x3>=126-radius)) fx3=fx3-2; + else if ((move=='s')||(y3<=radius+1)) fy3=fy3+2; + else if ((move=='w')||(y3>=126-radius)) fy3=fy3-2; + } + x3=(int)fx3; + y3=(int)fy3; +} +void bomb() { + if (move=='m'){ + pc.printf("Boooooom!\n\r"); + uLCD.filled_circle(x3,y3,radius,BLUE); + x4=x3; + y4=y3; + while(timer<=300){ + drawHero(); + eraseHero(); + moveHero(); + drawHero(); + drawBaddie1(); + eraseBaddie1(); + moveBaddie1(); + drawBaddie1(); + drawBaddie2(); + eraseBaddie2(); + moveBaddie2(); + drawBaddie2(); + timer++; + } + timer=0; + wait(1); + uLCD.filled_rectangle(x4+3, y4+20, x4-3, y4-20, BLUE); + uLCD.filled_rectangle(x4+20, y4+3, x4-20, y4-3, BLUE); + wait(1); + uLCD.filled_rectangle(x4+3, y4+20, x4-3, y4-20, BLACK); + uLCD.filled_rectangle(x4+20, y4+3, x4-20, y4-3, BLACK); + if ((((x1-radius)<=(x4+20))&&((y1>=y3-5)&&(y1<=y3+5)))&&(((x1+radius)>=(x4-20))&&((y1>=y4-5)&&(y1<=y4+5)))){ + hit1=1; + eraseBaddie1(); + } + else if((((y1-radius)<=(y4+20))&&((x1>=x4-5)&&(x1<=x4+5)))&&(((y1-radius)>=(y4-20))&&((x1>=x4-5)&&(x1<=x4+5)))){ + hit1=1; + eraseBaddie1(); + } + else if ((((x2-radius)<=(x4+20))&&((y2>=y4-5)&&(y2<=y4+5)))&&(((x2+radius)>=(x4-20))&&((y2>=y4-5)&&(y2<=y4+5)))){ + hit2=1; + eraseBaddie2(); + } + else if ((((y2-radius)<=(y4+20))&&((x2>=x4-5)&&(x2<=x4+5)))&&(((y2-radius)>=(y4-20))&&((x2>=x4-5)&&(x2<=x4+5)))){ + hit2=1; + eraseBaddie1(); + } + } +} + +int main(){ + uLCD.baudrate(300000); + uLCD.background_color(BLACK); + uLCD.cls(); + uLCD.text_width(1); + uLCD.text_height(1); + uLCD.printf("Modified Bomberman\n\r\n\rPress s\n\rto start Game"); + if(pc.getc()=='s'){ + uLCD.background_color(BLACK); + uLCD.cls(); + } + drawWalls(); + XorY.attach(&setxory, 0.5); + dirSet.attach(&setDir,0.5); + while(1){ + drawHero(); + eraseHero(); + moveHero(); + bomb(); + drawHero(); + if(hit1!=1){ + drawBaddie1(); + eraseBaddie1(); + moveBaddie1(); + drawBaddie1(); + } + if(hit2!=1){ + drawBaddie2(); + eraseBaddie2(); + moveBaddie2(); + drawBaddie2(); + } + if(hit1==1&&hit2==1) + { + uLCD.cls(); + uLCD.printf("YOU WIN!"); + break; + } + } +} \ No newline at end of file