




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第C語言實現(xiàn)打磚塊小游戲本文實例為大家分享了C語言實現(xiàn)打磚塊游戲的具體代碼,供大家參考,具體內(nèi)容如下
本節(jié)我們將沿用上一節(jié)所提到的函數(shù)式游戲框架來寫一個彈球打磚塊的游戲。
基本量、邊框繪制
我們首先定義好可能需要的變量,比如小球坐標以及速度、游戲界面高度和寬度等等,然后再根據(jù)之前提到的彈跳小球重構(gòu)代碼,剩下的內(nèi)容再分步添置即可。
#includestdio.h
#includestdlib.h
#includeconio.h
#includecwindow.h
//全局變量
intwidth,high;
//游戲界面尺寸
intball_x,ball_y;
//小球坐標
intball_vx,ball_vy;
//小球速度
voidgotoxy(intx,inty)
//移動光標便于清屏重畫
HANDLEhandle=GetStdHandle(STD_UOTPUT_HANDLE);
CROODpos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
voidstartup()
//數(shù)據(jù)初始化
high=15;
width=20;
ball_x=0;
ball_y=width/2;
ball_vx=1;
ball_vy=1;
voidshow()
//顯示界面
gotoxy(0,0);
//光標移動到原點便于重畫
inti,j;
for(i=0;ihigh;i++)
{
for(j=0;jwidth;j++)
{
if((i==ball_x)(j==ball_y))
printf("O");//輸出小球
elseif(j==width)
//到達右邊界
printf("|");//輸出邊界
elseif(i==high)
//到達下邊界
printf("-");//輸出邊界
else
printf("");//非小球坐標輸出空格
}
printf("\n");
}
voidupdateWithoutInput()
//與輸入無關(guān)更新
ball_x=ball_x+ball_vx;
ball_y=ball_y+ball_vy;
//判斷是否到達邊界
if((ball_x==0)||(ball_x==high-1))
ball_vx=-ball_vx;
if((ball_y==0)||(ball_y==width-1))
ball_vy=-ball_vy;
//延時刷新
sleep(50);
voidupdateWithInput()
//與輸入有關(guān)更新
{}
//當前沒有
intmain()
startup();
//最開始初始化一次
while(1)
//游戲循環(huán)體
{
show();//先展示畫面
//然后是數(shù)據(jù)更新
updateWithoutInput();
updateWithInput();
}
return0;
}
在判斷小球到達邊界的部分,我們在第二條件中執(zhí)行了減一操作,目的是為了避免出現(xiàn)小球和邊界重合的情況。
移動擋板
接下來我們要在游戲中顯示一個中心坐標為(position_x,position_y)且半徑為ridus的擋板。用left和right表示其左邊和右邊位置。
首先定義相關(guān)變量:
intposition_x,position_y;
intridus;
intleft,right;
然后數(shù)據(jù)初始化:
position_x=high;//擋板在最底下
position_y=width/2;
ridus=5;
left=position_y-ridus;
right=position_y+ridus;
最后在輸出中添加輸出擋板的部分:
if...
elseif((i==high)(j=left)(j=right))
printf("*");
else...
既然已經(jīng)畫好了擋板,那么要能讓它移動才行。
很明顯,按照一般游戲思路來,我們不能在移動中改變x坐標,也就是說擋板只能左右移動,左移y坐標減一,右移則加一。
所以到此我們就要寫updateWithInput函數(shù)部分了。
voidupdateWithInput()
charinput;
if(kbhit())
{
input=getch();
if(input=='a')
{
position_y--;
left=position_y-ridus;
right=position_y+ridus;
}
if(input=='d')
{
position_y++;
left=position_y-ridus;
right=position_y+ridus;
}
}
}
反彈小球
反彈小球部分思路就比較清晰一些,簡單來說就是判斷當小球x坐標到達最底部時,其y坐標是不是在擋板所規(guī)定的范圍內(nèi),如果是,則改變小球速度;如果不是,游戲結(jié)束。
我們還可以定義一個ball_number來記錄小球反彈的次數(shù)。
intball_number;
//初始化
ball_number=0;
隨后來寫我們的updateWithoutInput部分:
voidupdateWithoutInput()
if(ball_x==high-1)
{
if((ball_y=left)(ball_y=right))
//被擋住
{
ball_number++;
printf("\a");
//響鈴
}else{
printf("游戲結(jié)束,因為你沒接住控制命運的小球\n");
system("pause");
exit(0);
}
}
//以后內(nèi)容同前
}
消除磚塊
我們使用字母O來表示小球了,那么用什么來表示磚塊呢?
這個時候就是看你的英語有沒有好好學,我們知道Brick是指磚塊,所以我們使用字母B來表示磚塊,畢竟B本身就像個磚塊(并沒有)。
需要定義的量:
磚塊位置得分(擊中磚塊加一)
intbrick_x,brick_y;
intscore;
//初始化
brick_x=0;
brick_y=width/2+1;
score=0;
至于輸出和判定擊中,我就不再多贅述了,基本思路還是和之前一樣,輸出部分加一句elseif就可以了,而擊中判定在updateWithoutInput里。
小結(jié)
上代碼?。。。。?!
#includestdio.h
#includestdlib.h
#includeconio.h
#includecwindow.h
//全局變量
intwidth,high;
//游戲界面尺寸
intball_x,ball_y;
//小球坐標
intball_vx,ball_vy;
//小球速度
intposition_x,position_y;
intridus;
intleft,right;
intball_number;
intbrick_x,brick_y;
intscore;
voidgotoxy(intx,inty)
//移動光標便于清屏重畫
HANDLEhandle=GetStdHandle(STD_UOTPUT_HANDLE);
CROODpos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
voidstartup()
//數(shù)據(jù)初始化
high=15;
width=20;
ball_x=0;
ball_y=width/2;
ball_vx=1;
ball_vy=1;
position_x=high;//擋板在最底下
position_y=width/2;
ridus=5;
left=position_y-ridus;
right=position_y+ridus;
ball_number=0;
brick_x=0;
brick_y=width/2+1;
score=0;
voidshow()
//顯示界面
gotoxy(0,0);
//光標移動到原點便于重畫
inti,j;
for(i=0;ihigh;i++)
{
for(j=0;jwidth;j++)
{
if((i==ball_x)(j==ball_y))
printf("O");//輸出小球
elseif((i==brick_x)(j==brick_y))
printf("B");//輸出磚塊
elseif(j==width)
//到達右邊界
printf("|");//輸出邊界
elseif((i==high)(j=left)(j=right))
printf("*");//輸出擋板
elseif(i==high)
//到達下邊界
printf("-");//輸出邊界
else
printf("");//非小球坐標輸出空格
}
printf("\n");
}
printf("反彈小球:%d\n",ball_number);
printf("得分:%d\n",score);
voidupdateWithoutInput()
//與輸入無關(guān)更新
if(ball_x==high-1)
{
if((ball_y=left)(ball_y=right))
//被擋住
{
ball_number++;
printf("\a");
//響鈴
}else{
//沒擋住
printf("游戲結(jié)束,因為你沒接住控制命運的小球\n");
system("pause");
exit(0);
}
}
ball_x=ball_x+ball_vx;
ball_y=ball_y+ball_vy;
//判斷是否到達邊界
if((ball_x==0)||(ball_x==high-1))
ball_vx=-ball_vx;
if((ball_y==0)||(ball_y==width-1))
ball_vy=-ball_vy;
//判定擊中
if((ball_x==brick_x)(ball_y==brick_y))
{
score++;
brick_y=rand()%width;//磚塊刷新
}
//延時刷新
sleep(50);
voidupdateWithInput
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 特色美食街餐飲店長期租賃合同
- 智能制造企業(yè)代理記賬與成本控制協(xié)議模板
- 低鉀血癥護理常規(guī)
- 不同皮膚類型科學護理指南
- 急性分娩護理常規(guī)
- 各種句式-2023年中考英語高頻易錯點解題技巧
- 高中物理專項復習:電場力的性質(zhì)
- 《建筑工程深厚軟土地層基坑施工監(jiān)測技術(shù)規(guī)范》征求意見稿
- 海倫凱勒人物介紹模板1
- 2025屆高三英語基礎寫作之建議信:如何對他人的求助說不課件共18張
- 問卷調(diào)查設計及研究方法(浙江大學)知到智慧樹章節(jié)答案
- 廣東省廣州市南沙區(qū)南外實驗學校2022-2023學年七年級上學期期中考試英語試題(原卷版+解析)
- 火鍋店餐廳管理制度
- 道化學(火災爆炸危險指數(shù)評價法)
- 消防工程火災自動報警及聯(lián)動控制系統(tǒng)施工
- 2024年江西省高考地理試卷真題(含答案)
- 《絲綢服飾文化》課件-第一講絲綢的起源與發(fā)展
- 安全文明施工措施費(終版)
- 2021年湖南省普通高中學業(yè)水平考試數(shù)學試卷及答案
- DL-T5588-2021電力系統(tǒng)視頻監(jiān)控系統(tǒng)設計規(guī)程
- 四川省成都市 2024年高一下數(shù)學期末考試試題含解析
評論
0/150
提交評論