xuanyu an / Mbed 2 deprecated tankworld

Dependencies:   mbed N5110

Committer:
an_xuanyu
Date:
Tue May 04 14:18:28 2021 +0000
Revision:
3:4bc4e762a906
Parent:
2:ce24c50fc0a6
anxuanyu;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cbs27 0:a9ef8a5c769a 1 #include "mbed.h"
cbs27 0:a9ef8a5c769a 2 #include "N5110.h"
YPA_YPA 2:ce24c50fc0a6 3 #include "main.h"
YPA_YPA 2:ce24c50fc0a6 4 #ifndef bullet_v
cbs27 0:a9ef8a5c769a 5 #define bullet_v 3//炮弹的速度为坦克三倍
YPA_YPA 2:ce24c50fc0a6 6 #endif
YPA_YPA 2:ce24c50fc0a6 7 #ifndef tank_num
cbs27 0:a9ef8a5c769a 8 #define tank_num 4//坦克数量
YPA_YPA 2:ce24c50fc0a6 9 #endif
cbs27 0:a9ef8a5c769a 10
YPA_YPA 2:ce24c50fc0a6 11 DigitalIn button_A2(p29);
YPA_YPA 2:ce24c50fc0a6 12 DigitalIn button_B2(p28);
YPA_YPA 2:ce24c50fc0a6 13 DigitalIn button_C2(p27);
YPA_YPA 2:ce24c50fc0a6 14 DigitalIn button_D2(p26);
YPA_YPA 2:ce24c50fc0a6 15
YPA_YPA 2:ce24c50fc0a6 16 AnalogIn joy_v2(p20);
YPA_YPA 2:ce24c50fc0a6 17 AnalogIn joy_h2(p19);
YPA_YPA 2:ce24c50fc0a6 18 AnalogIn joy_button2(p17); // could be DigitalIn, but use AnalogIn so pot can also be used
an_xuanyu 1:47967167a3a6 19
cbs27 0:a9ef8a5c769a 20 // JP1 must be in 2/3 position
YPA_YPA 2:ce24c50fc0a6 21 N5110 lcd2(p8,p9,p10,p11,p13,p21);
cbs27 0:a9ef8a5c769a 22 const int map[9][11] = {
cbs27 0:a9ef8a5c769a 23 { 0,0,0,0,0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 24 { 0,1,0,2,1,1,1,2,0,1,0},
cbs27 0:a9ef8a5c769a 25 { 0,1,0,2,0,1,0,2,0,1,0},
cbs27 0:a9ef8a5c769a 26 { 0,0,0,0,0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 27 { 2,2,0,1,2,2,2,1,0,2,2},
cbs27 0:a9ef8a5c769a 28 { 0,0,0,0,0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 29 { 0,1,0,2,0,1,0,2,0,1,0},
cbs27 0:a9ef8a5c769a 30 { 0,1,0,2,1,1,1,2,0,1,0},
cbs27 0:a9ef8a5c769a 31 { 0,0,0,0,0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 32 };//9*11大小的地图,1是墙,2是灌木
cbs27 0:a9ef8a5c769a 33 const int wall[5][7] = {
cbs27 0:a9ef8a5c769a 34 { 1,1,1,1,1,1,1},
cbs27 0:a9ef8a5c769a 35 { 1,1,0,0,0,1,1},
cbs27 0:a9ef8a5c769a 36 { 1,1,0,0,0,1,1},
cbs27 0:a9ef8a5c769a 37 { 1,1,0,0,0,1,1},
cbs27 0:a9ef8a5c769a 38 { 1,1,1,1,1,1,1},
cbs27 0:a9ef8a5c769a 39 };//5*7的墙,不可破坏
cbs27 0:a9ef8a5c769a 40 const int bush[5][7] = {
cbs27 0:a9ef8a5c769a 41 { 1,0,1,0,1,0,1},
cbs27 0:a9ef8a5c769a 42 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 43 { 1,0,1,0,1,0,1},
cbs27 0:a9ef8a5c769a 44 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 45 { 1,0,1,0,1,0,1},
cbs27 0:a9ef8a5c769a 46
cbs27 0:a9ef8a5c769a 47 };//5*7的g灌木,可破坏
cbs27 0:a9ef8a5c769a 48 const int destroyed_bush[5][7] = {
cbs27 0:a9ef8a5c769a 49 { 1,0,0,1,0,0,1},
cbs27 0:a9ef8a5c769a 50 { 0,0,1,0,0,1,0},
cbs27 0:a9ef8a5c769a 51 { 0,1,0,0,1,0,0},
cbs27 0:a9ef8a5c769a 52 { 1,0,0,1,0,0,1},
cbs27 0:a9ef8a5c769a 53 { 0,0,1,0,0,1,0},
cbs27 0:a9ef8a5c769a 54
cbs27 0:a9ef8a5c769a 55 };//被击中的灌木
an_xuanyu 1:47967167a3a6 56 const int tank[tank_num][4][5][7] = {
cbs27 0:a9ef8a5c769a 57 {
cbs27 0:a9ef8a5c769a 58 {
cbs27 0:a9ef8a5c769a 59 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 60 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 61 { 0,1,1,0,1,1,0},
cbs27 0:a9ef8a5c769a 62 { 0,1,1,0,1,1,0},
cbs27 0:a9ef8a5c769a 63 { 0,1,0,0,0,1,0}
cbs27 0:a9ef8a5c769a 64 },
cbs27 0:a9ef8a5c769a 65 {
cbs27 0:a9ef8a5c769a 66 { 0,1,0,0,0,1,0},
cbs27 0:a9ef8a5c769a 67 { 0,1,1,0,1,1,0},
cbs27 0:a9ef8a5c769a 68 { 0,1,1,0,1,1,0},
cbs27 0:a9ef8a5c769a 69 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 70 { 0,1,0,1,0,1,0}
cbs27 0:a9ef8a5c769a 71 },
cbs27 0:a9ef8a5c769a 72 {
cbs27 0:a9ef8a5c769a 73 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 74 { 0,0,1,1,1,0,0},
cbs27 0:a9ef8a5c769a 75 { 0,1,1,0,0,0,0},
cbs27 0:a9ef8a5c769a 76 { 0,0,1,1,1,0,0},
an_xuanyu 1:47967167a3a6 77 { 0,1,1,1,1,1,0}
an_xuanyu 1:47967167a3a6 78 },
cbs27 0:a9ef8a5c769a 79 {
cbs27 0:a9ef8a5c769a 80 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 81 { 0,0,1,1,1,0,0},
cbs27 0:a9ef8a5c769a 82 { 0,0,0,0,1,1,0},
cbs27 0:a9ef8a5c769a 83 { 0,0,1,1,1,0,0},
cbs27 0:a9ef8a5c769a 84 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 85 }
an_xuanyu 1:47967167a3a6 86 },//tank1
cbs27 0:a9ef8a5c769a 87 {
cbs27 0:a9ef8a5c769a 88 {
cbs27 0:a9ef8a5c769a 89 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 90 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 91 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 92 { 0,1,1,0,0,1,0},
cbs27 0:a9ef8a5c769a 93 { 0,1,0,0,0,1,0}
an_xuanyu 1:47967167a3a6 94
cbs27 0:a9ef8a5c769a 95 },
cbs27 0:a9ef8a5c769a 96 {
cbs27 0:a9ef8a5c769a 97 { 0,1,0,0,0,1,0},
cbs27 0:a9ef8a5c769a 98 { 0,1,0,0,1,1,0},
cbs27 0:a9ef8a5c769a 99 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 100 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 101 { 0,1,0,1,0,1,0}
cbs27 0:a9ef8a5c769a 102 },
cbs27 0:a9ef8a5c769a 103 {
cbs27 0:a9ef8a5c769a 104 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 105 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 106 { 0,1,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 107 { 0,0,0,1,1,0,0},
cbs27 0:a9ef8a5c769a 108 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 109 },
cbs27 0:a9ef8a5c769a 110 {
cbs27 0:a9ef8a5c769a 111 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 112 { 0,0,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 113 { 0,0,0,1,1,1,0},
cbs27 0:a9ef8a5c769a 114 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 115 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 116 }
cbs27 0:a9ef8a5c769a 117 },//tank2
cbs27 0:a9ef8a5c769a 118 {
cbs27 0:a9ef8a5c769a 119 {
cbs27 0:a9ef8a5c769a 120 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 121 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 122 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 123 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 124 { 0,1,0,0,0,1,0}
an_xuanyu 1:47967167a3a6 125
cbs27 0:a9ef8a5c769a 126 },
cbs27 0:a9ef8a5c769a 127 {
cbs27 0:a9ef8a5c769a 128 { 0,1,0,0,0,1,0},
cbs27 0:a9ef8a5c769a 129 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 130 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 131 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 132 { 0,1,0,1,0,1,0}
cbs27 0:a9ef8a5c769a 133 },
cbs27 0:a9ef8a5c769a 134 {
cbs27 0:a9ef8a5c769a 135 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 136 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 137 { 0,1,1,1,1,0,0},
cbs27 0:a9ef8a5c769a 138 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 139 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 140 },
cbs27 0:a9ef8a5c769a 141 {
cbs27 0:a9ef8a5c769a 142 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 143 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 144 { 0,0,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 145 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 146 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 147 }
cbs27 0:a9ef8a5c769a 148 }, //tank3
cbs27 0:a9ef8a5c769a 149 {
cbs27 0:a9ef8a5c769a 150 {
cbs27 0:a9ef8a5c769a 151 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 152 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 153 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 154 { 0,1,0,0,1,1,0},
cbs27 0:a9ef8a5c769a 155 { 0,1,0,0,0,1,0}
an_xuanyu 1:47967167a3a6 156
cbs27 0:a9ef8a5c769a 157 },
cbs27 0:a9ef8a5c769a 158 {
cbs27 0:a9ef8a5c769a 159 { 0,1,0,0,0,1,0},
cbs27 0:a9ef8a5c769a 160 { 0,1,1,0,0,1,0},
cbs27 0:a9ef8a5c769a 161 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 162 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 163 { 0,1,0,1,0,1,0}
cbs27 0:a9ef8a5c769a 164 },
cbs27 0:a9ef8a5c769a 165 {
cbs27 0:a9ef8a5c769a 166 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 167 { 0,0,0,1,1,0,0},
cbs27 0:a9ef8a5c769a 168 { 0,1,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 169 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 170 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 171 },
cbs27 0:a9ef8a5c769a 172 {
cbs27 0:a9ef8a5c769a 173 { 0,1,1,1,1,1,0},
cbs27 0:a9ef8a5c769a 174 { 0,0,0,1,0,0,0},
cbs27 0:a9ef8a5c769a 175 { 0,0,0,1,1,1,0},
cbs27 0:a9ef8a5c769a 176 { 0,0,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 177 { 0,1,1,1,1,1,0}
cbs27 0:a9ef8a5c769a 178 }
cbs27 0:a9ef8a5c769a 179 }//tank4
cbs27 0:a9ef8a5c769a 180 };
cbs27 0:a9ef8a5c769a 181 const int tank_exp[5][7] = {
cbs27 0:a9ef8a5c769a 182 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 183 { 0,0,1,0,1,0,0},
cbs27 0:a9ef8a5c769a 184 { 1,1,0,0,0,1,1},
cbs27 0:a9ef8a5c769a 185 { 0,0,1,0,1,0,0},
cbs27 0:a9ef8a5c769a 186 { 0,1,0,1,0,1,0},
cbs27 0:a9ef8a5c769a 187 };//击毁的坦克
cbs27 0:a9ef8a5c769a 188 const int bullet[5][7] = {
cbs27 0:a9ef8a5c769a 189 { 0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 190 { 0,0,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 191 { 0,0,1,1,0,0,0},
cbs27 0:a9ef8a5c769a 192 { 0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 193 { 0,0,0,0,0,0,0},
cbs27 0:a9ef8a5c769a 194 };//炮弹
YPA_YPA 2:ce24c50fc0a6 195 const int hp_ai[2][5][7] = {{
YPA_YPA 2:ce24c50fc0a6 196 { 0,1,1,0,0,0,0},
YPA_YPA 2:ce24c50fc0a6 197 { 1,1,1,1,0,0,0},
YPA_YPA 2:ce24c50fc0a6 198 { 0,1,1,1,0,0,0},
YPA_YPA 2:ce24c50fc0a6 199 { 1,0,1,1,0,0,1},
YPA_YPA 2:ce24c50fc0a6 200 { 1,1,0,1,0,1,1},
YPA_YPA 2:ce24c50fc0a6 201 },{
YPA_YPA 2:ce24c50fc0a6 202 { 0,1,1,0,1,1,0},
YPA_YPA 2:ce24c50fc0a6 203 { 1,1,1,1,1,1,1},
YPA_YPA 2:ce24c50fc0a6 204 { 0,1,1,1,1,1,0},
YPA_YPA 2:ce24c50fc0a6 205 { 1,0,1,1,1,0,1},
YPA_YPA 2:ce24c50fc0a6 206 { 1,1,0,1,0,1,1},
YPA_YPA 2:ce24c50fc0a6 207 }
YPA_YPA 2:ce24c50fc0a6 208 };//炮弹
cbs27 0:a9ef8a5c769a 209 const int t_start[tank_num][2] = {{0,5},{8,1},{8,5},{8,9}}; //坦克初始坐标
an_xuanyu 1:47967167a3a6 210 const int ai_mod[3]= {0,1,0};
an_xuanyu 1:47967167a3a6 211 const int ai_changetime[3]= {6,8,5};
YPA_YPA 2:ce24c50fc0a6 212 void map_scan2(int map_adj[9][11]) //扫描地图函数
an_xuanyu 1:47967167a3a6 213 {
an_xuanyu 1:47967167a3a6 214 int x = 0;
an_xuanyu 1:47967167a3a6 215 int y = 0; //地图扫描坐标
YPA_YPA 2:ce24c50fc0a6 216 lcd2.drawRect(0,0,84,1,FILL_BLACK);
YPA_YPA 2:ce24c50fc0a6 217 lcd2.drawRect(0,46,84,2,FILL_BLACK);
YPA_YPA 2:ce24c50fc0a6 218 lcd2.drawRect(0,0,3,48,FILL_BLACK);
YPA_YPA 2:ce24c50fc0a6 219 lcd2.drawRect(80,0,4,48,FILL_BLACK);//边框
an_xuanyu 1:47967167a3a6 220
an_xuanyu 1:47967167a3a6 221 for (x=0; x<11; x++) {
an_xuanyu 1:47967167a3a6 222 for (y=0; y<9; y++) {
an_xuanyu 1:47967167a3a6 223 if(map_adj[y][x]==1) {
YPA_YPA 2:ce24c50fc0a6 224 lcd2.drawSprite(x*7+3,y*5+1,5,7,(int *)wall);
an_xuanyu 1:47967167a3a6 225 } else if(map_adj[y][x]==2) {
YPA_YPA 2:ce24c50fc0a6 226 lcd2.drawSprite(x*7+3,y*5+1,5,7,(int *)bush);
cbs27 0:a9ef8a5c769a 227 }
cbs27 0:a9ef8a5c769a 228 }
an_xuanyu 1:47967167a3a6 229 }
an_xuanyu 1:47967167a3a6 230 }
cbs27 0:a9ef8a5c769a 231
YPA_YPA 2:ce24c50fc0a6 232 void hp_show2(int hp[4],int level) //显示血量函数
an_xuanyu 1:47967167a3a6 233 {
YPA_YPA 2:ce24c50fc0a6 234 int heart_num;
YPA_YPA 2:ce24c50fc0a6 235 int i;
an_xuanyu 1:47967167a3a6 236 for (heart_num=0; heart_num<3; heart_num++) {
YPA_YPA 2:ce24c50fc0a6 237 if(heart_num<hp[0]) {
YPA_YPA 2:ce24c50fc0a6 238 lcd2.drawSprite(4*7+heart_num*7+3,5*1+1,5,7,(int *)hp_ai[0]);
YPA_YPA 2:ce24c50fc0a6 239 for(i=1; i<tank_num-level; i++) {
YPA_YPA 2:ce24c50fc0a6 240 if(heart_num<hp[i]) {
YPA_YPA 2:ce24c50fc0a6 241 lcd2.drawSprite(4*7+(i-1)*7+3,7*5+1,5,7,(int *)hp_ai[hp[i]-1]);
YPA_YPA 2:ce24c50fc0a6 242 }
YPA_YPA 2:ce24c50fc0a6 243 }
an_xuanyu 1:47967167a3a6 244 }
YPA_YPA 2:ce24c50fc0a6 245
an_xuanyu 1:47967167a3a6 246 }
an_xuanyu 1:47967167a3a6 247 }
cbs27 0:a9ef8a5c769a 248
YPA_YPA 2:ce24c50fc0a6 249 void tank_show2(int tank_state[4],int t[4][2],int hp[4],int level) //显示坦克函数
an_xuanyu 1:47967167a3a6 250 {
an_xuanyu 1:47967167a3a6 251 int i;
YPA_YPA 2:ce24c50fc0a6 252 for(i=0; i<tank_num-level; i++) {
YPA_YPA 2:ce24c50fc0a6 253 if(hp[i]!=0) {
YPA_YPA 2:ce24c50fc0a6 254 lcd2.drawSprite(t[i][1]*7+3,t[i][0]*5+1,5,7,(int *)tank[i][tank_state[i]]);
YPA_YPA 2:ce24c50fc0a6 255 }
an_xuanyu 1:47967167a3a6 256 }
an_xuanyu 1:47967167a3a6 257 }
YPA_YPA 2:ce24c50fc0a6 258 int body(int level)
cbs27 0:a9ef8a5c769a 259 {
YPA_YPA 2:ce24c50fc0a6 260 // need to initialise the lcd2 first, do this once outside of the loop
YPA_YPA 2:ce24c50fc0a6 261 lcd2.init();
cbs27 0:a9ef8a5c769a 262 //int command[2][4]={{0,0,0,0},{0,0,0,0}};//处理后的指令
cbs27 0:a9ef8a5c769a 263 int command[4]= {0,0,0,0};
cbs27 0:a9ef8a5c769a 264 int turn=0;
cbs27 0:a9ef8a5c769a 265 int a;
cbs27 0:a9ef8a5c769a 266 int stop;//stop command for ai
an_xuanyu 1:47967167a3a6 267 int i;
cbs27 0:a9ef8a5c769a 268 int j; //地图复制计数
an_xuanyu 1:47967167a3a6 269 int ii;
an_xuanyu 1:47967167a3a6 270 int k;
an_xuanyu 1:47967167a3a6 271 int l;
cbs27 0:a9ef8a5c769a 272 int n; //炮弹刷新计数
an_xuanyu 3:4bc4e762a906 273 int o;
cbs27 0:a9ef8a5c769a 274 int shoot;//开火计数
an_xuanyu 1:47967167a3a6 275 int t[tank_num][2]; //坦克坐标
an_xuanyu 1:47967167a3a6 276 int t_pre[tank_num][2]; //坦克预测坐标(npc)
an_xuanyu 1:47967167a3a6 277 int b[tank_num][3][2]; //炮弹坐标
cbs27 0:a9ef8a5c769a 278 int bullet_cont=0;//发射炮弹计数
cbs27 0:a9ef8a5c769a 279 int bullet_direct[tank_num][3];//炮弹的方向
cbs27 0:a9ef8a5c769a 280 int bullet_val[tank_num][3];//炮弹是否被阻挡
cbs27 0:a9ef8a5c769a 281 int tank_state[tank_num]; //坦克的f方向
an_xuanyu 3:4bc4e762a906 282 int hp_set[tank_num]= {3,2,2,2}; //坦克血量预设
YPA_YPA 2:ce24c50fc0a6 283 int hp[tank_num]= {0,0,0,0}; //坦克血量
cbs27 0:a9ef8a5c769a 284 int tank_count;//坦克单位的计数
an_xuanyu 1:47967167a3a6 285 int trace[tank_num-1][3]= {{0,0,0},{0,0,0},{0,0,0}};
cbs27 0:a9ef8a5c769a 286 int map_adj[9][11];
cbs27 0:a9ef8a5c769a 287 int tank_des;//serial number of destoried tank destroy
cbs27 0:a9ef8a5c769a 288 int hit;
cbs27 0:a9ef8a5c769a 289 int obj_kind;
YPA_YPA 2:ce24c50fc0a6 290 for (k=0; k<tank_num-level; k++) {
cbs27 0:a9ef8a5c769a 291 hp[k]=hp_set[k];
cbs27 0:a9ef8a5c769a 292 tank_state[k]=0;
cbs27 0:a9ef8a5c769a 293 map_adj[t_start[k][0]][t_start[k][1]]=k+3;
an_xuanyu 1:47967167a3a6 294 for (l=0; l<bullet_v; l++) {
cbs27 0:a9ef8a5c769a 295 bullet_val[k][l]=0;
an_xuanyu 3:4bc4e762a906 296 bullet_direct[k][l]=0;
an_xuanyu 3:4bc4e762a906 297 for(o=0;o<2;o++){
an_xuanyu 3:4bc4e762a906 298 b[k][l][o]=0;
an_xuanyu 3:4bc4e762a906 299 }
cbs27 0:a9ef8a5c769a 300 }
an_xuanyu 1:47967167a3a6 301 for (ii=0; ii<2; ii++) {
cbs27 0:a9ef8a5c769a 302 t[k][ii]=t_start[k][ii];
an_xuanyu 1:47967167a3a6 303 } //复制坦克坐标
cbs27 0:a9ef8a5c769a 304 }
cbs27 0:a9ef8a5c769a 305
an_xuanyu 1:47967167a3a6 306 for (i=0; i<11; i++) {
an_xuanyu 1:47967167a3a6 307 for (j=0; j<9; j++) {
an_xuanyu 1:47967167a3a6 308 map_adj[j][i]=map[j][i];
an_xuanyu 1:47967167a3a6 309 }
an_xuanyu 1:47967167a3a6 310 }//复制地图
YPA_YPA 2:ce24c50fc0a6 311 shoot=0;
YPA_YPA 2:ce24c50fc0a6 312 tank_count=0;
cbs27 0:a9ef8a5c769a 313 while(1) {
YPA_YPA 2:ce24c50fc0a6 314 lcd2.clear();
YPA_YPA 2:ce24c50fc0a6 315 map_scan2(map_adj);//地图显示
YPA_YPA 2:ce24c50fc0a6 316 hp_show2(hp,level);//血量显示
YPA_YPA 2:ce24c50fc0a6 317 tank_show2(tank_state,t,hp,level);//坦克显示
YPA_YPA 2:ce24c50fc0a6 318
an_xuanyu 1:47967167a3a6 319 if(shoot==0) {
YPA_YPA 2:ce24c50fc0a6 320 command[3] = button_A2.read();
YPA_YPA 2:ce24c50fc0a6 321 command[0] = button_B2.read();
YPA_YPA 2:ce24c50fc0a6 322 command[2] = button_C2.read();
YPA_YPA 2:ce24c50fc0a6 323 command[1] = button_D2.read(); //复制指令
an_xuanyu 1:47967167a3a6 324 turn=turn+1;
an_xuanyu 1:47967167a3a6 325 if(turn==15) {
cbs27 0:a9ef8a5c769a 326 turn=0;
cbs27 0:a9ef8a5c769a 327 }//各种计数
cbs27 0:a9ef8a5c769a 328 bullet_cont++;
an_xuanyu 1:47967167a3a6 329 if(bullet_cont==3) {
cbs27 0:a9ef8a5c769a 330 bullet_cont=0;
an_xuanyu 1:47967167a3a6 331 }
an_xuanyu 1:47967167a3a6 332
YPA_YPA 2:ce24c50fc0a6 333 for(tank_count=0; tank_count<tank_num-level; tank_count++) {
YPA_YPA 2:ce24c50fc0a6 334 if(tank_count!=0&&hp[tank_count]!=0) {
an_xuanyu 1:47967167a3a6 335 stop=0;
an_xuanyu 1:47967167a3a6 336 t_pre[tank_count][0]=t[tank_count][0];
an_xuanyu 1:47967167a3a6 337 t_pre[tank_count][1]=t[tank_count][1];
an_xuanyu 1:47967167a3a6 338 trace[tank_count][0]=(ai_changetime[tank_count-1]<turn)^ai_mod[tank_count-1]^(t[tank_count][0]>t[0][0]);//1代表坦克1在坦克2的下方
an_xuanyu 1:47967167a3a6 339 trace[tank_count][1]=(ai_changetime[tank_count-1]<turn)^ai_mod[tank_count-1]^(t[tank_count][1]>t[0][1]);//1代表坦克1在坦克2的右
an_xuanyu 1:47967167a3a6 340 trace[tank_count][2]=(abs(t[0][0]-t[tank_count][0]))>(abs(t[0][1]-t[tank_count][1]));//1代表坦克竖直距离大于水平距离
an_xuanyu 1:47967167a3a6 341 for(a=0; a<4; a++) {
an_xuanyu 1:47967167a3a6 342 tank_state[tank_count]=2*(!((a%2)^trace[tank_count][2]))+(!((a>>1)^trace[tank_count][0]))*((a%2)^trace[tank_count][2])+(!((a>>1)^trace[tank_count][1]))*(!((a%2)^trace[tank_count][2]));
an_xuanyu 1:47967167a3a6 343 t_pre[tank_count][0]=t[tank_count][0]+(!(tank_state[tank_count]>>1))*(2*(tank_state[tank_count]%2)-1);
an_xuanyu 1:47967167a3a6 344 t_pre[tank_count][1]=t[tank_count][1]+(tank_state[tank_count]>>1)*(2*(tank_state[tank_count]%2)-1);
an_xuanyu 1:47967167a3a6 345 if((map_adj[t_pre[tank_count][0]][t_pre[tank_count][1]]==0)&&(t_pre[tank_count][1]>=0)&&(t_pre[tank_count][1]<=10)&&(t_pre[tank_count][0]>=0)&&(t_pre[tank_count][0]<=8)) {
an_xuanyu 1:47967167a3a6 346 break;
an_xuanyu 1:47967167a3a6 347 }
an_xuanyu 1:47967167a3a6 348 if(a==3) stop=1;
cbs27 0:a9ef8a5c769a 349 }
an_xuanyu 1:47967167a3a6 350 map_adj[t[tank_count][0]][t[tank_count][1]]=0;
an_xuanyu 1:47967167a3a6 351 if(stop==0) {
an_xuanyu 1:47967167a3a6 352 t[tank_count][tank_state[tank_count]>>1]=t[tank_count][tank_state[tank_count]>>1]+2*(tank_state[tank_count]%2)-1;
an_xuanyu 1:47967167a3a6 353 }
an_xuanyu 1:47967167a3a6 354 map_adj[t[tank_count][0]][t[tank_count][1]]=tank_count+3;
YPA_YPA 2:ce24c50fc0a6 355 bullet_val[tank_count][bullet_cont]=1; //坦克发射炮弹技炮弹坐标方向计算
YPA_YPA 2:ce24c50fc0a6 356 bullet_direct[tank_count][bullet_cont]=tank_state[tank_count];
YPA_YPA 2:ce24c50fc0a6 357 b[tank_count][bullet_cont][0]=t[tank_count][0];
YPA_YPA 2:ce24c50fc0a6 358 b[tank_count][bullet_cont][1]=t[tank_count][1];
YPA_YPA 2:ce24c50fc0a6 359 } else if(hp[tank_count]!=0&&tank_count==0) {
YPA_YPA 2:ce24c50fc0a6 360 command[3]=(~command[0])&(~command[1])&(~command[2])&command[3];
YPA_YPA 2:ce24c50fc0a6 361 command[2]=(~command[0])&(~command[1])&command[2];
YPA_YPA 2:ce24c50fc0a6 362 command[1]=(~command[0])&command[1];
YPA_YPA 2:ce24c50fc0a6 363 command[0]=command[0];
YPA_YPA 2:ce24c50fc0a6 364
an_xuanyu 1:47967167a3a6 365 map_adj[t[tank_count][0]][t[tank_count][1]]=0;
an_xuanyu 1:47967167a3a6 366 t[tank_count][0]=t[tank_count][0]-command[0]+command[1];
an_xuanyu 1:47967167a3a6 367 t[tank_count][1]=t[tank_count][1]-command[2]+command[3];//指令控制坦克
an_xuanyu 1:47967167a3a6 368
an_xuanyu 1:47967167a3a6 369 if(map_adj[t[tank_count][0]][t[tank_count][1]]!=0||t[tank_count][1]<0||t[tank_count][1]>10||t[tank_count][0]<0||t[tank_count][0]>8) {
an_xuanyu 1:47967167a3a6 370 t[tank_count][0]=t[tank_count][0]+command[0]-command[1];
an_xuanyu 1:47967167a3a6 371 t[tank_count][1]=t[tank_count][1]+command[2]-command[3];
an_xuanyu 1:47967167a3a6 372 }//障碍物判断,前方有障碍物时指令无效
an_xuanyu 1:47967167a3a6 373 map_adj[t[tank_count][0]][t[tank_count][1]]=tank_count+3;
an_xuanyu 1:47967167a3a6 374 if(command[0]||command[1]||command[2]||command[3]) {
an_xuanyu 1:47967167a3a6 375 tank_state[tank_count]=command[1]*1+command[2]*2+command[3]*3;
an_xuanyu 1:47967167a3a6 376 } //坦克方向计算
YPA_YPA 2:ce24c50fc0a6 377 if (joy_button2.read()==0) {
YPA_YPA 2:ce24c50fc0a6 378 bullet_val[tank_count][bullet_cont]=1; //坦克发射炮弹技炮弹坐标方向计算
YPA_YPA 2:ce24c50fc0a6 379 bullet_direct[tank_count][bullet_cont]=tank_state[tank_count];
YPA_YPA 2:ce24c50fc0a6 380 b[tank_count][bullet_cont][0]=t[tank_count][0];
YPA_YPA 2:ce24c50fc0a6 381 b[tank_count][bullet_cont][1]=t[tank_count][1];
YPA_YPA 2:ce24c50fc0a6 382 }
cbs27 0:a9ef8a5c769a 383 }
YPA_YPA 2:ce24c50fc0a6 384
cbs27 0:a9ef8a5c769a 385 }
an_xuanyu 1:47967167a3a6 386
an_xuanyu 1:47967167a3a6 387 }
YPA_YPA 2:ce24c50fc0a6 388 for(tank_count=0; tank_count<tank_num-level; tank_count++) { //游戏里坦克依次进行运算
YPA_YPA 2:ce24c50fc0a6 389 if(hp[tank_count]!=0) {
YPA_YPA 2:ce24c50fc0a6 390 for(n=0; n<bullet_v; n++) { //炮弹比坦克快三倍运算也快三倍
YPA_YPA 2:ce24c50fc0a6 391 b[tank_count][n][0]=b[tank_count][n][0]+(!(bullet_direct[tank_count][n]>>1))*(-1+2*(bullet_direct[tank_count][n]%2));
YPA_YPA 2:ce24c50fc0a6 392 b[tank_count][n][1]=b[tank_count][n][1]+(bullet_direct[tank_count][n]>>1)*(-1+2*(bullet_direct[tank_count][n]%2));//炮弹坐标刷新
YPA_YPA 2:ce24c50fc0a6 393 if(b[tank_count][n][1]>=0&&b[tank_count][n][1]<=10&&b[tank_count][n][0]>=0&&b[tank_count][n][0]<=8&&bullet_val[tank_count][n]==1) {
YPA_YPA 2:ce24c50fc0a6 394 //炮弹有效且未出界
YPA_YPA 2:ce24c50fc0a6 395 obj_kind=map_adj[b[tank_count][n][0]][b[tank_count][n][1]];
YPA_YPA 2:ce24c50fc0a6 396 hit=(((tank_count==0)+(obj_kind<4))%2)&&(obj_kind>=3);
YPA_YPA 2:ce24c50fc0a6 397 if(obj_kind==0) { //炮弹无障碍飞行的情况
YPA_YPA 2:ce24c50fc0a6 398 lcd2.drawSprite(b[tank_count][n][1]*7+3,b[tank_count][n][0]*5+1,5,7,(int *)bullet);
YPA_YPA 2:ce24c50fc0a6 399 } else if (obj_kind==2) { //炮弹打到灌木的情况
YPA_YPA 2:ce24c50fc0a6 400 lcd2.drawSprite(b[tank_count][n][1]*7+3,b[tank_count][n][0]*5+1,5,7,(int *)destroyed_bush);
YPA_YPA 2:ce24c50fc0a6 401 map_adj[b[tank_count][n][0]][b[tank_count][n][1]]=0;
YPA_YPA 2:ce24c50fc0a6 402 bullet_val[tank_count][n]=0;
YPA_YPA 2:ce24c50fc0a6 403 } else if (obj_kind==1) { //炮弹打墙的情况
YPA_YPA 2:ce24c50fc0a6 404 bullet_val[tank_count][n]=0;
YPA_YPA 2:ce24c50fc0a6 405 } else if(obj_kind>=3&&hit) { //炮弹击杀坦克的情况
YPA_YPA 2:ce24c50fc0a6 406 tank_des=map_adj[b[tank_count][n][0]][b[tank_count][n][1]]-3;
YPA_YPA 2:ce24c50fc0a6 407 map_adj[b[tank_count][n][0]][b[tank_count][n][1]]=0;
YPA_YPA 2:ce24c50fc0a6 408 lcd2.drawSprite(t[tank_des][1]*7+3,t[tank_des][0]*5+1,5,7,(int *)tank_exp);
YPA_YPA 2:ce24c50fc0a6 409 t[tank_des][0]=t_start[tank_des][0];
YPA_YPA 2:ce24c50fc0a6 410 t[tank_des][1]=t_start[tank_des][1];//坦克回出生点
YPA_YPA 2:ce24c50fc0a6 411 hp[tank_des]=hp[tank_des]-1;//血量减一
YPA_YPA 2:ce24c50fc0a6 412 bullet_val[tank_count][n]=0;//炮弹失效
YPA_YPA 2:ce24c50fc0a6 413 if(hp[0]==0) {
YPA_YPA 2:ce24c50fc0a6 414 return 0;
YPA_YPA 2:ce24c50fc0a6 415 } else if((hp[1]+hp[2]+hp[3])==0) {
YPA_YPA 2:ce24c50fc0a6 416 return 1;
YPA_YPA 2:ce24c50fc0a6 417 }
YPA_YPA 2:ce24c50fc0a6 418 }
YPA_YPA 2:ce24c50fc0a6 419 }
cbs27 0:a9ef8a5c769a 420 }
an_xuanyu 1:47967167a3a6 421 }
an_xuanyu 1:47967167a3a6 422 }
cbs27 0:a9ef8a5c769a 423 shoot=shoot+1;
an_xuanyu 1:47967167a3a6 424 if(shoot==bullet_v) {
cbs27 0:a9ef8a5c769a 425 shoot=0;
an_xuanyu 1:47967167a3a6 426 }
YPA_YPA 2:ce24c50fc0a6 427 lcd2.refresh(); // refresh the lcd2 so the pixels appear
cbs27 0:a9ef8a5c769a 428 wait_ms(600/bullet_v); // 画面按炮弹移动s时间刷新,600为坦克移动时间
cbs27 0:a9ef8a5c769a 429 }
cbs27 0:a9ef8a5c769a 430 }
YPA_YPA 2:ce24c50fc0a6 431 void init_buttons2()
an_xuanyu 1:47967167a3a6 432 {
cbs27 0:a9ef8a5c769a 433 // PCB has external pull-down resistors so turn the internal ones off
cbs27 0:a9ef8a5c769a 434 // (default for DigitalIn)
YPA_YPA 2:ce24c50fc0a6 435 button_A2.mode(PullNone);
YPA_YPA 2:ce24c50fc0a6 436 button_B2.mode(PullNone);
YPA_YPA 2:ce24c50fc0a6 437 button_C2.mode(PullNone);
YPA_YPA 2:ce24c50fc0a6 438 button_D2.mode(PullNone);
YPA_YPA 2:ce24c50fc0a6 439 }
YPA_YPA 2:ce24c50fc0a6 440 void main1()
YPA_YPA 2:ce24c50fc0a6 441 {
YPA_YPA 2:ce24c50fc0a6 442 int result;
YPA_YPA 2:ce24c50fc0a6 443 result=body(1);
YPA_YPA 2:ce24c50fc0a6 444 if (result==0) {
YPA_YPA 2:ce24c50fc0a6 445 lcd2.clear();
YPA_YPA 2:ce24c50fc0a6 446 lcd2.printString("Game Over", 15, 1);
YPA_YPA 2:ce24c50fc0a6 447 lcd2.printString("You lose:", 17, 3);
YPA_YPA 2:ce24c50fc0a6 448 lcd2.refresh();
YPA_YPA 2:ce24c50fc0a6 449 wait(1);
YPA_YPA 2:ce24c50fc0a6 450 while(1) {
YPA_YPA 2:ce24c50fc0a6 451 if (button_A2.read() == 1) {
YPA_YPA 2:ce24c50fc0a6 452 main();
YPA_YPA 2:ce24c50fc0a6 453 }
YPA_YPA 2:ce24c50fc0a6 454 }
YPA_YPA 2:ce24c50fc0a6 455 } else if (result==1) {
YPA_YPA 2:ce24c50fc0a6 456 lcd2.clear();
YPA_YPA 2:ce24c50fc0a6 457 lcd2.printString("Level 1: win", 10, 1);
YPA_YPA 2:ce24c50fc0a6 458 lcd2.printString("A:Next level", 10, 3);
YPA_YPA 2:ce24c50fc0a6 459 lcd2.refresh();
YPA_YPA 2:ce24c50fc0a6 460 wait(1);
YPA_YPA 2:ce24c50fc0a6 461 while(1) {
YPA_YPA 2:ce24c50fc0a6 462 if (button_A2.read() == 1) {
YPA_YPA 2:ce24c50fc0a6 463 result=body(0);
YPA_YPA 2:ce24c50fc0a6 464 if(result==0) {
YPA_YPA 2:ce24c50fc0a6 465 lcd2.clear();
YPA_YPA 2:ce24c50fc0a6 466 lcd2.printString("Game Over", 15, 1);
YPA_YPA 2:ce24c50fc0a6 467 lcd2.printString("You lose:", 17, 3);
YPA_YPA 2:ce24c50fc0a6 468 lcd2.refresh();
YPA_YPA 2:ce24c50fc0a6 469 } else if (result==1) {
YPA_YPA 2:ce24c50fc0a6 470 lcd2.clear();
YPA_YPA 2:ce24c50fc0a6 471 lcd2.printString("You win", 20, 1);
YPA_YPA 2:ce24c50fc0a6 472 lcd2.printString("A:Menu", 25, 3);
YPA_YPA 2:ce24c50fc0a6 473 lcd2.refresh();
YPA_YPA 2:ce24c50fc0a6 474
YPA_YPA 2:ce24c50fc0a6 475 }
YPA_YPA 2:ce24c50fc0a6 476 wait(1);
YPA_YPA 2:ce24c50fc0a6 477 while(1) {
YPA_YPA 2:ce24c50fc0a6 478 if (button_A2.read() == 1) {
YPA_YPA 2:ce24c50fc0a6 479 main();
YPA_YPA 2:ce24c50fc0a6 480 }
YPA_YPA 2:ce24c50fc0a6 481 }
YPA_YPA 2:ce24c50fc0a6 482 }
YPA_YPA 2:ce24c50fc0a6 483 }
YPA_YPA 2:ce24c50fc0a6 484 }
cbs27 0:a9ef8a5c769a 485 }