Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main3.cpp@0:a9ef8a5c769a, 2021-05-03 (annotated)
- Committer:
- cbs27
- Date:
- Mon May 03 08:36:29 2021 +0000
- Revision:
- 0:a9ef8a5c769a
- Child:
- 2:ce24c50fc0a6
,,
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cbs27 | 0:a9ef8a5c769a | 1 | #include "mbed.h" |
| cbs27 | 0:a9ef8a5c769a | 2 | #include "N5110.h" |
| cbs27 | 0:a9ef8a5c769a | 3 | #include "main2.h" |
| cbs27 | 0:a9ef8a5c769a | 4 | #include "main.h" |
| cbs27 | 0:a9ef8a5c769a | 5 | |
| cbs27 | 0:a9ef8a5c769a | 6 | DigitalIn button_A4(p29); |
| cbs27 | 0:a9ef8a5c769a | 7 | DigitalIn button_B4(p28); |
| cbs27 | 0:a9ef8a5c769a | 8 | DigitalIn button_C4(p27); |
| cbs27 | 0:a9ef8a5c769a | 9 | DigitalIn button_D4(p26); |
| cbs27 | 0:a9ef8a5c769a | 10 | AnalogIn joy_v4(p20); |
| cbs27 | 0:a9ef8a5c769a | 11 | AnalogIn joy_h4(p19); |
| cbs27 | 0:a9ef8a5c769a | 12 | AnalogIn joy_button4(p17); // could be DigitalIn, but use AnalogIn so pot can also be used |
| cbs27 | 0:a9ef8a5c769a | 13 | // JP1 must be in 2/3 position |
| cbs27 | 0:a9ef8a5c769a | 14 | N5110 lcd4(p8,p9,p10,p11,p13,p21); |
| cbs27 | 0:a9ef8a5c769a | 15 | |
| cbs27 | 0:a9ef8a5c769a | 16 | const int map[9][11] = { |
| cbs27 | 0:a9ef8a5c769a | 17 | { 0,0,0,0,0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 18 | { 0,1,0,2,1,1,1,2,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 19 | { 0,1,0,2,0,1,0,2,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 20 | { 0,0,0,0,0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 21 | { 2,2,0,1,2,2,2,1,0,2,2}, |
| cbs27 | 0:a9ef8a5c769a | 22 | { 0,0,0,0,0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 23 | { 0,1,0,2,0,1,0,2,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 24 | { 0,1,0,2,1,1,1,2,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 25 | { 0,0,0,0,0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 26 | };//9*11⼤⼩的地图,1是墙,2是灌⽊ |
| cbs27 | 0:a9ef8a5c769a | 27 | const int wall[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 28 | { 1,1,1,1,1,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 29 | { 1,1,0,0,0,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 30 | { 1,1,0,0,0,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 31 | { 1,1,0,0,0,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 32 | { 1,1,1,1,1,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 33 | };//5*7的墙,不可破坏 |
| cbs27 | 0:a9ef8a5c769a | 34 | const int bush[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 35 | { 1,0,1,0,1,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 36 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 37 | { 1,0,1,0,1,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 38 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 39 | { 1,0,1,0,1,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 40 | };//5*7的g灌⽊,可破坏 |
| cbs27 | 0:a9ef8a5c769a | 41 | const int destroyed_bush[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 42 | { 1,0,0,1,0,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 43 | { 0,0,1,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 44 | { 0,1,0,0,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 45 | { 1,0,0,1,0,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 46 | { 0,0,1,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 47 | };//被击中的灌⽊ |
| cbs27 | 0:a9ef8a5c769a | 48 | const int tank1[4][5][7] = |
| cbs27 | 0:a9ef8a5c769a | 49 | { |
| cbs27 | 0:a9ef8a5c769a | 50 | { |
| cbs27 | 0:a9ef8a5c769a | 51 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 52 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 53 | { 0,1,1,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 54 | { 0,1,1,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 55 | { 0,1,0,0,0,1,0} |
| cbs27 | 0:a9ef8a5c769a | 56 | }, |
| cbs27 | 0:a9ef8a5c769a | 57 | { |
| cbs27 | 0:a9ef8a5c769a | 58 | { 0,1,0,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 59 | { 0,1,1,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 60 | { 0,1,1,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 61 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 62 | { 0,1,0,1,0,1,0} |
| cbs27 | 0:a9ef8a5c769a | 63 | }, |
| cbs27 | 0:a9ef8a5c769a | 64 | { |
| cbs27 | 0:a9ef8a5c769a | 65 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 66 | { 0,0,1,1,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 67 | { 0,1,1,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 68 | { 0,0,1,1,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 69 | { 0,1,1,1,1,1,0}}, |
| cbs27 | 0:a9ef8a5c769a | 70 | { |
| cbs27 | 0:a9ef8a5c769a | 71 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 72 | { 0,0,1,1,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 73 | { 0,0,0,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 74 | { 0,0,1,1,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 75 | { 0,1,1,1,1,1,0} |
| cbs27 | 0:a9ef8a5c769a | 76 | } |
| cbs27 | 0:a9ef8a5c769a | 77 | }; |
| cbs27 | 0:a9ef8a5c769a | 78 | //四个⽅向的坦克1 |
| cbs27 | 0:a9ef8a5c769a | 79 | const int tank2[4][5][7] = |
| cbs27 | 0:a9ef8a5c769a | 80 | { |
| cbs27 | 0:a9ef8a5c769a | 81 | { |
| cbs27 | 0:a9ef8a5c769a | 82 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 83 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 84 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 85 | { 0,1,0,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 86 | { 0,1,0,0,0,1,0} |
| cbs27 | 0:a9ef8a5c769a | 87 | }, |
| cbs27 | 0:a9ef8a5c769a | 88 | { |
| cbs27 | 0:a9ef8a5c769a | 89 | { 0,1,0,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 90 | { 0,1,0,0,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 91 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 92 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 93 | { 0,1,0,1,0,1,0} |
| cbs27 | 0:a9ef8a5c769a | 94 | }, |
| cbs27 | 0:a9ef8a5c769a | 95 | { |
| cbs27 | 0:a9ef8a5c769a | 96 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 97 | { 0,0,0,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 98 | { 0,1,1,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 99 | { 0,0,0,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 100 | { 0,1,1,1,1,1,0} |
| cbs27 | 0:a9ef8a5c769a | 101 | }, |
| cbs27 | 0:a9ef8a5c769a | 102 | { |
| cbs27 | 0:a9ef8a5c769a | 103 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 104 | { 0,0,0,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 105 | { 0,0,0,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 106 | { 0,0,0,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 107 | { 0,1,1,1,1,1,0} |
| cbs27 | 0:a9ef8a5c769a | 108 | } |
| cbs27 | 0:a9ef8a5c769a | 109 | };//四个⽅向的坦克2 |
| cbs27 | 0:a9ef8a5c769a | 110 | const int tank_exp[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 111 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 112 | { 0,0,1,0,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 113 | { 1,1,0,0,0,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 114 | { 0,0,1,0,1,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 115 | { 0,1,0,1,0,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 116 | };//击毁的坦克 |
| cbs27 | 0:a9ef8a5c769a | 117 | const int heart[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 118 | { 0,1,1,0,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 119 | { 1,1,1,1,1,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 120 | { 0,1,1,1,1,1,0}, |
| cbs27 | 0:a9ef8a5c769a | 121 | { 1,0,1,1,1,0,1}, |
| cbs27 | 0:a9ef8a5c769a | 122 | { 1,1,0,1,0,1,1}, |
| cbs27 | 0:a9ef8a5c769a | 123 | };//⾎量的⼼形 |
| cbs27 | 0:a9ef8a5c769a | 124 | const int bullet[5][7] = { |
| cbs27 | 0:a9ef8a5c769a | 125 | { 0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 126 | { 0,0,1,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 127 | { 0,0,1,1,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 128 | { 0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 129 | { 0,0,0,0,0,0,0}, |
| cbs27 | 0:a9ef8a5c769a | 130 | };//炮弹 |
| cbs27 | 0:a9ef8a5c769a | 131 | const int bullet_v=3;//炮弹的速度为坦克三倍 |
| cbs27 | 0:a9ef8a5c769a | 132 | const int tank_num=2;//坦克数量 |
| cbs27 | 0:a9ef8a5c769a | 133 | const int t_start[2][2] = {{0,5},{8,5}}; //坦克初始坐标 |
| cbs27 | 0:a9ef8a5c769a | 134 | void map_scan4(int map_adj[9][11]){//扫描地图函数 |
| cbs27 | 0:a9ef8a5c769a | 135 | int x = 0; |
| cbs27 | 0:a9ef8a5c769a | 136 | int y = 0; //地图扫描坐标 |
| cbs27 | 0:a9ef8a5c769a | 137 | lcd4.drawRect(0,0,84,1,FILL_BLACK); |
| cbs27 | 0:a9ef8a5c769a | 138 | lcd4.drawRect(0,46,84,2,FILL_BLACK); |
| cbs27 | 0:a9ef8a5c769a | 139 | lcd4.drawRect(0,0,3,48,FILL_BLACK); |
| cbs27 | 0:a9ef8a5c769a | 140 | lcd4.drawRect(80,0,4,48,FILL_BLACK);//边框 |
| cbs27 | 0:a9ef8a5c769a | 141 | for (x=0;x<11;x++){ |
| cbs27 | 0:a9ef8a5c769a | 142 | for (y=0;y<9;y++){ |
| cbs27 | 0:a9ef8a5c769a | 143 | if(map_adj[y][x]==1){ |
| cbs27 | 0:a9ef8a5c769a | 144 | lcd4.drawSprite(x*7+3,y*5+1,5,7,(int *)wall); |
| cbs27 | 0:a9ef8a5c769a | 145 | } |
| cbs27 | 0:a9ef8a5c769a | 146 | else if(map_adj[y][x]==2){ |
| cbs27 | 0:a9ef8a5c769a | 147 | lcd4.drawSprite(x*7+3,y*5+1,5,7,(int *)bush); |
| cbs27 | 0:a9ef8a5c769a | 148 | } |
| cbs27 | 0:a9ef8a5c769a | 149 | } |
| cbs27 | 0:a9ef8a5c769a | 150 | } |
| cbs27 | 0:a9ef8a5c769a | 151 | } |
| cbs27 | 0:a9ef8a5c769a | 152 | void hp_show4(int hp1,int hp2){//显示⾎量函数 |
| cbs27 | 0:a9ef8a5c769a | 153 | int heart_num=0; |
| cbs27 | 0:a9ef8a5c769a | 154 | for (heart_num=0;heart_num<3;heart_num++){ |
| cbs27 | 0:a9ef8a5c769a | 155 | if(heart_num<hp1){ |
| cbs27 | 0:a9ef8a5c769a | 156 | lcd4.drawSprite(4*7+heart_num*7+3,5*1+1,5,7,(int *)heart); |
| cbs27 | 0:a9ef8a5c769a | 157 | } |
| cbs27 | 0:a9ef8a5c769a | 158 | if(heart_num<hp2){ |
| cbs27 | 0:a9ef8a5c769a | 159 | lcd4.drawSprite(4*7+heart_num*7+3,7*5+1,5,7,(int *)heart); |
| cbs27 | 0:a9ef8a5c769a | 160 | } |
| cbs27 | 0:a9ef8a5c769a | 161 | } |
| cbs27 | 0:a9ef8a5c769a | 162 | } |
| cbs27 | 0:a9ef8a5c769a | 163 | void tank_show4(int tank1_state,int tank2_state,int t1[2],int t2[2]){//显示坦克函数 |
| cbs27 | 0:a9ef8a5c769a | 164 | lcd4.drawSprite(t1[1]*7+3,t1[0]*5+1,5,7,(int *)tank1[tank1_state]); |
| cbs27 | 0:a9ef8a5c769a | 165 | lcd4.drawSprite(t2[1]*7+3,t2[0]*5+1,5,7,(int *)tank2[tank2_state]); |
| cbs27 | 0:a9ef8a5c769a | 166 | } |
| cbs27 | 0:a9ef8a5c769a | 167 | void init_buttons4(); |
| cbs27 | 0:a9ef8a5c769a | 168 | |
| cbs27 | 0:a9ef8a5c769a | 169 | void main3() |
| cbs27 | 0:a9ef8a5c769a | 170 | { |
| cbs27 | 0:a9ef8a5c769a | 171 | // need to initialise the lcd first, do this once outside of the loop |
| cbs27 | 0:a9ef8a5c769a | 172 | lcd4.init(); |
| cbs27 | 0:a9ef8a5c769a | 173 | int command[2][4]={{0,0,0,0},{0,0,0,0}};//处理后的指令 |
| cbs27 | 0:a9ef8a5c769a | 174 | int i = 0; |
| cbs27 | 0:a9ef8a5c769a | 175 | int j = 0; //地图复制计数 |
| cbs27 | 0:a9ef8a5c769a | 176 | int ii = 0; |
| cbs27 | 0:a9ef8a5c769a | 177 | int ji = 0;//坦克初始坐标复制计数 |
| cbs27 | 0:a9ef8a5c769a | 178 | int n = 0; //炮弹刷新计数 |
| cbs27 | 0:a9ef8a5c769a | 179 | int shoot = 0;//开⽕计数 |
| cbs27 | 0:a9ef8a5c769a | 180 | int t[tank_num][2]; //坦克坐标 |
| cbs27 | 0:a9ef8a5c769a | 181 | int b[tank_num][3][2]; //炮弹坐标 |
| cbs27 | 0:a9ef8a5c769a | 182 | int bullet_cont=0;//发射炮弹计数 |
| cbs27 | 0:a9ef8a5c769a | 183 | int bullet_direct[tank_num][3];//炮弹的⽅向 |
| cbs27 | 0:a9ef8a5c769a | 184 | int bullet_val[tank_num][3];//炮弹是否被阻挡 |
| cbs27 | 0:a9ef8a5c769a | 185 | int tank_state[tank_num]={0,0}; //坦克的f⽅向 |
| cbs27 | 0:a9ef8a5c769a | 186 | int hp[tank_num] ={3,3}; //坦克⾎量 |
| cbs27 | 0:a9ef8a5c769a | 187 | int tank_count;//坦克单位的计数 |
| cbs27 | 0:a9ef8a5c769a | 188 | int map_adj[9][11]; |
| cbs27 | 0:a9ef8a5c769a | 189 | for (i=0;i<11;i++){ |
| cbs27 | 0:a9ef8a5c769a | 190 | for (j=0;j<9;j++){ |
| cbs27 | 0:a9ef8a5c769a | 191 | map_adj[j][i]=map[j][i]; |
| cbs27 | 0:a9ef8a5c769a | 192 | } |
| cbs27 | 0:a9ef8a5c769a | 193 | }//复制地图 |
| cbs27 | 0:a9ef8a5c769a | 194 | for (ii=0;ii<2;ii++){ |
| cbs27 | 0:a9ef8a5c769a | 195 | for (ji=0;ji<2;ji++){ |
| cbs27 | 0:a9ef8a5c769a | 196 | t[ji][ii]=t_start[ji][ii]; |
| cbs27 | 0:a9ef8a5c769a | 197 | } |
| cbs27 | 0:a9ef8a5c769a | 198 | } //复制指令 |
| cbs27 | 0:a9ef8a5c769a | 199 | //welcome(); |
| cbs27 | 0:a9ef8a5c769a | 200 | while(1) { |
| cbs27 | 0:a9ef8a5c769a | 201 | lcd4.clear(); |
| cbs27 | 0:a9ef8a5c769a | 202 | map_scan4(map_adj);//地图显示 |
| cbs27 | 0:a9ef8a5c769a | 203 | hp_show4(hp[0],hp[1]);//⾎量显示 |
| cbs27 | 0:a9ef8a5c769a | 204 | tank_show4(tank_state[0],tank_state[1],t[0],t[1]);//坦克显示 |
| cbs27 | 0:a9ef8a5c769a | 205 | if(shoot==0){ |
| cbs27 | 0:a9ef8a5c769a | 206 | command[0][3] = button_A4.read(); |
| cbs27 | 0:a9ef8a5c769a | 207 | command[0][0] = button_B4.read(); |
| cbs27 | 0:a9ef8a5c769a | 208 | command[0][2] = button_C4.read(); |
| cbs27 | 0:a9ef8a5c769a | 209 | command[0][1] = button_D4.read(); //复制指令 |
| cbs27 | 0:a9ef8a5c769a | 210 | if(joy_h4.read()<0.3){ |
| cbs27 | 0:a9ef8a5c769a | 211 | command[1][0] = 0; |
| cbs27 | 0:a9ef8a5c769a | 212 | command[1][1] = 0; |
| cbs27 | 0:a9ef8a5c769a | 213 | command[1][2] = 0; |
| cbs27 | 0:a9ef8a5c769a | 214 | command[1][3] = 1; |
| cbs27 | 0:a9ef8a5c769a | 215 | } |
| cbs27 | 0:a9ef8a5c769a | 216 | else if(joy_h4.read()>0.7){ |
| cbs27 | 0:a9ef8a5c769a | 217 | command[1][0] = 0; |
| cbs27 | 0:a9ef8a5c769a | 218 | command[1][1] = 0; |
| cbs27 | 0:a9ef8a5c769a | 219 | command[1][2] = 1; |
| cbs27 | 0:a9ef8a5c769a | 220 | command[1][3] = 0; |
| cbs27 | 0:a9ef8a5c769a | 221 | } |
| cbs27 | 0:a9ef8a5c769a | 222 | else if(joy_v4.read()<0.3){ |
| cbs27 | 0:a9ef8a5c769a | 223 | command[1][0] = 0; |
| cbs27 | 0:a9ef8a5c769a | 224 | command[1][1] = 1; |
| cbs27 | 0:a9ef8a5c769a | 225 | command[1][2] = 0; |
| cbs27 | 0:a9ef8a5c769a | 226 | command[1][3] = 0; |
| cbs27 | 0:a9ef8a5c769a | 227 | } |
| cbs27 | 0:a9ef8a5c769a | 228 | else if(joy_v4.read()>0.7){ |
| cbs27 | 0:a9ef8a5c769a | 229 | command[1][0] = 1; |
| cbs27 | 0:a9ef8a5c769a | 230 | command[1][1] = 0; |
| cbs27 | 0:a9ef8a5c769a | 231 | command[1][2] = 0; |
| cbs27 | 0:a9ef8a5c769a | 232 | command[1][3] = 0; |
| cbs27 | 0:a9ef8a5c769a | 233 | } |
| cbs27 | 0:a9ef8a5c769a | 234 | else{ |
| cbs27 | 0:a9ef8a5c769a | 235 | command[1][0] = 0; |
| cbs27 | 0:a9ef8a5c769a | 236 | command[1][1] = 0; |
| cbs27 | 0:a9ef8a5c769a | 237 | command[1][2] = 0; |
| cbs27 | 0:a9ef8a5c769a | 238 | command[1][3] = 0; |
| cbs27 | 0:a9ef8a5c769a | 239 | } |
| cbs27 | 0:a9ef8a5c769a | 240 | bullet_cont++; |
| cbs27 | 0:a9ef8a5c769a | 241 | if(bullet_cont==3){ |
| cbs27 | 0:a9ef8a5c769a | 242 | bullet_cont=0; |
| cbs27 | 0:a9ef8a5c769a | 243 | } |
| cbs27 | 0:a9ef8a5c769a | 244 | /* turn=turn+1; |
| cbs27 | 0:a9ef8a5c769a | 245 | if(turn==15){ |
| cbs27 | 0:a9ef8a5c769a | 246 | turn=0; |
| cbs27 | 0:a9ef8a5c769a | 247 | }//各种计数*/ |
| cbs27 | 0:a9ef8a5c769a | 248 | for(tank_count=0;tank_count<tank_num;tank_count++) { |
| cbs27 | 0:a9ef8a5c769a | 249 | t[tank_count][0]=t[tank_count][0]-command[tank_count][0]+command[tank_count][1]; |
| cbs27 | 0:a9ef8a5c769a | 250 | t[tank_count][1]=t[tank_count][1]-command[tank_count][2]+command[tank_count][3]; |
| cbs27 | 0:a9ef8a5c769a | 251 | //指令控制坦克 |
| cbs27 | 0:a9ef8a5c769a | 252 | if(map_adj[t[tank_count][0]][t[tank_count][1]]!=0||t[tank_count][1]<0||t[tank_count][1]>10|| |
| cbs27 | 0:a9ef8a5c769a | 253 | t[tank_count][0]<0||t[tank_count][0]>8){ |
| cbs27 | 0:a9ef8a5c769a | 254 | t[tank_count][0]=t[tank_count][0]+command[tank_count][0]-command[tank_count][1]; |
| cbs27 | 0:a9ef8a5c769a | 255 | t[tank_count][1]=t[tank_count][1]+command[tank_count][2]-command[tank_count][3]; |
| cbs27 | 0:a9ef8a5c769a | 256 | }//障碍物判断,前⽅有障碍物时指令⽆效 |
| cbs27 | 0:a9ef8a5c769a | 257 | if(command[tank_count][0]||command[tank_count][1]||command[tank_count][2]|| |
| cbs27 | 0:a9ef8a5c769a | 258 | command[tank_count][3]){ |
| cbs27 | 0:a9ef8a5c769a | 259 | tank_state[tank_count]=command[tank_count][1]*1+command[tank_count] |
| cbs27 | 0:a9ef8a5c769a | 260 | [2]*2+command[tank_count][3]*3; |
| cbs27 | 0:a9ef8a5c769a | 261 | } //坦克⽅向计算 |
| cbs27 | 0:a9ef8a5c769a | 262 | bullet_direct[tank_count][bullet_cont]=tank_state[tank_count]; |
| cbs27 | 0:a9ef8a5c769a | 263 | if (joy_button4.read()==0 && tank_count ==1 ){ |
| cbs27 | 0:a9ef8a5c769a | 264 | //pot_val = pot0.read(); |
| cbs27 | 0:a9ef8a5c769a | 265 | b[tank_count][bullet_cont][0]=t[tank_count][0]; |
| cbs27 | 0:a9ef8a5c769a | 266 | b[tank_count][bullet_cont][1]=t[tank_count][1];} |
| cbs27 | 0:a9ef8a5c769a | 267 | bullet_val[tank_count][bullet_cont]=1; //坦克发射炮弹技炮弹坐标⽅向计算 |
| cbs27 | 0:a9ef8a5c769a | 268 | } |
| cbs27 | 0:a9ef8a5c769a | 269 | } |
| cbs27 | 0:a9ef8a5c769a | 270 | for(tank_count=0;tank_count<tank_num;tank_count++) {//游戏⾥坦克依次进⾏运算 |
| cbs27 | 0:a9ef8a5c769a | 271 | for(n=0;n<bullet_v;n++){//炮弹⽐坦克快三倍运算也快三倍 |
| cbs27 | 0:a9ef8a5c769a | 272 | b[tank_count][n][0]=b[tank_count][n][0]+(!(bullet_direct[tank_count] |
| cbs27 | 0:a9ef8a5c769a | 273 | [n]>>1))*(-1+2*(bullet_direct[tank_count][n]%2)); |
| cbs27 | 0:a9ef8a5c769a | 274 | b[tank_count][n][1]=b[tank_count][n][1]+(bullet_direct[tank_count] |
| cbs27 | 0:a9ef8a5c769a | 275 | [n]>>1)*(-1+2*(bullet_direct[tank_count][n]%2));//炮弹坐标刷新 |
| cbs27 | 0:a9ef8a5c769a | 276 | if(b[tank_count][n][1]>=0&&b[tank_count][n][1]<=10&&b[tank_count][n] |
| cbs27 | 0:a9ef8a5c769a | 277 | [0]>=0&&b[tank_count][n][0]<=8&&bullet_val[tank_count][n]==1){ |
| cbs27 | 0:a9ef8a5c769a | 278 | //炮弹有效且未出界 |
| cbs27 | 0:a9ef8a5c769a | 279 | if(b[tank_count][n][1]==t[!tank_count][1]&&b[tank_count][n][0]==t[!tank_count][0]){//炮弹击杀坦克的情况 |
| cbs27 | 0:a9ef8a5c769a | 280 | lcd4.drawSprite(t[!tank_count][1]*7+3,t[!tank_count][0]*5+1,5,7,(int *)tank_exp); |
| cbs27 | 0:a9ef8a5c769a | 281 | t[!tank_count][0]=t_start[!tank_count][0]; |
| cbs27 | 0:a9ef8a5c769a | 282 | t[!tank_count][1]=t_start[!tank_count][1];//坦克回出⽣点 |
| cbs27 | 0:a9ef8a5c769a | 283 | hp[!tank_count]=hp[!tank_count]-1;//⾎量减⼀ |
| cbs27 | 0:a9ef8a5c769a | 284 | if (hp[!tank_count]==0){ |
| cbs27 | 0:a9ef8a5c769a | 285 | lcd4.clear(); |
| cbs27 | 0:a9ef8a5c769a | 286 | lcd4.printString("Game Over", 15, 2); |
| cbs27 | 0:a9ef8a5c769a | 287 | lcd4.refresh(); |
| cbs27 | 0:a9ef8a5c769a | 288 | while(1){ |
| cbs27 | 0:a9ef8a5c769a | 289 | if (button_C4.read() == 1) { |
| cbs27 | 0:a9ef8a5c769a | 290 | main(); |
| cbs27 | 0:a9ef8a5c769a | 291 | } |
| cbs27 | 0:a9ef8a5c769a | 292 | } |
| cbs27 | 0:a9ef8a5c769a | 293 | } |
| cbs27 | 0:a9ef8a5c769a | 294 | bullet_val[tank_count][n]=0;//炮弹失效 |
| cbs27 | 0:a9ef8a5c769a | 295 | } |
| cbs27 | 0:a9ef8a5c769a | 296 | else if(map_adj[b[tank_count][n][0]][b[tank_count][n][1]]==0){//炮弹⽆障碍⻜⾏的情况 |
| cbs27 | 0:a9ef8a5c769a | 297 | lcd4.drawSprite(b[tank_count][n][1]*7+3,b[tank_count][n][0]*5+1,5,7,(int *)bullet); |
| cbs27 | 0:a9ef8a5c769a | 298 | } |
| cbs27 | 0:a9ef8a5c769a | 299 | else if (map_adj[b[tank_count][n][0]][b[tank_count][n][1]]==2){//炮弹打到灌⽊的情况 |
| cbs27 | 0:a9ef8a5c769a | 300 | lcd4.drawSprite(b[tank_count][n][1]*7+3,b[tank_count][n][0]*5+1,5,7,(int |
| cbs27 | 0:a9ef8a5c769a | 301 | *)destroyed_bush); |
| cbs27 | 0:a9ef8a5c769a | 302 | map_adj[b[tank_count][n][0]][b[tank_count][n][1]]=0; |
| cbs27 | 0:a9ef8a5c769a | 303 | bullet_val[tank_count][n]=0; |
| cbs27 | 0:a9ef8a5c769a | 304 | } |
| cbs27 | 0:a9ef8a5c769a | 305 | else if (map_adj[b[tank_count][n][0]][b[tank_count][n][1]]==1){//炮弹打墙的情况 |
| cbs27 | 0:a9ef8a5c769a | 306 | bullet_val[tank_count][n]=0; |
| cbs27 | 0:a9ef8a5c769a | 307 | } |
| cbs27 | 0:a9ef8a5c769a | 308 | } |
| cbs27 | 0:a9ef8a5c769a | 309 | } |
| cbs27 | 0:a9ef8a5c769a | 310 | } |
| cbs27 | 0:a9ef8a5c769a | 311 | shoot=shoot+1; |
| cbs27 | 0:a9ef8a5c769a | 312 | if(shoot==bullet_v){ |
| cbs27 | 0:a9ef8a5c769a | 313 | shoot=0; |
| cbs27 | 0:a9ef8a5c769a | 314 | } |
| cbs27 | 0:a9ef8a5c769a | 315 | lcd4.refresh(); // refresh the LCD so the pixels appear |
| cbs27 | 0:a9ef8a5c769a | 316 | wait_ms(600/bullet_v); // 画⾯按炮弹移动时间刷新,600为坦克移动时间 |
| cbs27 | 0:a9ef8a5c769a | 317 | } |
| cbs27 | 0:a9ef8a5c769a | 318 | } |
| cbs27 | 0:a9ef8a5c769a | 319 | void init_buttons4() |
| cbs27 | 0:a9ef8a5c769a | 320 | { |
| cbs27 | 0:a9ef8a5c769a | 321 | // PCB has external pull-down resistors so turn the internal ones off |
| cbs27 | 0:a9ef8a5c769a | 322 | // (default for DigitalIn) |
| cbs27 | 0:a9ef8a5c769a | 323 | button_A4.mode(PullNone); |
| cbs27 | 0:a9ef8a5c769a | 324 | button_B4.mode(PullNone); |
| cbs27 | 0:a9ef8a5c769a | 325 | button_C4.mode(PullNone); |
| cbs27 | 0:a9ef8a5c769a | 326 | button_D4.mode(PullNone); |
| cbs27 | 0:a9ef8a5c769a | 327 | } |