飞机游戏2

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
int high,width;
int position_x,position_y;
int bullet_x,bullet_y;
int enemy_x,enemy_y; 
int number;
int grade;
int speed,speedl; 
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};                                  //第二个值为0表示隐藏光标
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void startup()
{
    //grade=0;
    //grade_x=0;
    //grade_y=width-1;
    number=1;
    high=20;                                              //游戏尺寸 
    width=30;
    position_x=high/2;                                    //战机初始位置 
    position_y=width/2; 
    bullet_x=-1;                                            //子弹初始位置 
    bullet_y=position_y;
    enemy_x=0;                                             //敌机初始位置 
    enemy_y=position_y;
    speed=0;                                                //敌机运动速度 
    speedl=12;
 } 
 void gotoxy(int x,int y)
 {
     HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
     COORD pos;
     pos.X=x;
     pos.Y=y;
     SetConsoleCursorPosition(handle,pos);
  }
void show()                                                   //显示画面 
 {
     gotoxy(0,0);                                               //代替清屏函数 
     //system("cls");
     int i,j;
     for(i=0;i<high;i++)
     {
         for(j=0;j<width;j++)
         {
             //if((i==grade_x) && j==grade_y)
             //    printf("成绩:%d",grade);
             if((i==position_x) && (j==position_y))
             {
                printf("*");
            }else{
            if((i==enemy_x) && (j==enemy_y))
            {
                if((i==bullet_x) && (j==bullet_y))
                {
                    printf("|");
                    number=0;
                    enemy_y=0;
                    enemy_x=0;
                    grade++;
                }else{
                    printf("@");
                    number=1;
                }
            }else{
            if((i==bullet_x) && (j==bullet_y))
             {
                printf("|");
                /*if((bullet_x==enemy_x) && (bullet_y==enemy_y))
                    number=0;
                    enemy_y=0;*/
            }else{
            if((i==position_x+1) && (j>=position_y-2) && (j<=position_y+2))             //显示战机其他部位 
                 {
                     printf("*");
            }else{
            if(((i==position_x+2) && (j==position_y-1)) || ((i==position_x+2) && (j==position_y+1)))
            {
                printf("*");
            }else{
            printf(" ");
            }
            }
                    }
                }
            }
         }
         printf("\n");    
    }
    printf("成绩:%d",grade); 
 }
 void updatwithoutinput()
 {
     if(bullet_x>-1) 
         bullet_x--;
     if(number==0)
     {
         enemy_y=rand()%20;
     }
     switch(grade){                               //根据得到的成绩改变敌机的速度 
         case 10:speedl=10;break;
        case 15:speedl=8;break;
        case 20:speedl=6;break;    
        case 25:speedl=4;break;
        case 30:speedl=2;break;
        case 35:speedl=0;break;
        default:break;
    }
     if(speed<speedl)                            //敌机运动速度 
         speed++;
     if(speed==speedl)
     {
         enemy_x++;
         speed=0;
         }    
    if(enemy_x>high)
    {
        enemy_x=0;
        number=0;
    }     
          
     
 }
 void updatwithinput()
 {
     char input;                                                  //接受键盘信号 
     if(kbhit())
     {
         input=getch();
         if(input=='w')
             position_x--;
         if(input=='s')
            position_x++;
        if(input=='a')
            position_y--;
        if(input=='d')
            position_y++;
        if(input==' ')
        {
            bullet_x=position_x-1;
            bullet_y=position_y;
        }    
                    
     }
 }
int main()
{
    while(1)
    {
        system("cls");
        char word[10];
        char wo1[10]={'b','e','g','i','n'};
        char wo2[10]={'e','n','d'};
        int g;
        for(g=0;g<10;g++)
            printf("\n");
        for(g=0;g<10;g++)
            printf(" ");    
        printf("你是否选择开始游戏,如果选择开始游戏请输入‘begin’,如果不选择开始游戏请输入‘end’\n");
        gets(word);
        if(strcmp(word,wo1)==0)
        {
            system("cls");
            break;
        }else{
            if(strcmp(word,wo2)==0)
                goto over_;
        }
    }
    startup();                                                   //数据初始化 
    while(1)
    {
        HideCursor();
        show();
        if((position_x==enemy_x) && (position_y==enemy_y))                      //战机碰到敌机结束游戏 
            goto over_;
        if((position_x+1==enemy_x) && (enemy_y>=position_y-2) && (enemy_y<=position_y+2))
            goto over_;
        if(((position_x+2==enemy_x) && (enemy_y==position_y-1)) || ((position_x+2==enemy_x) && (enemy_y==position_y+1)))
            goto over_;                                                            
        updatwithoutinput();                                       //与用户无关的更新 
        Sleep(50);
        updatwithinput();                                           //与用户有关的更新 
    }
    int a; 
over_:
    system("cls");
    for(a=0;a<10;a++)
        printf("\n");
    for(a=0;a<10;a++)
        printf(" ");    
    printf("结束游戏你最后的得分为:%d",grade);
    for(a=0;a<10;a++)
        printf("\n"); 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值