亲宝软件园·资讯

展开

C语言飞机大战游戏

辉小歌 人气:0

一、项目描述和最终的成果展示

项目描述: 显示出一个飞机,并可以控制移动,发出激光,打靶练习。

效果展示:

二、输出一个飞机模型

先输出一个飞机模型。后面再进一步完成控制飞机的功能。

代码如下:

//输出飞机图案
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{
        int i,j;
        int x=10;
        int y=10;
        char input;

        //输出飞机上面的空行
        for(i=0;i<x;i++)
        {
            printf("\n");
        }

        //输出飞机左边的空格
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("  *\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("*****\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf(" * * \n");    
    return 0;
}

效果图如下:

三、实现控制飞机移动的功能

用scanf()函数来实现控制飞机移动的功能

代码如下:

#include<stdio.h>
#include<stdlib.h>
//用scanf来完成飞机的移动
int main(void)
{
    int i,j;
    int x=5;
    int y=10;
    char input;

    while(1)
    {
        system("cls");
        //输出飞机上面的空行
        for(i=0;i<x;i++)
        {
            printf("\n");
        }

        //输出飞机左边的空格
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("  *\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("*****\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf(" * * \n");
        scanf("%c",&input);
        if(input == 'a' || input == 'A')
        {
            y--;
        }
        if(input == 'd' || input == 'D')
        {
            y++;
        }
        if(input == 'w' || input == 'W')
        {
            x--;
        }
        if(input == 's' || input == 'S')
        {
            x++;
        }
    }
    return 0;
}

效果图如下:

你会发现一个弊端 就是它会显示你输入了啥,这样是特别的不友好的。
所以我们要用 getch() 这个函数, 它是不会显示回显的。即,不会出现我们输入的是啥。
这样就很好了,达到了我们的目的。

用getch()函数来实现控制飞机移动的功能

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//用scanf来完成飞机的移动
int main(void)
{
    int i,j;
    int x=5;
    int y=10;
    char input;

    while(1)
    {
        system("cls");
        //输出飞机上面的空行
        for(i=0;i<x;i++)
        {
            printf("\n");
        }

        //输出飞机左边的空格
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("  *\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("*****\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf(" * * \n");
        input=getch();
        if(input == 'a' || input == 'A')
        {
            y--;
        }
        if(input == 'd' || input == 'D')
        {
            y++;
        }
        if(input == 'w' || input == 'W')
        {
            x--;
        }
        if(input == 's' || input == 'S')
        {
            x++;
        }
    }
    return 0;
}

效果图如下:

四、添加发射激光功能

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//用getch来完成飞机的移动
int main(void)
{
    int i,j;
    int x=10;
    int y=10;
    char input;
    int isFire=0;//用来判断是否发射

    while(1)
    {
        if(isFire == 0)
        {
            //输出飞机上面的空行
            for(i=0;i<x;i++)
                printf("\n");
        }
        else
        {
            for(i=0;i<x;i++)
            {
                for(j=0;j<y;j++)
                    printf(" ");
                printf("  |\n");
            }
            isFire = 0;
        }


        //输出飞机左边的空格
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("  *\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("*****\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf(" * * \n");
        input=getch();
        fflush(stdin);
        system("cls");
        if(input == 'a' || input == 'A')
        {
            y--;
        }
        if(input == 'd' || input == 'D')
        {
            y++;
        }
        if(input == 'w' || input == 'W')
        {
            x--;
        }
        if(input == 's' || input == 'S')
        {
            x++;
        }
        if( input == ' ')
            isFire = 1;
    }
    return 0;
}

效果图如下:

五、添加靶子和分数统计功能

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
#include<conio.h>
//用getch来完成飞机的移动
int main(void)
{
    int i,j;
    int x=10;
    int y=10;
    char input;
    int isFire=0;//用来判断是否发射
    int score=10;

    int ny = 30;        //  靶子的位置
    int isKilled = 0; //判断是否击中
    int yanshi=0;    //  延时靶子的时间
    system("color 09");

    while(1)
    {
        if(yanshi<66)//延时 让靶子显示
        {
            yanshi++;
        }
        else
        {
            srand(time(0));
            ny=rand()%80+5;
            yanshi=0;
        }
        printf("分数:%d\n",score);
        if(!isKilled)//没有击中靶子,继续显示靶子
        {
            for(j=0;j<ny;j++)
            {
                printf(" ");
            }
            printf("▼\n");
        }
        else//说明击中靶子,刷新靶子
        {
            yanshi=66;
            isKilled=0;
        }

        if(isFire == 0)
        {
            //输出飞机上面的空行
            for(i=0;i<x;i++)
                printf("\n");
        }
        else//开火
        {
            for(i=0;i<x;i++)
            {
                for(j=0;j<y;j++)
                    printf(" ");
                printf("  |\n");
            }
            isFire = 0;
        }


        //输出飞机左边的空格
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("  *\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf("*****\n");
        for(j=0;j<y;j++)
        {
            printf(" ");
        }
        printf(" * * \n");
        input=getch();
        fflush(stdin);
        system("cls");
        if(input == 'a' || input == 'A')
        {
            y--;
        }
        if(input == 'd' || input == 'D')
        {
            y++;
        }
        if(input == 'w' || input == 'W')
        {
            x--;
        }
        if(input == 's' || input == 'S')
        {
            x++;
        }
        if( input == ' ')
            isFire = 1;
        if( (ny==y+2) && (input==' ') )//判断是否击中靶子
        {
            isKilled=1;
            score=score+5;//分数增加
        }
    }
    return 0;
}

效果图如下:

加载全部内容

相关教程
猜你喜欢
用户评论