C語言實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)簡單飛機(jī)大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、項(xiàng)目描述和最終的成果展示
項(xiàng)目描述: 顯示出一個(gè)飛機(jī),并可以控制移動(dòng),發(fā)出激光,打靶練習(xí)。
效果展示:

二、輸出一個(gè)飛機(jī)模型
先輸出一個(gè)飛機(jī)模型。后面再進(jìn)一步完成控制飛機(jī)的功能。
代碼如下:
//輸出飛機(jī)圖案
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{
?? ??? ?int i,j;
?? ??? ?int x=10;
?? ??? ?int y=10;
?? ??? ?char input;
?? ??? ?//輸出飛機(jī)上面的空行
?? ??? ?for(i=0;i<x;i++)
?? ??? ?{
?? ??? ??? ?printf("\n");
?? ??? ?}
?? ??? ?//輸出飛機(jī)左邊的空格
?? ??? ?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;
}效果圖如下:

三、實(shí)現(xiàn)控制飛機(jī)移動(dòng)的功能
用scanf()函數(shù)來實(shí)現(xiàn)控制飛機(jī)移動(dòng)的功能
代碼如下:
#include<stdio.h>
#include<stdlib.h>
//用scanf來完成飛機(jī)的移動(dòng)
int main(void)
{
?? ?int i,j;
?? ?int x=5;
?? ?int y=10;
?? ?char input;
?? ?while(1)
?? ?{
?? ??? ?system("cls");
?? ??? ?//輸出飛機(jī)上面的空行
?? ??? ?for(i=0;i<x;i++)
?? ??? ?{
?? ??? ??? ?printf("\n");
?? ??? ?}
?? ??? ?//輸出飛機(jī)左邊的空格
?? ??? ?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;
}效果圖如下:

你會(huì)發(fā)現(xiàn)一個(gè)弊端 就是它會(huì)顯示你輸入了啥,這樣是特別的不友好的。
所以我們要用 getch() 這個(gè)函數(shù), 它是不會(huì)顯示回顯的。即,不會(huì)出現(xiàn)我們輸入的是啥。
這樣就很好了,達(dá)到了我們的目的。
用getch()函數(shù)來實(shí)現(xiàn)控制飛機(jī)移動(dòng)的功能
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//用scanf來完成飛機(jī)的移動(dòng)
int main(void)
{
?? ?int i,j;
?? ?int x=5;
?? ?int y=10;
?? ?char input;
?? ?while(1)
?? ?{
?? ??? ?system("cls");
?? ??? ?//輸出飛機(jī)上面的空行
?? ??? ?for(i=0;i<x;i++)
?? ??? ?{
?? ??? ??? ?printf("\n");
?? ??? ?}
?? ??? ?//輸出飛機(jī)左邊的空格
?? ??? ?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;
}效果圖如下:

四、添加發(fā)射激光功能
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//用getch來完成飛機(jī)的移動(dòng)
int main(void)
{
?? ?int i,j;
?? ?int x=10;
?? ?int y=10;
?? ?char input;
?? ?int isFire=0;//用來判斷是否發(fā)射
?? ?while(1)
?? ?{
?? ??? ?if(isFire == 0)
?? ??? ?{
?? ??? ??? ?//輸出飛機(jī)上面的空行
?? ??? ??? ?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;
?? ??? ?}
?? ??? ?//輸出飛機(jī)左邊的空格
?? ??? ?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;
}效果圖如下:

五、添加靶子和分?jǐn)?shù)統(tǒng)計(jì)功能
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
#include<conio.h>
//用getch來完成飛機(jī)的移動(dòng)
int main(void)
{
?? ?int i,j;
?? ?int x=10;
?? ?int y=10;
?? ?char input;
?? ?int isFire=0;//用來判斷是否發(fā)射
?? ?int score=10;
?? ?int ny = 30; ? ? ? ?// ?靶子的位置
?? ?int isKilled = 0; //判斷是否擊中
?? ?int yanshi=0; ? ?// ?延時(shí)靶子的時(shí)間
?? ?system("color 09");
?? ?while(1)
?? ?{
?? ??? ?if(yanshi<66)//延時(shí) 讓靶子顯示
?? ??? ?{
?? ??? ??? ?yanshi++;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?srand(time(0));
?? ??? ??? ?ny=rand()%80+5;
?? ??? ??? ?yanshi=0;
?? ??? ?}
?? ??? ?printf("分?jǐn)?shù):%d\n",score);
?? ??? ?if(!isKilled)//沒有擊中靶子,繼續(xù)顯示靶子
?? ??? ?{
?? ??? ??? ?for(j=0;j<ny;j++)
?? ??? ??? ?{
?? ??? ??? ??? ?printf(" ");
?? ??? ??? ?}
?? ??? ??? ?printf("▼\n");
?? ??? ?}
?? ??? ?else//說明擊中靶子,刷新靶子
?? ??? ?{
?? ??? ??? ?yanshi=66;
?? ??? ??? ?isKilled=0;
?? ??? ?}
?? ??? ?if(isFire == 0)
?? ??? ?{
?? ??? ??? ?//輸出飛機(jī)上面的空行
?? ??? ??? ?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;
?? ??? ?}
?? ??? ?//輸出飛機(jī)左邊的空格
?? ??? ?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;//分?jǐn)?shù)增加
?? ??? ?}
?? ?}
?? ?return 0;
}效果圖如下:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)
- C語言用封裝方法實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼
- C語言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)
- C語言版飛機(jī)大戰(zhàn)游戲
- C語言代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語言之飛機(jī)大戰(zhàn)游戲
- C語言實(shí)現(xiàn)簡單飛機(jī)大戰(zhàn)
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(647.回文子字符串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(647.回文子字符串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
利用C++實(shí)現(xiàn)最長公共子序列與最長公共子串
這篇文章主要給大家介紹了如何利用C++實(shí)現(xiàn)最長公共子序列與最長公共子串,文章一開始就給大家簡單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過算法及示例代碼詳細(xì)介紹了C++實(shí)現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12
詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法
這篇文章主要介紹了詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08
在輸入輸出字符串時(shí)scanf(),printf()和gets(),puts()的區(qū)別淺談
在輸入輸出字符串時(shí)scanf(),printf()和gets(),puts()的區(qū)別淺談,需要的朋友可以參考一下2013-02-02
三種獲取網(wǎng)頁源碼的方法(使用MFC/Socket實(shí)現(xiàn))
Windows下比較簡單的獲取網(wǎng)頁源碼的方法:使用MFC、使用MFC、Socket實(shí)現(xiàn)2013-12-12

