計(jì)算機(jī)技術(shù)基礎(chǔ)(c語(yǔ)言)課程設(shè)計(jì)---簡(jiǎn)單的彈球得分游戲_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論