利用C語言實現(xiàn)一個最簡單的飛機游戲
前言
在前面彈跳小球的基礎(chǔ)上實現(xiàn)一個簡單的飛機游戲,主要包括飛機的顯示、控制移動、顯示復(fù)雜圖案、發(fā)射激光、打靶練習等功能。

目前的飛機還很簡單,大家不要著急,一步一步來,在后面會實現(xiàn)更復(fù)雜的飛機游戲效果。比如
- 如何讓靶子移動起來?
- 如何統(tǒng)計和顯示擊中得分?
- 如何實現(xiàn)子彈散彈效果?
一、利用scanf控制飛機移動
第一步利用scanf輸入不同的字符,按a、s、d、w鍵后改變坐標2、y的值,從而控制飛機*字符上下左右移動,如圖

最基礎(chǔ)的代碼如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
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("*");//輸出飛機
printf("\n");
scanf("%c",&input);
if(input=='a');
y--;
if(input=='d');
y++;
if(input=='w');
x--;
if(input=='s');
x++;
}
return 0;
} 二、getch控制飛機移動
scanf()函數(shù)要求每輸入一個字符按回車鍵后才能執(zhí)行,交互效果不好,因此第二步使用一個新的輸入函數(shù)getch()(#include<conio.h>),不需要回車就可以得到輸入的控制字符。另外,kbhit()函數(shù)在用戶有鍵盤輸入時返回1,否則返回 0;在沒有鍵盤輸入時 if(kbhit())下面的語句不會運行,從而避免出現(xiàn)用戶不輸入,游戲就暫停的情況。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
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("*");//輸出飛機
printf("\n");
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
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("*");//輸出飛機
printf("\n");
if(kbhit()) // 判斷是否有輸入
{
input = getch(); // 根據(jù)用戶的不同輸入來移動,不必輸入回車
if (input == 'a')
y--; // 位置左移
if (input == 'd')
y++; // 位置右移
if (input == 'w')
x--; // 位置上移
if (input == 's')
x++; // 位置下移
}
}
return 0;
}
}
return 0;
} 三、顯示復(fù)雜的飛機圖案

四、發(fā)射激光
按空格鍵后讓飛機發(fā)射激光子彈,即在飛機上方顯示一列豎線'|'。第四步定義變量isFire,用來記錄飛機是否處于發(fā)射子彈的狀態(tài)。
當isFire等于1時,將在飛機的正上方輸出激光豎線。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
int isFire;
while(1)
{
system("cls");
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;
}
//下面輸出一個復(fù)雜的飛機圖案
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");
if(kbhit()) // 判斷是否有輸入
{
input = getch(); // 根據(jù)用戶的不同輸入來移動,不必輸入回車
if (input == 'a')
y--; // 位置左移
if (input == 'd')
y++; // 位置右移
if (input == 'w')
x--; // 位置上移
if (input == 's')
x++; // 位置下移
if (input == ' ')
isFire = 1;
}
}
return 0;
} 五、打靶練習
第五步在第一行通過定義一個變量ny,增加一個靶子‘十‘,控制飛機發(fā)射激光擊中它,變量isKilled 用來存儲是否被擊。
isKilled 等于0顯示靶子;
isKilled 等于1時不再顯示靶子
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int i,j;
int x = 5;
int y = 10;
char input;
int isFire = 0;
int ny = 5; // 一個靶子,放在第一行,ny列上
int isKilled = 0;
while (1)
{
system("cls"); // 清屏函數(shù)
if (!isKilled) // 輸出靶子
{
for (j=0;j<ny;j++)
printf(" ");
printf("+\n");
}
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");
}
if (y+2==ny) // +2是因為激光在飛機的正中間,距最左邊2個坐標
isKilled = 1; // 擊中靶子
isFire = 0;
}
// 下面輸出一個復(fù)雜的飛機圖案
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");
if(kbhit()) // 判斷是否有輸入
{
input = getch(); // 根據(jù)用戶的不同輸入來移動,不必輸入回車
if (input == 'a')
y--; // 位置左移
if (input == 'd')
y++; // 位置右移
if (input == 'w')
x--; // 位置上移
if (input == 's')
x++; // 位置下移
if (input == ' ')
isFire = 1;
}
}
return 0;
}
到此這篇關(guān)于利用C語言實現(xiàn)一個最簡單的飛機游戲的文章就介紹到這了,更多相關(guān)C語言飛機游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)LeetCode(17.電話號碼的字母組合)
這篇文章主要介紹了C++實現(xiàn)LeetCode(17.電話號碼的字母組合),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
Qt圖形圖像開發(fā)之曲線圖表庫QChart編譯安裝詳細方法與使用實例
這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖表庫QChart編譯安裝詳細方法與使用實例,需要的朋友可以參考下2020-03-03
C++實現(xiàn)LeetCode(97.交織相錯的字符串)
這篇文章主要介紹了C++實現(xiàn)LeetCode(97.交織相錯的字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07

