c语言游戏——tank——2018.1.30.18.26版

#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;
}



猜你喜欢

转载自blog.csdn.net/w13884794538/article/details/79209318