版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p><b> 成都工業(yè)學院</b></p><p><b> 課程設計報告</b></p><p> 成都工業(yè)學院·計算機工程學院</p><p> 課程名稱程序設計基礎課程設計</p><p> 項目名稱俄羅斯課程設計</p><p> 姓
2、 名曾浩然</p><p> 班 級1405012</p><p> 學 號2013511139</p><p> 指導教師劉亞飛</p><p> 設計時間2017年 5月 12日 至 2017年 5月18 日</p><p><b> 目錄</b></p><
3、;p><b> 目錄i</b></p><p><b> 摘要I</b></p><p><b> 序言II</b></p><p> 人員分工安排III</p><p><b> 1、需求分析1</b></p>&
4、lt;p> 1.1游戲方塊需求1</p><p> 1.2游戲控制的需求1</p><p><b> 2、設計思路2</b></p><p><b> 2.1方塊:2</b></p><p> 2.2主要操作:2</p><p><b>
5、 3、詳細設計4</b></p><p> 3.1設計流程圖4</p><p> 3.2函數(shù)功能圖 5</p><p> 4、運行調(diào)試與分析討論6</p><p><b> 4.1游戲界面6</b></p><p> 5、設計體會與小結(jié)8</p>
6、<p><b> 摘要</b></p><p> 近年來,隨著游戲產(chǎn)業(yè)的突飛猛進,游戲玩家的技術(shù)也是與日俱增, 當你看見游戲高手完美的表演時,你是否想過我也能達到那種水平,本程序采用全世界最金典的游戲—俄羅斯方塊作為背景,程序設置了鍵盤選擇方式,游戲運行時隨著等級的提高而速度加快,這需要玩家快速操作。因此,本程序主要意義是為高手玩家提供訓練平臺。其次也可為剛踏入游戲領域的新手們
7、,提供一個很好的鍛煉機會。本次課程設計主要解決利用C語言設計實現(xiàn)俄羅斯方塊游戲的算 法、游戲內(nèi)部功能、游戲區(qū)域的繪圖的程序設計。對于每個俄羅斯方塊各自的形態(tài)變化改變到下一個形態(tài)利用數(shù)組來實現(xiàn),在程序設計中,直接從架構(gòu)的其中一個類對象中繼承下來,將它完善而變成有某功能特性的物件對象。</p><p> 關鍵詞: 俄羅斯方塊 數(shù)組 數(shù)據(jù)結(jié)構(gòu) 算法</p><p><b> 序言&
8、lt;/b></p><p> 俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾造成的 轟動與造成的經(jīng)濟價值可言說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶飯不思不想的那個俄羅斯方塊時代。俄羅斯方塊最早還是出現(xiàn)在PC機上,而我國的用戶都是通過紅白機了解、喜歡上它的?,F(xiàn)在聯(lián)眾又將重新掀
9、起這股讓人沉迷的俄羅斯方塊風潮。對于一般用戶來說,它的規(guī)則簡單,容易上手,且游戲過程變化無窮,俄羅斯方塊游戲現(xiàn)在基本上是每個手機必備的游戲,種類千變?nèi)f化,多種多樣俄羅斯方塊是個老幼皆宜的小游戲,是經(jīng)久不衰的一款游戲,自從它誕生 那天起就一直深受人們的喜愛。幾乎每個人都玩過這個游戲,也是人們接觸最多的一款游戲,它實現(xiàn)由四塊正方形的色塊組成,然后存儲在一個數(shù)組的四個元素中,計算機隨機產(chǎn)生不同七種類型的方塊,根據(jù)計算機時鐘控制它在一定的時間不
10、停得產(chǎn)生,用戶根據(jù)鍵盤的四個方向翻轉(zhuǎn)、向左、向右和向下操作,(控制鍵的實現(xiàn)是由鍵盤的方向鍵實現(xiàn))。然后程序根據(jù)這七種方塊堆疊成各種不停得模型,可以吸引更多的小玩家,讓人覺得更加的有趣,</p><p><b> 人員分工安排</b></p><p> (1)小組負責人: 曾浩然 </p><p><b&
11、gt; 分工: 調(diào)試與檢查</b></p><p> (2)小組成員1: 曾浩然 </p><p><b> 分工:界面設計</b></p><p> ?。?)小組成員2: 曾浩然 </p><p> 分工:方塊的設計與變形</p>
12、;<p><b> 1、需求分析</b></p><p><b> 1.1游戲方塊需求</b></p><p> 隨機給出不同的形狀(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當達到一定的分數(shù)時,過關.</p><p> 1.2游戲控制的需求&
13、lt;/p><p> 游戲控制分為多個方面,包括畫面繪制,控制命令的獲取,控制命令的分配、控制命令的處理,方塊的繪制,方塊的移動,方塊的旋轉(zhuǎn),方塊下落和消層以及計分等。</p><p><b> 2、設計思路</b></p><p> 方塊要實現(xiàn)變形,要能通過鍵盤接收變形指令(即上鍵),將所得信號傳遞給信號接收函數(shù),再通過信號處理函數(shù)改變當前
14、方塊的ID值,最后根據(jù)新的ID值畫出新的圖形,此時即實在了方塊的變形。</p><p><b> 2.1方塊:</b></p><p> 每個方塊都要記錄自己的ID、形狀。形狀采用4對整數(shù)坐標來表示,分別記錄其4個小方塊的相對位置(以方塊內(nèi)或旁邊任一點為中心,稱為參考點)。建議可以在方塊類中定義一個或多個數(shù)組,將每種ID的方塊的形狀數(shù)據(jù)存儲好(都是一些固定的數(shù)據(jù))
15、,這樣產(chǎn)生一個方塊時只需要提供其ID即可。為了處理方塊的旋轉(zhuǎn),我們不能只記錄上述。7種方塊,而應該把它們旋轉(zhuǎn)后產(chǎn)生的每種形狀都認為是一種不同的方塊(因為它們的4對坐標都不同),然后在方塊ID之間建立映射關系,即哪種ID的方塊旋轉(zhuǎn)后變成哪種ID的方塊,只要求處理一個方向的旋轉(zhuǎn)。這個映射關系也可以用c數(shù)組來實現(xiàn)。此外,方塊還要記錄自己的參考點在指定的游戲區(qū)域中的位置。</p><p><b> 2.2主要
16、操作:</b></p><p> 填充:把自己填充到指定的游戲區(qū)域中。返回填充成功或失敗的信息。</p><p> 清除:把自己從指定的游戲區(qū)域中清除。</p><p> 移動:在指定的游戲區(qū)域中移動,包括向左、右、下移動,以1個單元格為單位。如果可以移動,則修改參考點的位置,并在指定的游戲區(qū)域中重新填充自己(先清除、然后修改參考點位置,再填充)。
17、返回是否移動成功的信息。</p><p> 旋轉(zhuǎn):在指定的游戲區(qū)域中旋轉(zhuǎn)一次,此時參考點位置不變,但要改變自己的ID,然后在指定的游戲區(qū)域中重新填充自己(先清除、然后修改參考點位置,再填充)。</p><p><b> 資 數(shù)</b></p><p><b> 源 據(jù)</b></p><p&g
18、t;<b> 消息控制信息</b></p><p><b> 顯 數(shù)</b></p><p><b> 示 據(jù)</b></p><p><b> 3-1 設計思路圖</b></p><p><b> 3、詳細設計</b&g
19、t;</p><p><b> 3.1設計流程圖</b></p><p><b> 否</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 3-1設計流程
20、圖</b></p><p> 3.2函數(shù)功能圖 </p><p><b> 3-2函數(shù)功能圖</b></p><p> 4、運行調(diào)試與分析討論</p><p><b> 4.1游戲界面</b></p><p> 圖4-1 游戲開始界面</p>
21、;<p> 圖4-2游戲運行界面</p><p> 圖4-3游戲結(jié)束界面</p><p><b> 5、設計體會與小結(jié)</b></p><p> 本次課程設計,用c語言實現(xiàn)了一個簡易的俄羅斯方塊游戲。了解了c語言的強大特性,游戲是在速度上的高效性,是其他編程語言無法企及的。需求分析,概要設計,詳細設計在編程中的重要性是不言
22、而喻的。正確、高效的分析、設計為后面的編程打下了堅實的基礎,后面的工作就順利成章了。當然,在需求分析、概要設計、詳細設計階段是需要通過不斷的討論、論證來對項目進行更改的代碼實現(xiàn)階段就是軟件的具體實現(xiàn),通過編碼來實現(xiàn)需求中的功能。在代碼實現(xiàn)階段可能會遇到各種問題,此時有可能就要對需求設計乃至需求分析進行更改。測試階段同樣重要。在本次軟件設計中,在測試階段就發(fā)現(xiàn)了游戲測試錯誤問題。后來想到了通過修改程序</p><p&g
23、t; for(j=0;j<3;j++)</p><p><b> {</b></p><p> if(l[i][j]==1)</p><p><b> {</b></p><p> gotoxy(x+j,y+i);</p><p> printf("
24、;%c",TUAN);</p><p><b> }</b></p><p><b> else</b></p><p><b> continue;</b></p><p><b> }</b></p><p>
25、<b> }</b></p><p><b> }</b></p><p> void _L(int x,int y) //摸去該方塊</p><p><b> {</b></p><p><b> int i,j;</b></p&g
26、t;<p> for(i=0;i<3;i++)</p><p><b> {</b></p><p> for(j=0;j<3;j++)</p><p><b> {</b></p><p> if(l[i][j]==1)</p><p>
27、<b> {</b></p><p> gotoxy(x+j,y+i);</p><p> printf(" ");</p><p><b> }</b></p><p><b> {</b></p><p> if(l[
28、i][j]==1)</p><p><b> {</b></p><p> if(biaoji[y+i+1][x+j]==1)</p><p><b> d=1;</b></p><p><b> }</b></p><p><b>
29、 }</b></p><p><b> }</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> {</b></p><p><b> L(x,y);</b></p><p><b&
30、gt; break;</b></p><p><b> }</b></p><p><b> y++;</b></p><p><b> L(x,y);</b></p><p><b> break;</b></p>&
31、lt;p><b> }</b></p><p> Sleep(25);</p><p><b> _L(x,y);</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> {</b></p><p&
32、gt;<b> y--;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
33、t;p> for(i=0;i<3;i++)</p><p><b> {</b></p><p> for(j=0;j<3;j++)</p><p><b> {</b></p><p> if(l[i][j]==1)</p><p><b&
34、gt; {</b></p><p> biaoji[y+i][x+j]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }
35、</b></p><p> void I_move() //同 L_move</p><p><b> {</b></p><p> int x=Xmap/2-1;</p><p><b> int y=0;</b></p><p><b&g
36、t; int a,b;</b></p><p> int c,d,e,f;</p><p><b> c=0;</b></p><p><b> d=0;</b></p><p><b> e=0;</b></p><p><
37、b> y++;</b></p><p><b> O(x,y);</b></p><p> Sleep(times);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> for(j=
38、0;j<2;j++)</p><p><b> {</b></p><p> if(o[i][j]==1)</p><p><b> {</b></p><p><b> c=i;</b></p><p><b> if(j&g
39、t;=e)</b></p><p><b> e=j;</b></p><p> if(biaoji[y+i+1][x+j]==1)</p><p><b> d=1;</b></p><p><b> }</b></p><p>&
40、lt;b> }</b></p><p><b> }</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> break;</b></p><p><b> _O(x,y);</b></p>
41、<p> while(_kbhit()==1)</p><p><b> {</b></p><p><b> f=0;</b></p><p> key=keydown();</p><p> switch(key)</p><p><b>
42、 {</b></p><p> case LEFT:</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> for(j=0;j<2;j++)</p><p><b> {</b></
43、p><p> if(o[i][j]==1)</p><p><b> {</b></p><p> if(biaoji[y+i][x+j-1]==1)</p><p><b> f=1;</b></p><p><b> }</b></p&g
44、t;<p><b> }</b></p><p><b> }</b></p><p> if(x-1==0 || f==1)</p><p><b> {</b></p><p><b> O(x,y);</b></p>
45、;<p><b> break;</b></p><p><b> }</b></p><p><b> x--;</b></p><p><b> O(x,y);</b></p><p><b> break;</
46、b></p><p> case RIGHT:</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> for(j=0;j<2;j++)</p><p><b> {</b></p>
47、<p> if(o[i][j]==1)</p><p><b> {</b></p><p> if(biaoji[y+i][x+j+1]==1)</p><p><b> f=1;</b></p><p><b> }</b></p>&l
48、t;p><b> }</b></p><p><b> }</b></p><p> if(x+e+1==Xmap || f==1)</p><p><b> {</b></p><p><b> O(x,y);</b></p>
49、<p><b> break;</b></p><p><b> }</b></p><p><b> x++;</b></p><p><b> O(x,y);</b></p><p><b> break;</b
50、></p><p> case DOWN:</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> for(j=0;j<2;j++)</p><p><b> {</b></p>&
51、lt;p> if(o[i][j]==1)</p><p><b> {</b></p><p> if(biaoji[y+i+1][x+j]==1)</p><p><b> d=1;</b></p><p><b> }</b></p><
52、p><b> }</b></p><p><b> }</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> {</b></p><p><b> O(x,y);</b></p>
53、<p><b> break;</b></p><p><b> }</b></p><p><b> y++;</b></p><p><b> O(x,y);</b></p><p><b> break;</b&g
54、t;</p><p><b> }</b></p><p> Sleep(25);</p><p><b> _O(x,y);</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> {</b><
55、;/p><p><b> y--;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
56、</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> for(j=0;j<2;j++)</p><p><b> {</b></p><p> if(o[i][j]==1)</p>&
57、lt;p><b> {</b></p><p> biaoji[y+i][x+j]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
58、t;<b> }</b></p><p> void Z_move() //同 L_move</p><p><b> {</b></p><p> int x=Xmap/2-1;</p><p><b> int y=0;</b></p>&l
59、t;p><b> int i,j;</b></p><p> int c,d,e,f;</p><p><b> Z(x,y);</b></p><p> Sleep(500);</p><p><b> _Z(x,y);</b></p><
60、p><b> while(1)</b></p><p><b> {</b></p><p><b> c=0;</b></p><p><b> d=0;</b></p><p><b> e=0;</b></
61、p><p><b> y++;</b></p><p><b> Z(x,y);</b></p><p> Sleep(times);</p><p> for(i=0;i<3;i++)</p><p><b> {</b></p>
62、;<p> for(j=0;j<3;j++)</p><p><b> {</b></p><p> if(z[i][j]==1)</p><p><b> {</b></p><p><b> c=i;</b></p><p&
63、gt;<b> if(j>=e)</b></p><p><b> e=j;</b></p><p> if(biaoji[y+i+1][x+j]==1)</p><p><b> d=1;</b></p><p><b> }</b>&l
64、t;/p><p><b> }</b></p><p><b> }</b></p><p> if(y+c+1==Ymap || d==1)</p><p><b> break;</b></p><p><b> _Z(x,y);&l
65、t;/b></p><p> while(_kbhit()==1)</p><p><b> {</b></p><p><b> f=0;</b></p><p> key=keydown();</p><p> switch(key)</p>
66、<p><b> {</b></p><p> case LEFT:</p><p> for(i=0;i<3;i++)</p><p><b> {</b></p><p> for(j=0;j<3;j++)</p><p><b&g
67、t; {</b></p><p> if(z[i][j]==1)</p><p><b> {</b></p><p> if(biaoji[y+i][x+j-1]==1)</p><p><b> f=1;</b></p><p><b>
68、 }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(x-1==0 || f==1)</p><p><b> {</b></p><p><b> Z(x,y)
69、;</b></p><p><b> }</b></p><p><b> }</b></p><p> //此函數(shù)操作游戲進程。</p><p> void youxiguocheng()</p><p><b> {</b>&l
70、t;/p><p><b> int j;</b></p><p> int queue[2]={0,0};</p><p><b> Wall();</b></p><p> queue[0]=rand()%5+1;</p><p><b> while(1)
71、</b></p><p><b> {</b></p><p> for(j=0;j<=Xmap;j++)</p><p><b> {</b></p><p> if(biaoji[1][j]==1)</p><p><b> brea
72、k;</b></p><p><b> }</b></p><p> if(biaoji[1][j]==1)</p><p><b> break;</b></p><p> queue[1]=rand()%5+1;</p><p> switch(qu
73、eue[1])</p><p><b> {</b></p><p><b> case 1:</b></p><p> L(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b>
74、 case 2:</b></p><p> I(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> O(Xmap+4,Ymap/4+5);</p><p>
75、<b> break;</b></p><p><b> case 4:</b></p><p> Z(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> case 5:</b></
76、p><p> T(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> }</b></p><p> switch(queue[0])</p><p><b> {</b></p>
77、<p><b> case 1:</b></p><p><b> L_move();</b></p><p> xiaochu();</p><p><b> break;</b></p><p><b> case 2:</b>
78、</p><p><b> I_move();</b></p><p> xiaochu();</p><p><b> break;</b></p><p><b> case 3:</b></p><p><b> O_move(
79、);</b></p><p> xiaochu();</p><p><b> break;</b></p><p><b> case 4:</b></p><p><b> Z_move();</b></p><p> xiao
80、chu();</p><p><b> break;</b></p><p><b> case 5:</b></p><p><b> T_move();</b></p><p> xiaochu();</p><p><b> b
81、reak;</b></p><p><b> }</b></p><p> queue[0]=queue[1];</p><p> switch(queue[1])</p><p><b> {</b></p><p><b> case 1:
82、</b></p><p> _L(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> _I(Xmap+4,Ymap/4+5);</p><p><b&
83、gt; break;</b></p><p><b> case 3:</b></p><p> _O(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> case 4:</b></p>
84、<p> _Z(Xmap+4,Ymap/4+5);</p><p><b> break;</b></p><p><b> case 5:</b></p><p> _T(Xmap+4,Ymap/4+5);</p><p><b> break;</b>
85、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //此函數(shù)用于操作初始化界面。</p><p> void chushihua()</p>&
86、lt;p><b> {</b></p><p><b> int i;</b></p><p> gotoxy(5,1);</p><p> for(i=0;i<70;i++)</p><p><b> {</b></p><p>
87、 printf("=");</p><p><b> }</b></p><p> gotoxy(5,2);</p><p> for(i=0;i<70;i++)</p><p><b> {</b></p><p> printf(&q
88、uot;*");</p><p><b> }</b></p><p> gotoxy(31,4);</p><p> printf("歡~迎~來~到~");</p><p> gotoxy(30,5);</p><p> printf("《俄羅斯
89、方塊》");</p><p> gotoxy(5,7);</p><p> for(i=0;i<70;i++)</p><p><b> {</b></p><p> printf("*");</p><p><b> }</b>
90、</p><p> gotoxy(5,8);</p><p> for(i=0;i<70;i++)</p><p><b> {</b></p><p> printf("=");</p><p><b> }</b></p>
91、<p> gotoxy(4,10);</p><p> printf("按任Enter鍵開始游戲。 \n\n ↑變換,↓加速下移,←左移,→右移。");</p><p> gotoxy(45,23);</p><p> printf("----七組:姜志
92、康、王世超、李向偉");</p><p> getchar();</p><p> system("CLS");</p><p><b> }</b></p><p> //此函數(shù)用于操作結(jié)束界面。</p><p> void gameover()</
93、p><p><b> {</b></p><p> system("CLS");</p><p> gotoxy(30,5);</p><p> printf("#################");</p><p> gotoxy(30,6);&l
94、t;/p><p> printf("## ##");</p><p> gotoxy(30,7);</p><p> printf("## GAME OVER ##");</p><p> gotoxy(30,8);</p><p> print
95、f("## ##");</p><p> gotoxy(30,9);</p><p> printf("#################");</p><p> gotoxy(30,11);</p><p> printf("您的得分為:%d",ch
96、enji);</p><p> gotoxy(30,13);</p><p> printf("歡迎下次再來~~~");</p><p> gotoxy(30,15);</p><p> printf("請按Enter鍵退出!");</p><p> getchar()
97、;</p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> HideCursor();</p><p> srand((int)time(NULL));</p><p&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論