#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <windows.h> #include <time.h> #define tank_taotal_N 10 #define tank_N 3 int p1_x=12,p1_y=29,p2_x=19,p2_y=29,p1_ball_x,p1_ball_y,p2_ball_x,p2_ball_y; char map[32][32]; char p1_done='w',p2_done=72,p1_ball_steer='%',p2_ball_steer='%'; int tank_number=0,tank_total_number=0,p1_live=5,p2_live=5; int tank_x[tank_taotal_N],tank_y[tank_taotal_N],tank_live[tank_taotal_N]; int tank_step_number[tank_taotal_N],tank_steer[tank_taotal_N]; int tank_ball_steer[tank_taotal_N],tank_ball_x[tank_taotal_N],tank_ball_y[tank_taotal_N]; int home_live=1,if_win=1; void load_map_1() { int i; for(i=4;i<=13;i++,i++,i++) { map[i][4]='#'; map[i][5]='#'; map[i][6]='#'; map[i][10]='#'; map[i][11]='#'; map[i][12]='#'; map[i][19]='#'; map[i][20]='#'; map[i][21]='#'; map[i][25]='#'; map[i][26]='#'; map[i][27]='#'; } map[21][1]='=';map[21][2]='=';map[21][3]='='; map[21][28]='=';map[21][29]='=';map[21][30]='='; for(i=10;i<=21;i++) { map[24][i]='#'; } for(i=10;i<=21;i++) { map[17][i]='#'; } } void p1_fire() { p1_ball_steer=p1_done; switch(p1_ball_steer) { case 'w':{p1_ball_x=p1_x;p1_ball_y=p1_y-2;break;} case 's':{p1_ball_x=p1_x;p1_ball_y=p1_y+2;break;} case 'a':{p1_ball_x=p1_x-2;p1_ball_y=p1_y;break;} case 'd':{p1_ball_x=p1_x+2;p1_ball_y=p1_y;break;} } if(map[p1_ball_y][p1_ball_x]==' ')map[p1_ball_y][p1_ball_x]='*'; else if(map[p1_ball_y][p1_ball_x]=='@'){map[p1_ball_y][p1_ball_x]='*';p1_ball_steer='%';} else if(map[p1_ball_y][p1_ball_x]=='#'||map[p1_ball_y][p1_ball_x]=='.') {map[p1_ball_y][p1_ball_x]=' ';p1_ball_steer='%';} else if(map[p1_ball_y][p1_ball_x]=='$')home_live=0; else p1_ball_steer='%'; } void p2_fire() { p2_ball_steer=p2_done; switch(p2_ball_steer) { case 72:{p2_ball_x=p2_x;p2_ball_y=p2_y-2;break;} case 80:{p2_ball_x=p2_x;p2_ball_y=p2_y+2;break;} case 75:{p2_ball_x=p2_x-2;p2_ball_y=p2_y;break;} case 77:{p2_ball_x=p2_x+2;p2_ball_y=p2_y;break;} } if(map[p2_ball_y][p2_ball_x]==' ')map[p2_ball_y][p2_ball_x]='*'; else if(map[p2_ball_y][p2_ball_x]=='@'){map[p2_ball_y][p2_ball_x]='*';p2_ball_steer='%';} else if(map[p2_ball_y][p2_ball_x]=='#'||map[p2_ball_y][p2_ball_x]=='.') {map[p2_ball_y][p2_ball_x]=' ';p2_ball_steer='%';} else if(map[p2_ball_y][p2_ball_x]=='$')home_live=0; else p2_ball_steer='%'; } int if_tank_can_move(int x,int y) { if(map[y-1][x-1]!=' '&&map[y-1][x-1]!='.')return 0;if(map[y-1][x]!=' '&&map[y-1][x]!='.')return 0;if(map[y-1][x+1]!=' '&&map[y-1][x+1]!='.')return 0; if(map[y][x-1]!=' '&&map[y][x-1]!='.')return 0; if(map[y][x]!=' '&&map[y][x]!='.')return 0; if(map[y][x+1]!=' '&&map[y][x+1]!='.')return 0; if(map[y+1][x-1]!=' '&&map[y+1][x-1]!='.')return 0;if(map[y+1][x]!=' '&&map[y+1][x]!='.')return 0;if(map[y+1][x+1]!=' '&&map[y+1][x+1]!='.')return 0; return 1; } int if_tank_be_shot(int x,int y,int steer,char ball) { switch(steer) { case 0: { if(map[y-1][x-1]==ball)return 1; if(map[y-1][x+1]==ball)return 1; if(map[y][x-1]==ball)return 1; if(map[y][x]==ball)return 1; if(map[y][x+1]==ball)return 1; if(map[y+1][x]==ball)return 1; return 0; } case 1: { if(map[y-1][x]==ball)return 1; if(map[y-1][x+1]==ball)return 1; if(map[y][x-1]==ball)return 1; if(map[y][x]==ball)return 1; if(map[y+1][x]==ball)return 1; if(map[y+1][x+1]==ball)return 1; return 0; } case 2: { if(map[y-1][x-1]==ball)return 1; if(map[y-1][x]==ball)return 1; if(map[y][x]==ball)return 1; if(map[y][x+1]==ball)return 1; if(map[y+1][x-1]==ball)return 1; if(map[y+1][x]==ball)return 1; return 0; } case 3: { if(map[y-1][x]==ball)return 1; if(map[y][x-1]==ball)return 1; if(map[y][x]==ball)return 1; if(map[y][x+1]==ball)return 1; if(map[y+1][x-1]==ball)return 1; if(map[y+1][x+1]==ball)return 1; return 0; } } return 0; } void update(int x,int y) { map[y][x]=' '; map[y-1][x-1]=' '; map[y-1][x]=' '; map[y-1][x+1]=' '; map[y][x+1]=' '; map[y+1][x+1]=' '; map[y+1][x]=' '; map[y+1][x-1]=' '; map[y][x-1]=' '; } void up(int x,int y,char w) { map[y-1][x-1]=' ';map[y-1][x]=w;map[y-1][x+1]=' '; map[y][x-1]=w; map[y][x]=w; map[y][x+1]=w; map[y+1][x-1]=w;map[y+1][x]=' ';map[y+1][x+1]=w; } void down(int x,int y,char w) { map[y-1][x-1]=w;map[y-1][x]=' ';map[y-1][x+1]=w; map[y][x-1]=w; map[y][x]=w; map[y][x+1]=w; map[y+1][x-1]=' ';map[y+1][x]=w;map[y+1][x+1]=' '; } void left(int x,int y,char w) { map[y-1][x-1]=' ';map[y-1][x]=w;map[y-1][x+1]=w; map[y][x-1]=w; map[y][x]=w; map[y][x+1]=' '; map[y+1][x-1]=' ';map[y+1][x]=w;map[y+1][x+1]=w; } void right(int x,int y,char w) { map[y-1][x-1]=w;map[y-1][x]=w;map[y-1][x+1]=' '; map[y][x-1]=' '; map[y][x]=w; map[y][x+1]=w; map[y+1][x-1]=w;map[y+1][x]=w;map[y+1][x+1]=' '; } void p1_move(char a) { int flag; update(p1_x,p1_y); p1_done=a; switch (a) { case 'w': { p1_y--; flag=if_tank_can_move(p1_x,p1_y); if(flag==0)p1_y++; up(p1_x,p1_y,'O'); break; } case 's': { p1_y++; flag=if_tank_can_move(p1_x,p1_y); if(flag==0)p1_y--; down(p1_x,p1_y,'O'); break; } case 'a': { p1_x--; flag=if_tank_can_move(p1_x,p1_y); if(flag==0)p1_x++; left(p1_x,p1_y,'O'); break; } case 'd': { p1_x++; flag=if_tank_can_move(p1_x,p1_y); if(flag==0)p1_x--; right(p1_x,p1_y,'O'); break; } } } void p2_move(char a) { int flag; update(p2_x,p2_y); p2_done=a; switch (a) { case 72: { p2_y--; flag=if_tank_can_move(p2_x,p2_y); if(flag==0)p2_y++; up(p2_x,p2_y,'o'); break; } case 80: { p2_y++; flag=if_tank_can_move(p2_x,p2_y); if(flag==0)p2_y--; down(p2_x,p2_y,'o'); break; } case 75: { p2_x--; flag=if_tank_can_move(p2_x,p2_y); if(flag==0)p2_x++; left(p2_x,p2_y,'o'); break; } case 77: { p2_x++; flag=if_tank_can_move(p2_x,p2_y); if(flag==0)p2_x--; right(p2_x,p2_y,'o'); break; } } } void choose_player(char a) { if(a=='w'||a=='s'||a=='a'||a=='d'||a=='g') { if(a!='g')p1_move(a); else if(a=='g'&&p1_ball_steer=='%')p1_fire(); } else if(a==72||a==80||a==75||a==77||a=='0') { if(a!='0')p2_move(a); else if(a=='0'&&p2_ball_steer=='%')p2_fire(); } } void load_map() { int i; for(i=0;i<=31;i++) { map[0][i]='_'; map[31][i]='_'; map[i][0]='|'; map[i][31]='|'; } map[0][0]='+'; map[0][31]='+'; map[31][31]='+'; map[31][0]='+'; map[28][14]='#';map[28][15]='#';map[28][16]='#';map[28][17]='#'; map[29][14]='#';map[29][15]='$';map[29][16]='$';map[29][17]='#'; map[30][14]='#';map[30][15]='$';map[30][16]='$';map[30][17]='#'; load_map_1(); } void create_map() { int i,j; for(i=0;i<=31;i++) { for(j=0;j<=31;j++) { printf("%c",map[i][j]); printf(" "); if(j==31) { printf("\n"); } } } } void create_tank() { int x,y; while(1) { tank_x[tank_total_number]=rand()%28+2; tank_y[tank_total_number]=2; if(if_tank_can_move(tank_x[tank_total_number],tank_y[tank_total_number])) { break; } } x=tank_x[tank_total_number]; y=tank_y[tank_total_number]; map[y-1][x-1]='@';map[y-1][x]=' ';map[y-1][x+1]='@'; map[y][x-1]='@'; map[y][x]='@'; map[y][x+1]='@'; map[y+1][x-1]=' ';map[y+1][x]='@';map[y+1][x+1]=' '; tank_live[tank_total_number]=1; tank_step_number[tank_total_number]=0; } void all_tank_move() { int i; for(i=1;i<=tank_taotal_N-1;i++) { if(tank_live[i]==1) { if(tank_step_number[i]==0) { tank_steer[i]=rand()%4; tank_step_number[i]=rand()%9+1; } else { update(tank_x[i],tank_y[i]); switch(tank_steer[i]) { case 0: { tank_y[i]++; if(if_tank_can_move(tank_x[i],tank_y[i])==0)tank_y[i]--; down(tank_x[i],tank_y[i],'@'); break; } case 1: { tank_x[i]--; if(if_tank_can_move(tank_x[i],tank_y[i])==0)tank_x[i]++; left(tank_x[i],tank_y[i],'@'); break; } case 2: { tank_x[i]++; if(if_tank_can_move(tank_x[i],tank_y[i])==0)tank_x[i]--; right(tank_x[i],tank_y[i],'@'); break; } case 3: { tank_y[i]--; if(if_tank_can_move(tank_x[i],tank_y[i])==0)tank_y[i]++; up(tank_x[i],tank_y[i],'@'); if(tank_step_number[i]>3) { tank_step_number[i]=3; } } } tank_step_number[i]--; } } } } void all_tank_check() { int i; for(i=1;i<=tank_taotal_N-1;i++) { if(tank_live[i]==1) { if(if_tank_be_shot(tank_x[i],tank_y[i],tank_steer[i],'*')) { tank_live[i]--; tank_number--; update(tank_x[i],tank_y[i]); } } } } void all_tank_fire() { int i; for(i=1;i<=tank_taotal_N-1;i++) { if(tank_live[i]==1&&tank_ball_steer[i]=='%'&&rand()%20==1) { tank_ball_steer[i]=tank_steer[i]; switch(tank_ball_steer[i]) { case 3:{tank_ball_x[i]=tank_x[i];tank_ball_y[i]=tank_y[i]-2;break;} case 0:{tank_ball_x[i]=tank_x[i];tank_ball_y[i]=tank_y[i]+2;break;} case 1:{tank_ball_x[i]=tank_x[i]-2;tank_ball_y[i]=tank_y[i];break;} case 2:{tank_ball_x[i]=tank_x[i]+2;tank_ball_y[i]=tank_y[i];break;} } if(map[tank_ball_y[i]][tank_ball_x[i]]==' ')map[tank_ball_y[i]][tank_ball_x[i]]='.'; else if(map[tank_ball_y[i]][tank_ball_x[i]]=='o'||map[tank_ball_y[i]][tank_ball_x[i]]=='O') {map[tank_ball_y[i]][tank_ball_x[i]]='.';tank_ball_steer[i]='%';} else if(map[tank_ball_y[i]][tank_ball_x[i]]=='#'||map[tank_ball_y[i]][tank_ball_x[i]]=='*') {map[tank_ball_y[i]][tank_ball_x[i]]=' ';tank_ball_steer[i]='%';} else if(map[tank_ball_y[i]][tank_ball_x[i]]=='$')home_live=0; else tank_ball_steer[i]='%'; } } } void all_tank_ball_move() { int i; for(i=1;i<=tank_taotal_N-1;i++) { if(tank_ball_steer[i]!='%') { map[tank_ball_y[i]][tank_ball_x[i]]=' '; switch(tank_ball_steer[i]) { case 3:{tank_ball_y[i]--;break;} case 0:{tank_ball_y[i]++;break;} case 1:{tank_ball_x[i]--;break;} case 2:{tank_ball_x[i]++;break;} } if(map[tank_ball_y[i]][tank_ball_x[i]]==' ')map[tank_ball_y[i]][tank_ball_x[i]]='.'; else if(map[tank_ball_y[i]][tank_ball_x[i]]=='o'||map[tank_ball_y[i]][tank_ball_x[i]]=='O') {map[tank_ball_y[i]][tank_ball_x[i]]='.';tank_ball_steer[i]='%';} else if(map[tank_ball_y[i]][tank_ball_x[i]]=='#'||map[tank_ball_y[i]][tank_ball_x[i]]=='*') {map[tank_ball_y[i]][tank_ball_x[i]]=' ';tank_ball_steer[i]='%';} else if(map[tank_ball_y[i]][tank_ball_x[i]]=='$')home_live=0; else tank_ball_steer[i]='%'; } } } void p1_check() { int steer; switch(p1_done) { case 'w':{steer=3;break;} case 's':{steer=0;break;} case 'a':{steer=1;break;} case 'd':{steer=2;break;} } if(if_tank_be_shot(p1_x,p1_y,steer,'.')) { p1_live--; update(p1_x,p1_y); p1_x=12;p1_y=29; } } void p2_check() { int steer; switch(p2_done) { case 72:{steer=3;break;} case 80:{steer=0;break;} case 75:{steer=1;break;} case 77:{steer=2;break;} } if(if_tank_be_shot(p2_x,p2_y,steer,'.')) { p2_live--; update(p2_x,p2_y); p2_x=19;p2_y=29; } } int main() { HANDLE hOutput; COORD coord={0,0}; hOutput=GetStdHandle(STD_OUTPUT_HANDLE); srand((unsigned)time(NULL)); char a; memset(map,' ',sizeof(map)); load_map(); getch(); while(1) { if(tank_number<tank_N&&tank_total_number<tank_taotal_N-1) { tank_number++; tank_total_number++; create_tank(); } all_tank_move(); if(p1_ball_steer!='%') { map[p1_ball_y][p1_ball_x]=' '; switch(p1_ball_steer) { case 'w':{p1_ball_y--;break;} case 's':{p1_ball_y++;break;} case 'a':{p1_ball_x--;break;} case 'd':{p1_ball_x++;break;} } if(map[p1_ball_y][p1_ball_x]==' ')map[p1_ball_y][p1_ball_x]='*'; else if(map[p1_ball_y][p1_ball_x]=='@'){map[p1_ball_y][p1_ball_x]='*';p1_ball_steer='%';} else if(map[p1_ball_y][p1_ball_x]=='#'||map[p1_ball_y][p1_ball_x]=='.') {map[p1_ball_y][p1_ball_x]=' ';p1_ball_steer='%';} else if(map[p1_ball_y][p1_ball_x]=='$')home_live=0; else p1_ball_steer='%'; } if(p2_ball_steer!='%') { map[p2_ball_y][p2_ball_x]=' '; switch(p2_ball_steer) { case 72:{p2_ball_y--;break;} case 80:{p2_ball_y++;break;} case 75:{p2_ball_x--;break;} case 77:{p2_ball_x++;break;} } if(map[p2_ball_y][p2_ball_x]==' ')map[p2_ball_y][p2_ball_x]='*'; else if(map[p2_ball_y][p2_ball_x]=='@'){map[p2_ball_y][p2_ball_x]='*';p2_ball_steer='%';} else if(map[p2_ball_y][p2_ball_x]=='#'||map[p2_ball_y][p2_ball_x]=='.') {map[p2_ball_y][p2_ball_x]=' ';p2_ball_steer='%';} else if(map[p2_ball_y][p2_ball_x]=='$')home_live=0; else p2_ball_steer='%'; } if(kbhit()) { a=getch(); choose_player(a); } else { Sleep(0); } all_tank_check(); all_tank_fire(); all_tank_ball_move(); p1_check(); p2_check(); create_map(); printf("P1 LIVE : %d P2 LIVE : %d\n",p1_live,p2_live); printf("TANK NUMBER : %d",tank_taotal_N-tank_total_number+tank_number-1); SetConsoleCursorPosition(hOutput,coord); if(tank_number==0&&tank_total_number==9) { break; } if(p1_live==0&&p2_live==0) { if_win=0; break; } if(home_live==0) { if_win=0; break; } } if(if_win) { printf("YOU WIN\n"); } else { printf("GAME OVER\n"); } getch(); getch(); return 0; }
c语言游戏——tank——2018.1.30.18.26版
猜你喜欢
转载自blog.csdn.net/w13884794538/article/details/79209318
今日推荐
周排行