




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C語言實(shí)現(xiàn)簡單彈跳小球本文實(shí)例為大家分享了C語言實(shí)現(xiàn)簡單彈跳小球的具體代碼,供大家參考,具體內(nèi)容如下
本節(jié)利用printf函數(shù)實(shí)現(xiàn)一個(gè)在屏幕上彈跳的小球,內(nèi)容簡單容易入門,這也是以后我們在設(shè)計(jì)更多游戲中可能用到的東西。
繪制靜止的小球
我們將以如圖坐標(biāo)系進(jìn)行游戲,即以窗口左上角為原點(diǎn)。
我們希望在坐標(biāo)(x,y)處顯示靜止的小球:
#includestdio.h
intmain(){
inti,j;//這兩個(gè)量是循環(huán)中要使用的,一定先聲明
intx=5;
inty=10;
//輸出小球上方空行【x坐標(biāo)】
for(i=0;ii++)
printf("\n");
//輸出小球左邊的空格【y坐標(biāo)】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
return0;
}
隨后我們可以將此文件命名為ball.c
再使用GCC編譯:
gccball.c-oball.out
可以直接用cc來代替gcc
-oball.out表示輸出文件為ball.out
當(dāng)然可以不寫這些,輸出會成為a.out
如果是Windows系統(tǒng),會輸出exe文件
這里是我編譯成功的結(jié)果:
里面的CGame.c是源文件,而那個(gè)綠油油的ball.out就是編譯輸出的文件。
然后運(yùn)行它就可以了。
小球下落
如何讓小球下落?根據(jù)我們之前規(guī)定的坐標(biāo)系,可以知道只需讓小球x坐標(biāo)不斷增加即可。但我們同時(shí)不想讓每個(gè)x坐標(biāo)上都留著原來的小球,所以需要使用清屏函數(shù)system(cls)
注意要包含頭文件stdlib.h
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=10;
for(x=1;xx++)
{
system("cls");//每次循環(huán)先清屏
//輸出小球上方空行【x坐標(biāo)】
for(i=0;ii++)
printf("\n");
//輸出小球左邊的空格【y坐標(biāo)】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
}
return0;
}
同樣我們編譯、運(yùn)行。
上下彈跳的小球
接下來,我們要在上一步代碼的基礎(chǔ)上增加一個(gè)記錄小球速度的變量velocity從而把小球的下落從簡單的循環(huán)改為小球坐標(biāo)x=x+velocity,當(dāng)速度為正值時(shí)小球下落(x坐標(biāo)增加),反之小球上升(x坐標(biāo)減小)。
#includestdio.h
#includestdlib.h
intmain(){
inti,j;//這兩個(gè)量是循環(huán)中要使用的,一定先聲明
intx=5;
inty=10;
intheight=20;//邊界高度,到達(dá)邊界時(shí)改變方向
intvelocity=1;
while(1){
x=x+velocity;
system("cls");//每次循環(huán)先清屏
//輸出小球上方空行【x坐標(biāo)】
for(i=0;ii++)
printf("\n");
//輸出小球左邊的空格【y坐標(biāo)】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
if(x==height)
//到達(dá)下邊界
velocity=-velocity;//下落改為上升
if(X==0)
//到達(dá)上邊界
velocity=-velocity;//上升改為下落
}
return0;
}
注意這里是個(gè)死循環(huán),小球不斷在x=0到x=20中間上下彈跳,并且保持恒定速度。
斜方向彈跳
既然已經(jīng)實(shí)現(xiàn)了上下彈跳,那么如何實(shí)現(xiàn)斜方向彈跳呢?
這只是很簡單的速度合成而已,我們上一步已經(jīng)使用velocity來表示小球在x方向的速度了,那么我們只要再加一個(gè)y方向的速度即可。
用什么來表示呢?speed
一定注意,為了確保代碼可讀性,也就是說讓別人好接手的情況下,注釋是一方面,變量命名也是很重要的一方面。
我們可以使用velocity_x表示x方向速度,用velocity_y表示y方向速度。
那么速度控制就會變成:到達(dá)上、下邊界改變x速度(即velocity_x的符號),到達(dá)左、右邊界改變y速度(即velocity_y的符號)。
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=5;
intvelocity_x=1;
intvelocity_y=1;
intleft=0;//左邊界坐標(biāo)
intright=20;//右邊界坐標(biāo)
inttop=0;//上邊界坐標(biāo)
intbottom=10;//下邊界坐標(biāo)
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");//每次循環(huán)先清屏
//輸出小球上方空行【x坐標(biāo)】
for(i=0;ii++)
printf("\n");
//輸出小球左邊的空格【y坐標(biāo)】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
if((x==top)||(x==bottom))
velocity_x=-velocity_x;
if((y==left)||(y==right))
velocity_y=-velocity_y;
}
return0
}
然后你就可以得到一個(gè)十分鬼畜(事實(shí)如此)的小球彈跳動畫了。
控制小球彈跳速度
我們剛才說過,編譯之后運(yùn)行我們會得到一個(gè)十分鬼畜的小球彈跳動畫,那么為了減緩這個(gè)動畫的刷新速度(至少不會快到抽象),我們將使用sleep函數(shù)來在每個(gè)循環(huán)建立一個(gè)暫停機(jī)制。
sleep(50);//表示到達(dá)此處程序暫停50ms
小結(jié)
完整代碼:
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=5;
intvelocity_x=1;
intvelocity_y=1;
intleft=0;//左邊界坐標(biāo)
intright=20;//右邊界坐標(biāo)
inttop=0;//上邊界坐標(biāo)
intbottom=10;//下邊界坐標(biāo)
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");//每次循環(huán)先清屏
//輸出小球上方空行【x坐標(biāo)】
for(i=0;ii++)
printf("\n");
//輸出小球左邊的空格【y坐標(biāo)】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
sleep(50);
//到達(dá)此處程序暫停50ms
if((x==top)||(x==bottom))
velocity_x=-velocity_x;
if((y==left)||(y==right))
velocity_y=-vel
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆遼寧省丹東市第五中學(xué)八年級物理第二學(xué)期期末教學(xué)質(zhì)量檢測試題含解析
- 2025屆甘南市重點(diǎn)中學(xué)八年級物理第二學(xué)期期末調(diào)研試題含解析
- 2025年江蘇泰州市罡楊科技工業(yè)園區(qū)發(fā)展有限公司招聘筆試參考題庫含答案解析
- 浙江全國計(jì)算機(jī)三級題庫單選題100道及答案
- 安全工程師培訓(xùn)課件
- 四川省達(dá)州市萬源中學(xué)2023-2024學(xué)年高二上學(xué)期期中物理 無答案
- 浙江省2023-2024學(xué)年高二下學(xué)期3月四校聯(lián)考數(shù)學(xué)試題 無答案
- 星巴克VI設(shè)計(jì)系統(tǒng)解析
- 從理論到實(shí)踐主管護(hù)師考試試題及答案
- 文明沖突與文化認(rèn)同試題及答案
- 《飛越瘋?cè)嗽骸冯娪百p析
- 《建筑結(jié)構(gòu)抗震設(shè)計(jì)》全套課件
- 農(nóng)業(yè)綜合執(zhí)法大比武測試題
- 2024年高考?xì)v史復(fù)習(xí)試題匯編:材料分析題匯編(中國史+世界史)(教師卷)
- 廠區(qū)圍墻翻新施工方案
- 山東省青島市2024年小升初語文真題試卷及答案
- 農(nóng)村房修建合同范本
- JT-T-1230-2018機(jī)動車發(fā)動機(jī)冷卻液無機(jī)陰離子測定法離子色譜法
- GB/T 2039-2024金屬材料單軸拉伸蠕變試驗(yàn)方法
- 跨界產(chǎn)品研發(fā)與實(shí)戰(zhàn)智慧樹知到期末考試答案章節(jié)答案2024年深圳職業(yè)技術(shù)大學(xué)
- 任務(wù)三 撰寫直播腳本-活動2 商品直播腳本
評論
0/150
提交評論