C語言實現簡單的飛機大戰遊戲

本文實例為大傢分享瞭C語言實現簡單飛機大戰遊戲的具體代碼,供大傢參考,具體內容如下

一、項目描述和最終的成果展示

項目描述: 顯示出一個飛機,並可以控制移動,發出激光,打靶練習。

效果展示:

二、輸出一個飛機模型

先輸出一個飛機模型。後面再進一步完成控制飛機的功能。

代碼如下:

//輸出飛機圖案
#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;
}

效果圖如下:

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: