對對碰設(shè)計報告_第1頁
對對碰設(shè)計報告_第2頁
對對碰設(shè)計報告_第3頁
對對碰設(shè)計報告_第4頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精品計算機(jī)科學(xué)與工程學(xué)院課程設(shè)計報告題目全稱: C# 對對碰題目難度等級: 1指導(dǎo)老師: #職稱:教授學(xué)生姓名: #學(xué)號: 201#6班號: 2014#09平時(上機(jī))計算機(jī)使用課程設(shè)計報告計算機(jī)專業(yè)加分項(不超總分(10 分)技能(10 分)(20 分)技能(60 分)過 5 分)備注:如參加答辯,請答辯老師給出計算機(jī)專業(yè)技能( 60 分)的分?jǐn)?shù)。請指導(dǎo)教師給出除計算機(jī)專業(yè)技能( 60 分)以外的其他分?jǐn)?shù)。如參加答辯,請答辯老師簽字:主要任務(wù):消除相鄰的 3 個及以上的相同圖形詳細(xì)功能描述:界面中的圖形,如果相鄰的三個(橫/ 豎)及以上的圖形相同,則自動消除。消除后上方圖形下移,然后生成隨機(jī)

2、圖形填滿界面。用戶可以點(diǎn)擊 2 個圖形交換,使得交換后的圖形滿足消除條件。要求在計時時間內(nèi)完成每次消除,如果計時到?jīng)]有進(jìn)行消除操作,則游戲結(jié)束。預(yù)期成果或目標(biāo):軟件代碼,課程設(shè)計報告。指導(dǎo)老師評語:welcome精品指導(dǎo)教師簽字:_welcome精品摘 要對對碰是一款經(jīng)典的消除類小游戲。 不論在 pc 還是在移動端都有著很高的人氣。他的簡單操作、美觀畫面、過關(guān)得分都是吸引人的重要手段。而對于這樣一直活躍在人們視線當(dāng)中的經(jīng)典游戲,他的核心玩法確實很吸引人。所以我們想深度發(fā)掘這一類對對碰消除游戲的算法與設(shè)計思路完成自己對這類游戲基于 C# 的編寫與運(yùn)行。本次的研究對象是基于 C# 的對對碰游戲,

3、探討一個游戲的設(shè)計思想和各階段制作流程,運(yùn)用 VS2010 完成這次課程設(shè)計,其中需要完成游戲界面的顯示,消除方塊的算法,隨機(jī)圖形的產(chǎn)生,自動識別死鎖并重置圖案,音效開關(guān)等功能。關(guān)鍵詞:對對碰, C# ,算法welcome精品目 錄1 1 2 2 3 “ ” 2 4 “ ” 5 5 “ ” 13 6 16 7 18welcome精品第 1 章 任務(wù)完成情況本文的核心任務(wù)是基于C# 完成對對碰小游戲的編程, 以及完成之后的相關(guān)測試。經(jīng)測試后基本完成游戲圖形的生成顯示,交換方塊操作,方塊的消除,生成隨機(jī)圖形填補(bǔ)等功能。除了游戲本體,還帶有生命條顯示,即消耗時間,完成一次消除后增加時間,生命條為0

4、時游戲結(jié)束。結(jié)束之后顯示分?jǐn)?shù)。除此之外還有音效的開關(guān),更換皮膚,刷新,幫助菜單。welcome精品第 2 章 對對碰游戲介紹對對碰是一款經(jīng)典的 消除類游戲 ,玩家只要通過點(diǎn)擊磚塊來使磚塊之間互相還位,連成 3 個以上的磚塊來消除得分。在編寫對對碰游戲時,最重要的是完成檢測是否有 3 塊及以上的磚塊以及消除后新增隨機(jī)磚塊,磚塊的位置變化等算法。第 3 章“對對碰”的設(shè)計流程選題時因為曾經(jīng)做過之類的消除類小游戲,希望通過用新的語言C# 完成熟悉的編程任務(wù)加深對這類小游戲的理解和C# 的使用。游戲由堆列的小方格組成,玩家需要連續(xù)點(diǎn)擊相鄰的方塊交換位置,如果交換后橫排或豎排有3 塊或 3 塊以上的方塊

5、相同圖案則消去并加分。游戲的界面由10*10 個小方塊組成的,里面儲存方塊,繪制方塊。這里選擇8 種不同的圖案,用 Block 定義一個圖案。用一個二維數(shù)組給不同圖案的編號1-8 ,編號相同即消除。生命條在每次消除后增加生命,并在得分欄改變分?jǐn)?shù)。生命條為 0 時結(jié)束游戲,顯示結(jié)束畫面。所以這個對對碰游戲需要滿足的功能基本包括:開始界面,游戲界面,生命條(時間),小方塊,得分。除此之外,為了有更好的游戲體驗,選中、消除的音效,得分榜(運(yùn)用 XML ),皮膚外觀,選中方塊的高亮顯示,這些都是后面基本完成后考慮的功能。后面結(jié)束之后的再來一局按鈕。首先很容易想到利用二維數(shù)組儲存每個方塊和每個方塊的圖案

6、。像前面所說的用 1-8 表示 8 種不同的方塊圖形。當(dāng)方塊消去之后,則number數(shù)組的值標(biāo)記為 0。在整個游戲中,重要的算法實現(xiàn)中包括選擇兩塊圖形后的exchange() 算法,檢測是否存在 3 塊及 3 塊以上的方塊在同一行或同一列的 check() 算法,隨機(jī)圖形填充的 fill() 算法。在進(jìn)行 exchange() 后調(diào)用 check() 算法,檢測是否有符合規(guī)則的方塊,在消除方塊的最上方產(chǎn)生隨機(jī)圖案,同列的圖案依次下移,生命條增加,積分增加。同時需要判斷形成的新的圖案是否有可消除的磚塊。同時判斷是否有可以消除的磚塊,若沒有,需要重置圖案。因此該游戲分為以下幾個類(1) 方塊圖案B

7、lock 類:獲取圖案,繪制圖案。確定每個方塊的坐標(biāo),圖案。繪制選中的圖案的輪廓線。welcome精品(2) 游戲場景類 GameField類:用于隨機(jī)生成并繪制所有游戲場景中的方塊圖案,交換方塊,檢測是否存可消去的方塊,方塊的消除填充等(3) 游戲窗體 Start 類:包括游戲開始界面, 游戲面板,一個定時器,幫助菜單,音效控制等以及后面新加的換主題功能。添加 picturebox控件分別作為游戲的開始界面,游戲界面。游戲類圖如下welcome精品開始寫時,就是按照正常游戲順序開始寫。開始游戲界面之后,確定自己游戲要完成的功能,生命條,音效開關(guān),以及各種圖片素材,除了游戲方塊圖案用的小色塊,

8、其他圖形都從網(wǎng)上搜索。其中重點(diǎn)要說的是否有死鎖的算法分析。下面拿行消除舉例142XX635第一種情況即上圖所示。存在相鄰兩塊相同的圖案,則需要檢測1-6 六的位置的圖案是否存在消除的可能性。1welcome精品XX2第二種情況則是間隔的兩塊相同圖案, 檢測 1,2 位置的圖案是否存在消除的可能性。這種算法同樣適用于游戲新加的提示功能。游戲的工作流程圖開始計時開始到時間N死 鎖 嗎=N選擇圖片交換可消除嗎設(shè)計環(huán)境系統(tǒng): Windows10編譯環(huán)境: VS2010YYY結(jié)束游戲重置圖形消除,填充時間積分增加第 4 章 “對對碰”關(guān)鍵算法代碼welcome精品publicint check()/ 檢

9、測是否同行或列有超過 3個一樣for (int i = 0; i < 10; i+)for (int j = 0; j < 10; j+)/for 內(nèi)開始/ 行檢測if (j = 0)RowSames = 1;elseif (blocksi, j - 1.ImageType = blocksi,j.ImageType)/ 圖案相同RowSames+;elseif (RowSames >= 3)/ 該位置之前 rowsames 個格子的物體都要消除for (int n = 1; n <= RowSames; n+)rectan2i, j - n = 0;RowSames

10、= 1;if (j = 9 && RowSames >= 3)/ 該位置之前 rowsames 個格子的物體都要消除for (int n = 1; n <= RowSames; n+)welcome精品rectan2i, 10 - n = 0;/ 列檢測if (j = 0)ColumSames = 1;elseif (blocksj - 1, i.ImageType = blocksj,i.ImageType)/ 圖案相同ColumSames+;elseif (ColumSames >= 3)/ 該位置之上的 columsames個格子的物體要消除for (i

11、nt n = 1; n <= ColumSames; n+)rectan2j - n, i = 0;ColumSames = 1;if (j = 9 && ColumSames >= 3)/ 該位置之前 rowsames 個格子的物體都要消除for (int n = 1; n <= ColumSames; n+)rectan210 - n, i = 0;welcome精品/for 內(nèi)結(jié)束RowSames = 1;ColumSames = 1;/ 檢測每列有多少個空格int temp = 0;int result = 0;/ 總和for (int i = 0;

12、i < 10; i+)for (int j = 0; j < 10; j+)if (rectan2j, i = 0)temp+;emptyi = temp;result += temp;temp = 0;/reDraw();returnresult;/* 生成填補(bǔ) */publicvoid fill()Randomrand =new Random ();for (int j = 0; j < 10; j+)/ 每列if (emptyj > 0)welcome精品for (int i = 0; i < 10; i+)/ 每行while (rectan2i, j =

13、0)if (i > 0)/ 空格之后的所有圖片向下移一位for (int n = i - 1; n >= 0; n-)down(n, j);/ 填充最頂上一格方塊Block tb =new Block (rand.Next(8) + 1, j*50,0);blocks0, j = tb;/rectan0, j = tb.ImageType;rectan20, j = tb.ImageType;PlaySound( "AddScore");/ 重畫一下reDraw();/* 下移某方塊對象,參數(shù) x,y 為矩陣坐標(biāo) */publicvoid down( int x

14、, int y) /7-7 addwelcome精品if (x < 9)/ 方塊下移 50 像素/blocksx, y.Location.Y += 50;int px = blocksx, y.Location.X;int py = blocksx, y.Location.Y;blocksx, y.Location =new Point (px, py + 50);blocksx + 1, y = blocksx, y;/rectanx+1, y = rectanx, y;/*7-06 rectan2x + 1, y = rectan2x, y;/* 播放聲音 */publicvoid

15、PlaySound( stringsoundstr)if (!soundSwitch)return ;if (sound.Stream !=null ) / 聲音同步return ;switch (soundstr)case "AddScore": / 消除一片的聲音sound.Stream =Resources .folder;break ;case "Exchange" : / 交換方塊的聲音sound.Stream =Resources .exchange;break ;welcome精品sound.Play();sound.Stream =nul

16、l ;/* 重畫場景中所有對象 */publicvoid reDraw()/ 重畫背景Graphics g = Graphics .FromImage(bufferImage); Bitmap bg = Resources .bg_GameField; g.DrawImage(bg, 0, 0, 500, 500);/ 畫物體for (int i = 0; i < 10; i+)for (int j = 0; j < 10; j+)if (rectan2i, j != 0)blocksi, j.Draw(bufferImage);/ 緩存輸出Graphics g2 = Graphi

17、cs .FromHwnd(winHandle); g2.DrawImage(bufferImage, 0, 0, 500, 500);using System.Drawing;using SuperPeng.Properties;namespaceSuperPeng/* 本類描述的對象是對對碰的每個小方塊*/welcome精品internalclass Blockprivate readonly Bitmap blockImage; / 小方塊圖案 private readonly int imageType; / 圖片種類 private Point location; / 小方塊坐標(biāo)pub

18、licBlock( int imageIndex,int x, int y)location =new Point (x, y);imageType = imageIndex;/ 初始化小方塊圖案switch (imageIndex)case 1:blockImage =Resources ._1;break ;case 2:blockImage =Resources ._2;break ;case 3:blockImage =Resources ._3;break ;case 4:blockImage =Resources ._4;break ;case 5:blockImage =Reso

19、urces ._5;break ;case 6:blockImage =Resources ._6;break ;welcome精品case 7:blockImage =Resources ._7;break ;case 8:blockImage =Resources ._8;break ;default :blockImage =Resources ._4;imageType = 4;break ;publicint ImageType/ImageType屬性get returnimageType; publicPoint Location/Location屬性get returnlocat

20、ion; set location =value ; /* 畫對象 */publicvoid Draw( Image img)Graphics g = Graphics .FromImage(img);Rectangle r = new Rectangle (location, new Size(50, 50); g.DrawImage(blockImage, r);welcome精品publicvoid DrawSelectedBlock(Graphics g)/ 畫選中方塊的示意邊框線Pen myPen =new Pen (Color .Black, 3);Rectangle r = ne

21、w Rectangle (location, new Size(50, 50); g.DrawRectangle(myPen, r);publicvoid ClearSelectedBlock(int x, int y, Graphicsg)/ 清除選中方塊/* 游戲時鐘 */privatevoid timer1_Tick(objectsender,EventArgse)if (myProcessbar1.Value > 0)myProcessbar1.Value-;elsegameover();/5 分鐘刷新一次if (timeAll < 300)timeAll += 2;els

22、ereStart();timeAll = 0;welcome精品/* 左鍵彈出菜單 */privatevoid button1_MouseDown(objectsender,MouseEventArgse)if (e.Button =MouseButtons.Left)contextMenuStrip1.Show(button1,newPoint (button1.Width, button1.Height);privatevoid button1_Click(objectsender, EventArgse)Help he = new Help ();he.Show();/* 聲音開關(guān) */

23、privatevoid pic_sound_Click(objectsender,EventArgse)gameField.soundSwitch = !gameField.soundSwitch;if (gameField.soundSwitch)pic_sound.Image =Resources .sound;elsepic_sound.Image =Resources .nosound;welcome精品第 4 章 “對對碰”程序運(yùn)行截圖開始界面游戲界面welcome精品welcome精品游戲結(jié)束界面welcome精品welcome精品第5章結(jié)束語關(guān)于 C#C# 語言 (C sharp

24、)是微軟對這一問題的解決方案。C# 是一種最新的、 面向?qū)ο蟮木幊陶Z言。它使得程序員可以快速地編寫各種基于Microsoft.NET 平臺的應(yīng)用程序, Microsoft .NET 提供了一系列的工具和服務(wù)來最大程度地開發(fā)利用計算與通訊領(lǐng)域。正是由于 C# 面向?qū)ο蟮淖吭皆O(shè)計, 使它成為構(gòu)建各類組件的理想之選無論是高級的商業(yè)對象還是系統(tǒng)級的應(yīng)用程序。使用簡單的 C#語言結(jié)構(gòu),這些組件可以方便的轉(zhuǎn)化為 XML 網(wǎng)絡(luò)服務(wù),從而使它們可以由任何語言在任何操作系統(tǒng)上通過 Internet 進(jìn)行調(diào)用?;仡?C# 發(fā)展的歷史, C# 1.0 完全是模仿 Java,并保留了 C/C+ 的一些特性如 stru

25、ct ,新學(xué)者很容易上手; C# 2.0 加入了泛型,也與 Java1.5 的泛型如出一轍;C# 3.0 加入了一堆語法糖, 并在沒有修改 CLR 的情況下引入了 Linq ,簡直是神來之筆,雖然很多項目出于各種各樣如性能之類的原因沒有采用,但非常適合小型程序的快速開發(fā),減輕了程序員的工作量,也提高了代碼的可讀性;C# 4.0增加了動態(tài)語言的特性,從里面可以看到很多 javascript 、 python 這些動態(tài)語言的影子。雖然越來越偏離靜態(tài)語言的道路,但從另一個角度來說,這些特性也都是為了提高程序員的生產(chǎn)力。至于被接受與否,還是讓時間來說話吧最重要的是, C# 使得 C+ 程序員可以高效的

26、開發(fā)程序,而絕不損失C/C+原有的強(qiáng)大的功能。因為這種繼承關(guān)系, C# 與 C/C+ 具有極大的相似性, 熟悉類似語言的開發(fā)者可以很快的轉(zhuǎn)向 C# 。這次選擇 C# 語言其實是因為課程設(shè)計的老師推薦使用 C# 這種語言。在經(jīng)過一段時間的學(xué)習(xí)之后,比較大的感受是與其他語言相比,省去了指針以及面向?qū)ο蟮奶攸c(diǎn)。這門語言在學(xué)習(xí) C 與 C+ 之后很容易上手,也對之前的兩門語言有的新的認(rèn)識。當(dāng)然 C# 的缺點(diǎn)也有,比如依賴性強(qiáng),依賴于微軟類庫,不能跨平臺,不開源等等。不過每個語言都有自己的優(yōu)缺點(diǎn),作為一門面向?qū)ο蟮恼Z言, C# 的優(yōu)點(diǎn)已經(jīng)滿足了一般使用這門語言的需要。welcome精品由于 C# 是后生

27、,所以其很多語法都是其它語言的改進(jìn)。作為一個商業(yè)產(chǎn)品, C+ 用戶是 C# 的首要目標(biāo),所以它充分照顧到了 C+ 用戶的習(xí)慣。從整體看, C# 語法比 java 更優(yōu)雅。這里 java 粉絲就可能會站出來, 說 java 也有好的地方 -對的,我沒說 C#在任何地方都優(yōu)于java ,請不要舉出局部上的反例-C# 和 java比較的文章比比皆是,這里就不再重復(fù)了。C# 團(tuán)隊在設(shè)計語法時充分照顧到了常見的業(yè)務(wù)需求,而不是單純的技術(shù)層面上的紙上談兵。于是, C# 支持事件、委托、屬性、 Linq 等一系列讓業(yè)務(wù)開發(fā)更簡單的功能。強(qiáng)大的周邊 C# 的 IDE 功能非常強(qiáng)大, C# 的文檔有包含中文的多

28、國語言, C# 所需要的運(yùn)行平臺在用戶量極大的 windows 上內(nèi)置。一切的一切都在向我們訴說,C# 有一個強(qiáng)大的爹。同時也說明, C# 不僅僅是一個語言,更是一個極具匠心的產(chǎn)品。所以,用戶可以享受到這個產(chǎn)品的各個功能 - 包括售后服務(wù)。以上 2 個優(yōu)點(diǎn)就是 C# 的全部優(yōu)點(diǎn)了。我想任何一個 C# 粉絲想證明 C# 優(yōu)秀,無外乎上面兩個理由。下面讓我們更來研究它的缺點(diǎn)。它是一個產(chǎn)品。作為微軟的產(chǎn)品,它不能幫助競爭者- 其它操作系統(tǒng)。作為微軟的產(chǎn)品,它必須追求穩(wěn)定、嚴(yán)謹(jǐn),而不要出現(xiàn)任何錯誤。C# 團(tuán)隊實力確實非常強(qiáng)大, 導(dǎo)致 C# 不會出現(xiàn)任何一個低級錯誤, 就連 if(a = false)

29、這樣的代碼都會出現(xiàn)一個警告。 C# 的語法、底層庫也無時不刻在印證一個理念:我們做的是產(chǎn)品,我們必須保證產(chǎn)品根據(jù)我們所期望的工作,而不允許出現(xiàn)任何錯誤。這是一個優(yōu)點(diǎn),也是一個缺點(diǎn)。當(dāng)我們的需求和產(chǎn)品設(shè)計者所期望的一致時,事情會變的非常輕松。但如果需求和期望不同時,麻煩事情會接踵而至。 舉個例子,當(dāng)我們希望 switch 能夠貫穿 case 時,就會出現(xiàn)麻煩 - 產(chǎn)品設(shè)計者不允許用戶直接這么做 - 雖然他有合適的理由, 也提供了實現(xiàn)這個功能的替代方法,但用戶必須按他說的做。如果這種情況發(fā)生在其它產(chǎn)品設(shè)計者未考慮到的需求時,那么這個麻煩將會更大。 比如當(dāng)我們想要重載 >> 來模擬 C+ 代碼時,就會發(fā)現(xiàn)這是一個不可能的任務(wù)。welcome精品很多人都有這種感受,直接使用 IDE 自帶的功能開發(fā),做起來非常輕松。但一旦有一種自主的想法時,就很難實現(xiàn) - 比如修改軟件主題。沒有考慮代碼量這種問題之所以會出現(xiàn),是因為微軟人多

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論