Modified Bomberman Game in mbed
Dependencies: 4DGL-uLCD-SE USBDevice mbed
main.cpp@1:e62bd2dbaed4, 2015-10-22 (annotated)
- Committer:
- tshin7
- Date:
- Thu Oct 22 20:29:08 2015 +0000
- Revision:
- 1:e62bd2dbaed4
- Parent:
- 0:d67cfa38e861
asfaf
Who changed what in which revision?
User | Revision | Line number | New 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 | } |