xuanyu an / Mbed 2 deprecated tankworld

Dependencies:   mbed N5110

Committer:
cbs27
Date:
Mon May 03 08:36:29 2021 +0000
Revision:
0:a9ef8a5c769a
Child:
1:47967167a3a6
,,

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