吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2748|回复: 18
收起左侧

[其他原创] 打飞机游戏3.0

[复制链接]
铁码冰河 发表于 2021-3-19 15:10
34-打飞机游戏3.0 00_00_00-00_00_30~1.gif

方向键控制,空格开火
[C] 纯文本查看 复制代码
#include <stdio.h>
#include "mine.h"


//画面尺寸
#define High 21
#define Width 13

//变量区: 

int canvas[High][Width]={0};//二维数组记录游戏画面中对应的元素
//0是空白,1是飞机,2是子弹,3是敌机

int plane_x,plane_y;//飞机坐标位置

#define EnemyNum 5//敌机数目

int enemy_x[EnemyNum],enemy_y[EnemyNum];//敌机坐标

int bullet;//判断子弹等级

int speed,speedb;//控制敌机下落速度 speed 量变 speedb 质变

int score;//得分

int life;//生命

int hit;//判断碰撞和击中

int headnum;//控制头部

void head(){
    //名字

    switch(headnum%3){
        case 0:printf(" >  >  【 鹰 击 长 空 】  <  <\n");break;
        case 1:printf("  >  > 【 鹰 击 长 空 】 <  < \n");break;
        case 2:printf("   >  >【 鹰 击 长 空 】<  <\n");break;
    }

}

void start(){
    //数据初始化

    HideCursor();

    plane_x=High-1;

    plane_y=(Width-1)/2;

    headnum=0;

    int k;
    for(k=0;k<EnemyNum;k++){
        enemy_x[k]=random(5);
        enemy_y[k]=random(Width);
        canvas[enemy_x[k]][enemy_y[k]]=3;
    }
    canvas[plane_x][plane_y]=1;
    
    speedb=40;
    speed=0;

    score=0;
    life=10;
    hit=0;
    bullet=0;//表示子弹等级为0

}

void jifenban(){
    //计分板

    int i;
    
    printf(" 【得分:%2d】",score);

    
    printf("【火力等级:");
    
    for(i=0;i<=bullet;i++){
        printf("★");
    }
    for(;i<3;i++){
        printf("☆");
    }
    printf("】");

    printf("\n 【生命: ");
    
    for(i=0;i<life;i++){
        printf("◆");
    }

    for(;i<10;i++){
        printf("◇");
    }
    printf("】");

}

void showup(){
    //画面显示

    cls();
    
    head();

    int i,j;

        for(i=0;i<High;i++){

            printf("       ┃ ");

            for(j=0;j<Width;j++){

                if(canvas[i][j]==4){

                    canvas[i][j]=0;


                    printf("X");//击中目标
                    

                }

                else if(canvas[i][j]==1){

                    printf("A"); //输出飞机A

                }

                else if(canvas[i][j]==2){

                    printf("!");//输出子弹

                }

                else if(canvas[i][j]==3){

                    printf("W");//输出敌机

                }


                else{

                    printf(" "); //输出空格

                }
            }

            printf("┃\n");
        }
    
    if(hit){

        printf("\a");

        sleep(20);

        hit=0;

    }

}

void wginputupdate(){

    //输入无关更新

    headnum++;

    int i,j,k;

        for(i=0;i<High;i++){

            for(j=0;j<Width;j++){

                if(canvas[i][j]==2){
                    
                    for(k=0;k<EnemyNum;k++){
                        if(i==enemy_x[k] && j==enemy_y[k]){
                            //子弹击中
                            canvas[enemy_x[k]][enemy_y[k]]=4;
                            
                            score++;

                            enemy_x[k]=random(5);

                            enemy_y[k]=random(Width);


                            canvas[enemy_x[k]][enemy_y[k]]=3;

                            hit=1;

                            break;
                        }

                        else if(i==enemy_x[k]+1 && j==enemy_y[k]){
                            //敌机在上,子弹在下

                            score++;

                            canvas[enemy_x[k]][enemy_y[k]]=4;
                            
                            canvas[i][j]=0;

                            hit=1;
                            

                            enemy_x[k]=random(5);

                            enemy_y[k]=random(Width);

                            canvas[enemy_x[k]][enemy_y[k]]=3;

                            break;

                        }

                        else if(i==enemy_x[k]+2 && j==enemy_y[k] && speed==speedb-1){
                            //防止子弹和敌机同时到达一个点

                            score++;

                            canvas[enemy_x[k]][enemy_y[k]]=0;

                            canvas[enemy_x[k]+1][enemy_y[k]]=4;
                            
                            canvas[i][j]=0;

                            hit=1;

                            enemy_x[k]=random(5);

                            enemy_y[k]=random(Width);

                            canvas[enemy_x[k]][enemy_y[k]]=3;

                            break;

                        }
                    }
                        if(!hit){

                            canvas[i][j]=0;

                            if(i>0){
                                canvas[i-1][j]=2;//子弹向上移动
                            }

                        }
                    

                }

                else if(canvas[i][j]==1){
                    
                    for(k=0;k<EnemyNum;k++){
                        if(i==enemy_x[k] && j==enemy_y[k]){
                            //很明显的相撞
                            canvas[enemy_x[k]][enemy_y[k]]=4;
                            
                            score--;

                            life=life-3;

                            enemy_x[k]=random(5);

                            enemy_y[k]=random(Width);


                            canvas[enemy_x[k]][enemy_y[k]]=3;

                            plane_x=High-1;
                            plane_y=Width/2;
                            canvas[plane_x][plane_y]=1;
                            
                            hit=1;

                            break;
                        }


                        else if(i==enemy_x[k]+1 && j==enemy_y[k] && speed==speedb-1){
                            //防止我机和敌机同时到达一个点

                            score--;
                            life=life-3;

                            canvas[enemy_x[k]][enemy_y[k]]=0;

                            canvas[i][j]=4;

                            hit=1;

                            enemy_x[k]=random(5);

                            enemy_y[k]=random(Width);

                            canvas[enemy_x[k]][enemy_y[k]]=3;

                            plane_x=High-1;
                            plane_y=Width/2;
                            canvas[plane_x][plane_y]=1;

                            break;

                        }
                    }

                }

            }
        }

        
             speed++;
        

        

            if(speed==speedb){
                //敌机自动下落
                
                for(k=0;k<EnemyNum;k++){

                    canvas[enemy_x[k]][enemy_y[k]]=0;
                    enemy_x[k]++;
                    canvas[enemy_x[k]][enemy_y[k]]=3;

                if(enemy_x[k]>High-1){
                    
                    //敌机跑出下边界
                    life--;
                    canvas[enemy_x[k]][enemy_y[k]]=0;
                    enemy_x[k]=random(5);
                    enemy_y[k]=random(Width);
                    canvas[enemy_x[k]][enemy_y[k]]=3;
                    hit=2;
                    score--;

                }

                speed=0;

                switch(score/20){

                    case 1:speedb=30;break;
                    case 2:speedb=20;bullet=1;break;
                    case 3:speedb=10;bullet=2;break;
                    case 4:speedb=5;break;
                    default:break;

                }
            }
        }

    if(score<0)
        score=0;
}

void yginputupdate(){
    //输入有关更新
    char input;
    if(kbhit()){

        input=getch();

        if(input==-32){

            input=getch();

            canvas[plane_x][plane_y]=0;
            
            switch(input){

                case 72:plane_x--;break;
                case 80:plane_x++;break;
                case 75:plane_y--;break;
                case 77:plane_y++;break;
                default:break;

            }

            if(plane_y<=0){
                plane_y=0;
            } 
            if(plane_y>=Width-1){
                plane_y=Width-1;
            }
            if(plane_x<=1){
                plane_x=1;
            }
            if(plane_x>=High-1){
                plane_x=High-1;
            }

            canvas[plane_x][plane_y]=1;
        }

        else if(input=' '){

            int left,right,i;
            
            left=plane_y-bullet;
            right=plane_y+bullet;

            if(left<0){
                left=0;
            }

            if(right>Width-1){
                right=Width-1;
            }

            for(i=left;i<=right;i++){

                canvas[plane_x-1][i]=2;

            }

        }
        
        else{
            input=getchar();
            input=getchar();
        }

    }
}

int main(){

    start();//数据初始化

    while(life>0){
        
        showup();//画面显示

        wginputupdate();//输入无关更新

        yginputupdate();//输入有关更新

        if(score==100){
            printf("\a");
            break;
        }

        jifenban();

    }

    if(score==100){
        system("cls");
        char c;
        printf("\n\n\n\n\n\n\n\t\t\t > Game Pass! <");
        switch(life){
            case 1:c='E';break;;
            case 2:;
            case 3:c='D';break;;
            case 4:;
            case 5:c='C';break;;
            case 6:;
            case 7:c='B';break;;
            case 8:;
            case 9:c='A';break;;
            case 10:c='S';break;
            default:break;
        }
        printf("\n\n\t\t\t > Level  %c   <",c);
        sleep(3000);
    }
    
    else {

        system("cls");
        printf("\n\n\n\n\n\n\n\t\t\t > Game Over! <");
        sleep(3000);

    }

}


免费评分

参与人数 3吾爱币 +11 热心值 +3 收起 理由
苏紫方璇 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
首席撩妹指导师 + 1 + 1 这也能冲?
chenjie96 + 1 好家伙容易误解

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 铁码冰河 发表于 2021-3-19 15:30
cooked 发表于 2021-3-19 15:27
想学着写写,这是用C写的吗?有啥推荐用的编辑器吗

VSCode
化作星星守护你 发表于 2021-3-19 15:14
大鹏飞飞 发表于 2021-3-19 15:18
雨作 发表于 2021-3-19 15:22
把意大利炮拿出来
cooked 发表于 2021-3-19 15:27
想学着写写,这是用C写的吗?有啥推荐用的编辑器吗
傻w潴 发表于 2021-3-19 15:28
和我想的打飞机不一样啊老铁
tritan 发表于 2021-3-19 15:30
打飞机还需要代码么,需要的是手艺
A陈尘 发表于 2021-3-19 15:52
看起来很好玩
opqrsgu 发表于 2021-3-19 15:57
这游戏,颜值何在?直男游戏鉴定完毕!但还是要给楼主点个赞。有值得学习的东西。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表