利用C語言實(shí)現(xiàn)一個(gè)最簡單的飛機(jī)游戲
前言
在前面彈跳小球的基礎(chǔ)上實(shí)現(xiàn)一個(gè)簡單的飛機(jī)游戲,主要包括飛機(jī)的顯示、控制移動(dòng)、顯示復(fù)雜圖案、發(fā)射激光、打靶練習(xí)等功能。
目前的飛機(jī)還很簡單,大家不要著急,一步一步來,在后面會(huì)實(shí)現(xiàn)更復(fù)雜的飛機(jī)游戲效果。比如
- 如何讓靶子移動(dòng)起來?
- 如何統(tǒng)計(jì)和顯示擊中得分?
- 如何實(shí)現(xiàn)子彈散彈效果?
一、利用scanf控制飛機(jī)移動(dòng)
第一步利用scanf輸入不同的字符,按a、s、d、w鍵后改變坐標(biāo)2、y的值,從而控制飛機(jī)*字符上下左右移動(dòng),如圖
最基礎(chǔ)的代碼如下
#include<stdio.h> #include<stdlib.h> int main() { 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("*");//輸出飛機(jī) printf("\n"); scanf("%c",&input); if(input=='a'); y--; if(input=='d'); y++; if(input=='w'); x--; if(input=='s'); x++; } return 0; }
二、getch控制飛機(jī)移動(dòng)
scanf()函數(shù)要求每輸入一個(gè)字符按回車鍵后才能執(zhí)行,交互效果不好,因此第二步使用一個(gè)新的輸入函數(shù)getch()(#include<conio.h>),不需要回車就可以得到輸入的控制字符。另外,kbhit()函數(shù)在用戶有鍵盤輸入時(shí)返回1,否則返回 0;在沒有鍵盤輸入時(shí) if(kbhit())下面的語句不會(huì)運(yùn)行,從而避免出現(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");//輸出飛機(jī)上面的空行 for(j=0;j<y;j++) printf(" ");//輸出飛機(jī)左邊的空格 printf("*");//輸出飛機(jī) 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");//輸出飛機(jī)上面的空行 for(j=0;j<y;j++) printf(" ");//輸出飛機(jī)左邊的空格 printf("*");//輸出飛機(jī) printf("\n"); if(kbhit()) // 判斷是否有輸入 { input = getch(); // 根據(jù)用戶的不同輸入來移動(dòng),不必輸入回車 if (input == 'a') y--; // 位置左移 if (input == 'd') y++; // 位置右移 if (input == 'w') x--; // 位置上移 if (input == 's') x++; // 位置下移 } } return 0; } } return 0; }
三、顯示復(fù)雜的飛機(jī)圖案
四、發(fā)射激光
按空格鍵后讓飛機(jī)發(fā)射激光子彈,即在飛機(jī)上方顯示一列豎線'|'。第四步定義變量isFire,用來記錄飛機(jī)是否處于發(fā)射子彈的狀態(tài)。
當(dāng)isFire等于1時(shí),將在飛機(jī)的正上方輸出激光豎線。
#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; } //下面輸出一個(gè)復(fù)雜的飛機(jī)圖案 for(j=0;j<y;j++) printf(" ");// 輸出飛機(jī)上面的空行 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ù)用戶的不同輸入來移動(dòng),不必輸入回車 if (input == 'a') y--; // 位置左移 if (input == 'd') y++; // 位置右移 if (input == 'w') x--; // 位置上移 if (input == 's') x++; // 位置下移 if (input == ' ') isFire = 1; } } return 0; }
五、打靶練習(xí)
第五步在第一行通過定義一個(gè)變量ny,增加一個(gè)靶子‘十‘,控制飛機(jī)發(fā)射激光擊中它,變量isKilled 用來存儲(chǔ)是否被擊。
isKilled 等于0顯示靶子;
isKilled 等于1時(shí)不再顯示靶子
#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; // 一個(gè)靶子,放在第一行,ny列上 int isKilled = 0; while (1) { system("cls"); // 清屏函數(shù) if (!isKilled) // 輸出靶子 { for (j=0;j<ny;j++) printf(" "); printf("+\n"); } if (isFire==0) // 輸出飛機(jī)上面的空行 { for(i=0;i<x;i++) printf("\n"); } else // 輸出飛機(jī)上面的激光豎線 { for(i=0;i<x;i++) { for (j=0;j<y;j++) printf(" "); printf(" |\n"); } if (y+2==ny) // +2是因?yàn)榧す庠陲w機(jī)的正中間,距最左邊2個(gè)坐標(biāo) isKilled = 1; // 擊中靶子 isFire = 0; } // 下面輸出一個(gè)復(fù)雜的飛機(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"); if(kbhit()) // 判斷是否有輸入 { input = getch(); // 根據(jù)用戶的不同輸入來移動(dòng),不必輸入回車 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語言實(shí)現(xiàn)一個(gè)最簡單的飛機(jī)游戲的文章就介紹到這了,更多相關(guān)C語言飛機(jī)游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(17.電話號碼的字母組合)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(17.電話號碼的字母組合),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Qt圖形圖像開發(fā)之曲線圖表庫QChart編譯安裝詳細(xì)方法與使用實(shí)例
這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖表庫QChart編譯安裝詳細(xì)方法與使用實(shí)例,需要的朋友可以參考下2020-03-03C++實(shí)現(xiàn)LeetCode(97.交織相錯(cuò)的字符串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(97.交織相錯(cuò)的字符串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07