版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 計(jì)算機(jī)技術(shù)基礎(chǔ)(C語(yǔ)言)</p><p><b> 課程設(shè)計(jì)</b></p><p><b> 選題背景:</b></p><p> 該游戲程序是一個(gè)集休閑,娛樂(lè)為一身的游戲程序。能在緊張的學(xué)習(xí)和工作之余,給你一個(gè)輕松大腦和身體的空間,讓你體會(huì)到在游戲中鍛煉大腦思維的樂(lè)趣。同時(shí)游戲該程序也給你一
2、個(gè)創(chuàng)造新思路,發(fā)展新思維的新途徑。</p><p> 游戲的目的也很簡(jiǎn)單,就是讓彈球在游戲區(qū)中盡可能少的彈碰,并根據(jù)球停止點(diǎn)離左邊強(qiáng)的距離來(lái)計(jì)算你所獲得的積分。</p><p><b> 二、設(shè)計(jì)思想:</b></p><p> 用比較常見(jiàn)的函數(shù)以及部分繪圖函數(shù)來(lái)實(shí)現(xiàn)游戲的界面的制作。其運(yùn)用Bioskey()函數(shù)來(lái)設(shè)定鍵盤(pán)上左右鍵的功能,
3、該程序中還定義了SPORT()函數(shù)來(lái)進(jìn)行該游戲的主要運(yùn)算記分過(guò)程,另外還定義了其他幾個(gè)函數(shù)來(lái)實(shí)現(xiàn)該程序的其他運(yùn)行部分。</p><p><b> 三.程序流程圖</b></p><p><b> N</b></p><p><b> Y</b></p><p><b
4、> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b>
5、 Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> N </p><p><b> N</b></p><p><b> Y</
6、b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b>
7、</p><p><b> N</b></p><p><b> Y</b></p><p><b> 四、程序清單</b></p><p> #include "stdio.h"</p><p> #include &qu
8、ot;conio.h"</p><p> #include "graphics.h"</p><p> #define closegr closegraph</p><p> #define VK_RIGHT 0x4d00 /*右鍵*/</p><p> #define VK_LEFT 0x4b0
9、0 /*左鍵*/</p><p> struct qiu /*記錄球的位置*/</p><p><b> { int x;</b></p><p><b> int y;</b></p><p> int length; /*球離右邊墻的距離*/</p><
10、p> int time; /*磁盤(pán)文件中記錄的個(gè)數(shù)*/</p><p> int ci; /*記錄碰墻的次數(shù)*/</p><p> int zonghe; /*綜合成績(jī)*/</p><p><b> }place;</b></p><p> typedef int defen;</p&g
11、t;<p> typedef struct files</p><p> { defen data;</p><p> struct files *next;</p><p><b> }ffile;</b></p><p> int Initiate(ffile **h) /*初始化鏈表
12、*/</p><p> { if((*h=(ffile *)malloc(sizeof(ffile)))==NULL) return 0;</p><p> (*h)->next=NULL; </p><p><b> return 1;</b></p><p><b> }</b
13、></p><p> void initgr(void) /* BGI初始化 */</p><p> {int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同樣效果 */</p><p> initgraph(&gd,&gm,"");</p><p><
14、b> }</b></p><p> int key() /*左右鍵功能函數(shù)*/</p><p> { int key,number=0,n;</p><p><b> for(;;)</b></p><p> { if(bioskey(1)) /*
15、判斷是否有鍵按下*/</p><p> { key=bioskey(0); /*取鍵值*/</p><p> if(key==VK_RIGHT) /*如果按下右鍵*/</p><p> number=number+2;</p><p> if(number>=200)</p><p>
16、number=200;</p><p> setlinestyle(0,0,3);</p><p> setcolor(14); /*力量槽*/</p><p> line(number+150,getmaxy()-49,number+150,getmaxy()-11);</p><p><b> }</b&g
17、t;</p><p> if(key==VK_LEFT)</p><p> { setcolor(1);</p><p> for(n=152;n<=number+150;n++)</p><p> line(n,getmaxy()-49,n,getmaxy()-11);</p><p> return
18、(number);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> ball() /*畫(huà)小球*/</p><p><b> { int i;
19、</b></p><p> for(i =8;i>=0;i--)</p><p> { setcolor(i + 7);</p><p> circle(place.x,place.y,i); }</p><p><b> }</b></p><p> dis
20、() /*消去小球*/</p><p> { int i;</p><p> for(i =8;i>=0;i--)</p><p> { setcolor(1);</p><p> circle(place.x,place.y,i);</p><p><b> }</b&g
21、t;</p><p><b> }</b></p><p> int paixu(ffile *h) /*將當(dāng)前成績(jī)與歷史成績(jī)比較并排序,然后一起存入鏈表*/</p><p> {ffile *p,*q,*t;</p><p><b> int j=1;</b></p>&
22、lt;p> float length;</p><p> void *size;</p><p> p=h->next;</p><p><b> q=h;</b></p><p> place.length=getmaxx()-100-place.x; /*球停下后離右邊墻的距離*/</
23、p><p> length=place.length;</p><p> place.zonghe=place.ci*5+(1-(length-8)/400)*80;/*綜合成績(jī)(綜合考慮了距離和碰墻數(shù))*/</p><p> setfillstyle(SOLID_FILL,1);</p><p> floodfill(155,30,3)
24、;</p><p> sprintf(size,"%d",place.length);</p><p> outtextxy(155,30,size);</p><p> while(p!=NULL)</p><p> { if(place.zonghe<p->data)</p><
25、;p><b> { q=p;</b></p><p> p=p->next;</p><p><b> j++;</b></p><p><b> }</b></p><p> if(place.zonghe>=p->data)</p&g
26、t;<p> { if((t=(ffile *)malloc(sizeof(ffile)))==NULL) return 0;</p><p> t->data=place.zonghe;</p><p> t->next=q->next;</p><p> q->next=t;</p><p>
27、; place.time++;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> return(j); /*返回本次成績(jī)?cè)跉v史中排名*/</p><p&
28、gt;<b> }</b></p><p> sport() /*小球運(yùn)動(dòng)功能*/</p><p> {int oldx=0; /*記錄先前的位置*/</p><p> float v; /*設(shè)定初始速度*/</p><p><b> int n=0;</b&
29、gt;</p><p> float k=0; /*摩擦系數(shù)*/</p><p><b> int m=1;</b></p><p><b> int km;</b></p><p> void *speedx; /*速度*/</p><p> pl
30、ace.ci=0;</p><p> v=10000-50*key(); /*初始速度*/</p><p><b> dis() ;</b></p><p> while(v<10000&&!kbhit())</p><p> { if((oldx<place.x&&
31、amp;place.x<(getmaxx()-109))||(place.x==110))</p><p> { if(place.x==110)</p><p> {place.ci++; /*記錄碰墻次數(shù)*/</p><p> setcolor(13);</p><p> setfillstyle(SOLID_FILL
32、,1);</p><p> floodfill(375,30,3);</p><p> sprintf(speedx,"%d",place.ci);</p><p> outtextxy(375,30,speedx);</p><p><b> }</b></p><p&g
33、t;<b> n=0;</b></p><p><b> }</b></p><p> if((oldx>place.x&&place.x>110)||(place.x==(getmaxx()-109)))</p><p> { if(place.x==(getmaxx()-109) )
34、</p><p> {place.ci++;</p><p> setcolor(13);</p><p> setfillstyle(SOLID_FILL,1);</p><p> floodfill(375,30,3);</p><p> sprintf(speedx,"%d",pla
35、ce.ci);</p><p> outtextxy(375,30,speedx); }</p><p><b> n=1;</b></p><p><b> }</b></p><p> oldx=place.x;</p><p><b> switc
36、h(n)</b></p><p> { case 0:</p><p> place.x=place.x+1;</p><p><b> break;</b></p><p><b> case 1:</b></p><p> place.x=pla
37、ce.x-1;</p><p><b> break;</b></p><p><b> }</b></p><p><b> ball();</b></p><p><b> k=k+0.01;</b></p><p>
38、 v=v+(int)k;</p><p><b> delay(v);</b></p><p> setcolor(13);</p><p> km=(10000-v)/50;</p><p> setfillstyle(SOLID_FILL,1);</p><p> floodfill
39、(455,30,3);</p><p> sprintf(speedx,"%d",km);</p><p> outtextxy(455,30,speedx);</p><p><b> dis();</b></p><p><b> }</b></p>&
40、lt;p><b> }</b></p><p> void showHZ(int x,int y,unsigned char color, char *str) /*漢字顯示功能*/</p><p> { int num=strlen(str),i,a,b,xx=x;</p><p> FILE *stream;</
41、p><p> unsigned char bit[8]={128,64,32,16,8,4,2,1}, bitdata[32];</p><p> if((stream=fopen("hzk16","rb"))==NULL)</p><p> { printf("Open hzk16 error!\n&qu
42、ot;);</p><p><b> exit(0) ;</b></p><p><b> }</b></p><p> for(i=0;i<num;i+=2)</p><p> { long fops=32L*(((unsigned char)str[i]-161)*94+((un
43、signed char)str[i+1]-161));</p><p> fseek(stream,fops,SEEK_SET);</p><p> fread(bitdata,32,1,stream);</p><p> for(a=0;a<16;a++)</p><p> for(b=0;b<8;b++)</p&
44、gt;<p> { if(bitdata[2*a]&bit[b])</p><p> putpixel(xx+b,a+y,color);</p><p> if(bitdata[2*a+1]&bit[b])</p><p> putpixel(xx+8+b,a+y,color);</p><p><
45、b> }</b></p><p><b> xx+=16;</b></p><p><b> }</b></p><p> fclose(stream);</p><p><b> return;</b></p><p>&l
46、t;b> }</b></p><p> void cls(int x1,int y1,int x2,int y2) /*清屏*/</p><p> { int j;</p><p> for(j=y1;j<y2;j++)</p><p> { setcolor(0);</p&g
47、t;<p> line(x1,j,x2,j);</p><p><b> }</b></p><p> setcolor(WHITE);</p><p><b> return;</b></p><p><b> }</b></p><
48、;p><b> main()</b></p><p><b> { int px;</b></p><p><b> void *si;</b></p><p> ffile **l;</p><p> Initiate(*l);</p><
49、p><b> initgr();</b></p><p> setbkcolor(1); /*繪制窗體*/</p><p> setcolor(0);</p><p> rectangle(0,0,getmaxx(),getmaxy());</p><p> rectangle(1,1,ge
50、tmaxx()-1,getmaxy()-1);</p><p> setcolor(8);</p><p> setfillstyle(SOLID_FILL,4);</p><p> rectangle(20,2,100,getmaxy()-2);</p><p> rectangle(getmaxx()-20,2,getmaxx()
51、-100,getmaxy()-2);</p><p> floodfill(21,3,8);</p><p> floodfill(getmaxx()-99,3,8);</p><p> setcolor(3);</p><p> rectangle(150,getmaxy()-50,352,getmaxy()-10); /*力量條
52、*/</p><p> setcolor(3);</p><p> setlinestyle(0,0,3);</p><p> rectangle(450,20,500,50);</p><p> rectangle(370,20,420,50);</p><p> rectangle(150,20,200,
53、50);</p><p> setcolor(YELLOW);</p><p> outtextxy(455,30,"SPEED"); /*顯示速度*/</p><p> outtextxy(375,30,"BUMP"); /*顯示碰墻次數(shù)*/</p><p> outtextxy(155
54、,30,"DIS"); /*顯示距離*/</p><p> place.x=120; /*設(shè)定小球初始位置*/</p><p> place.y=240;</p><p> setlinestyle(0,0,1);</p><p> ball(); /*調(diào)用函數(shù)*/</p><p&
55、gt;<b> sport();</b></p><p> ball(); </p><p> diaofile(l);</p><p> px=paixu(l);</p><p><b> save(l);</b></p><p&
56、gt;<b> getch();</b></p><p> cls(0,0,640,480);</p><p> setcolor(13);</p><p> showHZ(260,150,13,"綜合評(píng)分:");</p><p> sprintf(si,"%d",pla
57、ce.zonghe);</p><p> outtextxy(350,155,si);</p><p><b> getch();</b></p><p> closegr();</p><p><b> }</b></p><p> 五、主要解決問(wèn)題的方法及技術(shù)關(guān)
58、鍵</p><p><b> 主要問(wèn)題及解決方法</b></p><p><b> A、 圖形的繪制</b></p><p> 用if語(yǔ)句和while(!kbhit())來(lái)實(shí)現(xiàn)循環(huán),用預(yù)編譯命令引進(jìn)庫(kù)函數(shù)并通過(guò)initgraph初始化圖形系統(tǒng)。利用setcolor()函數(shù)去實(shí)現(xiàn)游戲界面色彩的設(shè)置。而且還運(yùn)用了outt
59、extxy()函數(shù)在屏幕上指定位置輸出字符串。此外還有Rectangle()來(lái)實(shí)現(xiàn)游戲界面上的矩形繪制,SetBkColor為指定的設(shè)備場(chǎng)景設(shè)置背景顏色,而且還用floodfill()當(dāng)前選定的刷子在指定的設(shè)備場(chǎng)景中填充一個(gè)區(qū)域,區(qū)域是由顏色crColor定義的,各種函數(shù)的應(yīng)用完善了游戲的界面效果。</p><p><b> 多次調(diào)用函數(shù)</b></p><p>
60、 在主函數(shù)執(zhí)行過(guò)程中不斷的調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)或者自定義函數(shù),使一個(gè)復(fù)雜的游戲程序看起來(lái)?xiàng)l理十分的清晰,明白。</p><p><b> 技術(shù)關(guān)鍵</b></p><p><b> 得分的計(jì)算過(guò)程</b></p><p><b> 游戲界面的繪制</b></p><p><
61、;b> 靈活調(diào)用函數(shù)</b></p><p><b> 六、設(shè)計(jì)結(jié)果說(shuō)明</b></p><p><b> 設(shè)計(jì)優(yōu)點(diǎn):</b></p><p> 游戲畫(huà)面色彩鮮明,線(xiàn)條結(jié)構(gòu)清晰,且程序簡(jiǎn)單。多個(gè)函數(shù)的調(diào)用使主函數(shù)看起來(lái)變得非常簡(jiǎn)單。</p><p><b> 2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--尋寶游戲
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--簡(jiǎn)單潛艇大戰(zhàn)
- 計(jì)算機(jī)語(yǔ)言c#課程設(shè)計(jì)--彈球游戲
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--計(jì)算器
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--模擬銀行打印
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)---用c語(yǔ)言描繪玫瑰花
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--花店經(jīng)營(yíng)管理系統(tǒng)
- 計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)--小蟲(chóng)子挖隧道
- 課程設(shè)計(jì)-計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)小蟲(chóng)子挖隧道設(shè)計(jì)
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)---解救人質(zhì)游戲
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)---路邊吃數(shù)游戲
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)---簡(jiǎn)單的加減乘除運(yùn)算
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)---黑白棋
- 課程設(shè)計(jì)---計(jì)算機(jī)語(yǔ)言c#課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)---計(jì)算機(jī)軟件
- 計(jì)算機(jī)c語(yǔ)言課程設(shè)計(jì)--鼠標(biāo)控制
- 計(jì)算機(jī)技術(shù)基礎(chǔ)2
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)--簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論