第一步,控制飛機移動
還記得小時候玩的飛機大戰遊戲嗎?按a、s、d、w鍵後控制飛機的上下左右移動。
在這裡我們通過按a、s、d、w鍵來改變座標x,y的值,從而控制飛機的移動。
下面是代碼:
下面是實現效果:可以實現飛機的上下左右移動
(小編推薦一個學C語言/C++的學習群:788649720,入群即送C/C++全套學習資料,滿滿的乾貨!)
在上面的代碼中,用到了以下幾個函數:
1:輸入函數getch(),頭文件(#include<conio.h>)
與scanf函數相比,getch()不需要回車就可以得到輸入的字符。
2:kbhit()函數
它的作用是在用戶有鍵盤輸入時返回1,否則返回0;在沒有鍵盤輸入時if(kbhit())下面的語句不會運行,從而避免了用戶不輸入,遊戲就暫停的情況
至於輸出飛機圖案的那段代碼,就不用細說了吧?就是數學問題。
看著挺多,其實可以分為兩個部分,一部分是輸出飛機圖案,另外一部分是控制飛機的移動。
第二步,讓飛機發射激光
我們接下來要實現的是當我們按下空格鍵時,飛機可以發射激光子彈。
在這裡我們通過定義一個變量"isFire"用來記錄飛機是否處於發射子彈的狀態。
這裡我們要對兩個部分都增加一部分代碼:
第一部分,新增加了一個變量isFire,同時利用了if判斷語句,
當變量isFire為0時,即沒有發射子彈,執行與原來一樣的操作,輸出飛機上面的空格即可。
而當變量isFire為1時,飛機發射子彈。我們就需要執行else下面的操作,輸出激光。
第二部分,增加當用戶輸入空格時,變量isFire的值變為1。
這是最後的執行效果:
第三步,增加打靶操作
我們可以增加一個靶子‘+’,來控制我們的飛機發射激光擊中它。
在這裡,我們新增一個變量isKilled用來儲存靶子是否被擊中。
當isKilled為0時顯示靶子,當isKilled為1時靶子消失。
這是我們要增加的代碼:
首先新增兩個變量,
增加輸出靶子的代碼:
增加擊中靶子後的效果:
這是最後的效果圖:
(小編推薦一個學C語言/C++的學習群:788649720,入群即送C/C++全套學習資料,滿滿的乾貨!)
如果有像我一樣,想要自學C語言的,可以關注我,不定期放教程,由簡入難,一起學習,一起進步!
這是本文的源碼:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i, j;
int x = 20;
int y = 20;
char input;
int isFire = 0;
int k = 20; //設立一個靶子,放在第一行的k列上。
int isKilled = 0 ;
while(1)
system("cls"); //清屏函數
if(!isKilled) //輸出靶子。
for(j=0;j<k;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(" |\n");
if(y+2==k) //+2是因為激光在飛機的正中間,距離飛機最左邊兩個座標。
isKilled = 1;
isFire = 0;
//輸出飛機圖案
printf(" *\n");
printf("*****\n");
printf(" * * \n");
//控制飛機移動
if(kbhit()) //判斷鍵盤是否有輸入
input = getch();
if(input == 'a')
y--;
if(input == 'd')
y++;
if(input == 'w')
x--;
if(input == 's')
x++;
if(input == ' ')
isFire = 1;
return 0 ;