這些是C/C++能做的
服務(wù)器開發(fā)工程師桃煎、人工智能篮幢、云計(jì)算工程師、信息安全(黑客反黑客)为迈、大數(shù)據(jù) 三椿、數(shù)據(jù)平臺缺菌、嵌入式工程師、流媒體服務(wù)器搜锰、數(shù)據(jù)控解伴郁、圖像處理、音頻視頻開發(fā)工程師蛋叼、游戲服務(wù)器焊傅、分布式系統(tǒng)、游戲輔助等
C語言編程小游戲:小球碰撞代碼介紹:那么我們來詳細(xì)看一下
getch()函數(shù):我們都知道getchar()狈涮,同樣可以接收鍵盤輸入狐胎,但是會在標(biāo)準(zhǔn)輸出設(shè)備上顯示輸入字符。但是歌馍,我們的小游戲的標(biāo)準(zhǔn)輸出設(shè)備是用來顯示游戲畫面的握巢,不能顯示輸入字符。于是我們使用了getch()函數(shù)松却,可以在接收鍵盤輸入時(shí)不在標(biāo)準(zhǔn)輸出設(shè)備上輸出暴浦。要理解這兩個(gè)函數(shù)就需要我們理解輸入緩沖區(qū)。我們知道電腦程序的運(yùn)行速度是極快的晓锻,我們的鍵盤輸入不是直接傳給程序的歌焦,而是暫存在緩沖區(qū)中,積累到一定的數(shù)目后再輸入給程序砚哆。比如scanf函數(shù)就是在接收到回車或輸入與預(yù)設(shè)不符時(shí)停止接收鍵盤輸入并將緩沖區(qū)中的字符輸入到程序中独撇。而且scanf函數(shù)在將鍵盤輸入存到緩沖區(qū)中的同時(shí)輸入標(biāo)準(zhǔn)輸出設(shè)備中。理解了以上躁锁,getch()就好理解了券勺。gethch()函數(shù)將鍵盤輸入存入緩沖區(qū)直接輸出到程序中,而且getch()函數(shù)是接收到一個(gè)字符后馬上輸出的灿里。所以程序能馬上對鍵盤輸入做出反應(yīng)。
Sleep()函數(shù):可以上程序停下來程腹,如果太快的話人眼跟不上來的匣吊。暫停時(shí)間是以ms為單位的。其實(shí)執(zhí)行Sleep()函數(shù)時(shí)電腦不是什么都不做的寸潦,其實(shí)它在循環(huán)執(zhí)行空語句色鸳。如果你知道你的電腦循環(huán)執(zhí)行一個(gè)空語句所需的時(shí)間的話,你可以直接操作见转。很多單片機(jī)就是利用這個(gè)原理實(shí)現(xiàn)延時(shí)的目的命雀。
掃描方向:是需要格外注意的,因?yàn)橛螒蜃畲蟮奶卣骶褪墙换バ詷O強(qiáng)斩箫,所以游戲里的數(shù)據(jù)是實(shí)時(shí)更新的吏砂。所以如果掃描方向不對的話是很容易出問題的撵儿,大家可以把代碼的掃描方向修改一下看看結(jié)果。
函數(shù)分裝:大家可以看到我是把代碼分裝到幾個(gè)不同的函數(shù)中的狐血。無論任何游戲都可以分為以下四個(gè)部分淀歇,初始化,顯示匈织,刷新浪默,接收玩家輸入。所以將游戲天然的分為四個(gè)大塊是十分合理的缀匕。#include
小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 二六三纳决,六八八,二七六 】乡小,無論你是大牛還是小白阔加,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具劲件,很多干貨和技術(shù)資料分享掸哑!
#include
#include
#include
#include
#define N 20 ? ? ? ? ? ? ?
int screen[N][N];
void start(int* flag,int* rate){
? ? ? ? ? srand((unsigned)time(NULL));
? ? ? ? ? screen[N-1][rand()%20]=2;
? ? ? ? ? *flag=0;//判斷是否被擊中,初始為零
? ? ? ? ? *rate=20;敵機(jī)移動速率
}
void show(){
? ? ? ? ? system("cls");
? ? ? ? ? printf("jk操作\n");
//輸出畫面
? ? ? ? ? inti,j;
? ? ? ? ? for(i=0;i
? ? ? ? ? ? ? ? ? ? for(j=0;j
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(screen[i][j]==1)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?putchar('V');
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(screen[i][j]==2)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?putchar('A');
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?putchar('');
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? putchar('\n');
? ? ? ? ? }
? ? ? ? ? Sleep(50);
}
void updatewithoutinput(int* flag,int*rate){
? ? ? ? ? inti,j;
//計(jì)時(shí)
? ? ? ? ? staticint time=-1;
? ? ? ? ? time++;
//敵機(jī)前進(jìn)
? ? ? ? ? for(i=N-1;i>=0;i--){
? ? ? ? ? ? ? ? ? ? for(j=0;j
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(screen[i][j]==1){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen[i][j]=0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen[i+1][j]=1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
//敵機(jī)觸底
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(i==N-2&&screen[i][j]==1){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen[i][j]=0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
//敵機(jī)擊中戰(zhàn)機(jī)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(screen[i][j]==2&&screen[i-1][j]==1){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*flag=1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?putchar('\a'); ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
//刷新敵機(jī)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(time%*rate==0&&i==0)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen[i][j]=rand()%2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? }
}
void updatewithinput(){
? ? ? ? ? charinput;//保存鍵盤輸入
? ? ? ? ? if(kbhit()){//檢測鍵盤輸入
? ? ? ? ? ? ? ? ? ? input=getch();
? ? ? ? ? ? ? ? ? ? intj;
? ? ? ? ? ? ? ? ? ? for(j=0;j
? ? ? ? ? ? ? ? ? ? if(input=='j'&&j>0&&screen[N-1][j]==2){
? ? ? ? ? ? ? ? ?screen[N-1][j]=0;
? ? ? ? ? ? ? ? ?screen[N-1][j-1]=2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if(input=='k'&&j
? ? ? ? ? ? ? ? ?screen[N-1][j]=0;
? ? ? ? ? ? ? ? ?screen[N-1][j+1]=2;
? ? ? ? ? ? ? ? ?break;//防止錯(cuò)誤多步操作
? ? ? ? ? ? ? ? ? ? } ? ? ? ?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? }
}
int main(){
? ? ? ? ? intrate;
? ? ? ? ? intflag;
? ? ? ? ? begin:
? ? ? ? ? start(&flag,&rate);
? ? ? ? ? while(1){
? ? ? ? ? ? ? ? ? ? if(flag)
? ? ? ? ? ? ? ? ? ? gotobegin;//重啟游戲
? ? ? ? ? ? ? ? ? ? show();
? ? ? ? ? ? ? ? ? ? updatewithoutinput(&flag,&rate);
? ? ? ? ? ? ? ? ? ? updatewithinput();
? ? ? ? ? }?小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 二六三零远,六八八苗分,二七六 】,無論你是大牛還是小白牵辣,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)摔癣!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享纬向!
}
如果理解了以上代碼择浊,就請思考以下問題
-1. ? ?如何設(shè)置暫停?
-2. ? ?如何繪制邊框逾条?
-3. ? ?如何寫出不同的敵機(jī)琢岩,比如血量不同?
-4. ? ?如何寫出子彈师脂?