版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計主要內(nèi)容1. 題目20482. 需求分析游戲操作需求:1、可使用鼠標(biāo)或、或W、X、A、D鍵進(jìn)行操作;2、Play按鈕 重新開始游戲;3、Undo按鈕 取消本次操作,回到上一步。2048游戲算法1、游戲開始時隨機(jī)的產(chǎn)生2個數(shù)值為2/4的方格,其中1個方格置于4個角中的一個位置, 另一個方格隨機(jī)的置于其它位置,其余方格值為0。2、每次移動鼠標(biāo)或按方向鍵后,逐行計算移動后的方格值。每行移動的算法是:先將所有值為0的數(shù)移至行首。能后從行尾開始逐一和前一個數(shù)比較,如果相等則合并這2個格子。3、每合并一次格子,將其值累計到游戲總分中。4、一次移動結(jié)束后,在所有值為0的方格中隨機(jī)的分配一個2/4的值
2、。5、所有方格值不為0且上下、左右相鄰的方格都不相等,則游戲結(jié)束。6、2出現(xiàn)的概率為90%,4出現(xiàn)的概率為為10%。3. 設(shè)計環(huán)境運行環(huán)境:windows xp,windows 2003 windows 7開發(fā)環(huán)境:Microsoft Visual Studio 2010編寫語言:c#一 詳細(xì)設(shè)計說明開始隨機(jī)產(chǎn)生兩個方塊鍵盤控制移動方塊1. 系統(tǒng)程序流程圖移動方向最底部方塊是否有方塊方塊移到底部N原來位置方塊清除Y數(shù)字是否相等N上一格方塊數(shù)字是否相等Y兩方塊數(shù)字相加把上面的行數(shù)據(jù)下移并置YN方塊是否能夠移動YYN結(jié)束游戲2. 系統(tǒng)概要說明 本程序是在VS2010環(huán)境下編寫的Windows應(yīng)用程
3、序,函數(shù)中利用了畫圖函數(shù)繪制基本方塊模型,并通過鍵盤或鼠標(biāo)執(zhí)行相應(yīng)的操作。在產(chǎn)生的方塊中,調(diào)用隨機(jī)方法,隨機(jī)產(chǎn)生1100中的任何一個數(shù)字,數(shù)字小于90,方塊顯示數(shù)字為2,否則顯示為4,每一,通過這種方式,實現(xiàn)了游戲中其中不同模塊的數(shù)字的隨機(jī)產(chǎn)生。3. 功能說明(1) 實現(xiàn)可以顯示2或者4兩張數(shù)字的方塊(2) 實現(xiàn)各個方塊的上下左右移動 (3) 實現(xiàn)方塊間數(shù)字判斷與相加4. 系統(tǒng)各類的知識點說明1 主類Main()方法 主函數(shù)調(diào)用主要功能的三個方法,實現(xiàn)程序運行。2. Cube類(畫單元格)Cube類的功能定義了單個方塊的構(gòu)架。此類中,定義了不同的數(shù)字顯示所顯示的不同的單元格方塊,使方塊相加變化
4、明顯。此類中定義了屬性currValue/當(dāng)前得分以及方法Cube_Paint()方塊的繪制,此方法針對可能出現(xiàn)的12中數(shù)字顯示,運用Graphics類, 畫出不同的顯示的方塊3.forms類(方塊的控制)此類主要實現(xiàn)對方塊的控制,實現(xiàn)每種不同操作的實現(xiàn) 此類創(chuàng)建了四個屬性private Cube cubes = new Cube16;/創(chuàng)建個個cubes類的數(shù)組,實現(xiàn)游戲方塊的創(chuàng)建 enum MoveDict Up, Down, Left, Right ;/定義枚舉類型,鍵盤控制方向,上下左右 private int x1, y1;/鼠標(biāo)位置 private int score = 0;/房
5、錢成績 private int prev =new int17; /./上一步方格值和積分Form1()方法: 構(gòu)造方法,實現(xiàn)方塊的實例化創(chuàng)建start()方法:游戲的初始化,實現(xiàn)最開始兩個方塊的擺放。SavePrevVaule()方法:保存每上一步的方塊值以及成績,實現(xiàn)撤銷一次的操作LoadPrevValue()方法:加載上一步值,當(dāng)進(jìn)行撤銷操作時,調(diào)用該方法。OneMove()方法:實現(xiàn)移動一次的操作。此方法調(diào)用MoveLine()進(jìn)行累加,實現(xiàn)成績的相加MoveLine()方法:移動一行的方法getNextCube()方法:取下一個方塊CanMove()方法:通過方塊是否能夠移動,判斷游
6、戲是由結(jié)束pictureBox1_MouseDown()方法:獲取鼠標(biāo)移動的位置getDirection()方法:通過鼠標(biāo)坐標(biāo)判斷方塊的移動方向Form1_KeyUp()方法:接受鍵盤信息,判斷方塊移動方向btnPlay_Click()方法:“開始”按鈕的單擊事件,調(diào)用start()方法,開始游戲btnUndo_Click()方法:“撤銷”按鈕的單機(jī)事件,調(diào)用LoadPrevValue()方法,進(jìn)行撤銷操作5. 主要算法設(shè)計1.方塊值的隨機(jī)數(shù)產(chǎn)生System.Random r = new Random();int n1 = r.Next(1, 100);cubes0.Value = (n1 &
7、lt; 90 ? 2 : 4);通過Random類產(chǎn)生100以內(nèi)的隨機(jī)數(shù),數(shù)字大于90,方塊值為4;小于90,方塊值為22.游戲初始化兩個隨機(jī)方格位置的擺放 System.Random r = new Random(); int c1 = r.Next(1, 4); int c2 = c1; do c2 = r.Next(1, 16); while (c2 = c1); for (int i = 0; i < 16; i+) cubesi.Value = 0; int n1 = r.Next(1, 100); int n2 = r.Next(1, 100); switch (c1) ca
8、se 1: cubes0.Value = (n1 < 90 ? 2 : 4); break; case 2: cubes3.Value = (n1 < 90 ? 2 : 4); break; case 3: cubes12.Value = (n1 < 90 ? 2 : 4); break; case 4: cubes15.Value = (n1 < 90 ? 2 : 4); break; cubesc2 - 1.Value = (n2 < 90 ? 2 : 4);四個角隨機(jī)擺放一個方格,其他位置隨機(jī)擺放,位置重疊,再隨機(jī)產(chǎn)生一個3.保存上一步值的算法實現(xiàn)priva
9、te int prev =new int17; /定義一個數(shù)組記錄值for (int i = 0; i < 16; i+) previ = cubesi.Value;/數(shù)組前16個元素保存,16個方塊的值 prev16 = score;/數(shù)組最后一個元素保存當(dāng)前成績值4. 方塊移動一次的算法實現(xiàn)每移動一次,要加載得分,并是先移動后方塊的位置擺放以及方塊數(shù)值的相加及顯示private int MoveLine(Cube cube1, Cube cube2, Cube cube3, Cube cube4) int score = 0; if (cube1.Value = 0 &&am
10、p; cube2.Value = 0 && cube3.Value = 0 && cube4.Value = 0) return 0; Cube cubes = cube1, cube2, cube3, cube4 ; ArrayList iCubes = new ArrayList(); /判斷最低行方塊值是否為0,為0即不存在方塊,去掉為0的方塊 for (int i = 0; i < cubes.Length; i+) if (cubesi.Value != 0) iCubes.Add(cubesi.Value); for (int i = 0; i
11、 < cubes.Length - iCubes.Count; i+) cubesi.Value = 0; for (int i = 0; i < iCubes.Count; i+) cubesi + cubes.Length - iCubes.Count.Value = (int)iCubesi; if (cubes2.Value != 0)/ 如果等于0,說明改行只有一個非0的數(shù),則不需要移動和累加數(shù)了 if (cubes3.Value = cubes2.Value)/后一塊與前一塊方塊比較,如果數(shù)字相同,則累加成績 score += 2 * cubes3.Value; cub
12、es3.Value = 2 * cubes3.Value; if (cubes1.Value = cubes0.Value) score += 2 * cubes1.Value; cubes2.Value = 2 * cubes1.Value; cubes1.Value = 0; cubes0.Value = 0; else cubes2.Value = cubes1.Value; cubes1.Value = cubes0.Value; ; cubes0.Value = 0; else if (cubes2.Value = cubes1.Value) score += 2 * cubes2.
13、Value; cubes2.Value = 2 * cubes2.Value; cubes1.Value = cubes0.Value; ; cubes0.Value = 0; else if (cubes1.Value = cubes0.Value) score += 2 * cubes1.Value; cubes1.Value = 2 * cubes1.Value; cubes0.Value = 0; return score; 5. 獲取下一個方塊的算法實現(xiàn)private void getNextCube() ArrayList iCubes = new ArrayList(); /去除
14、0之后的方塊 for (int i = 0; i < 16; i+) if (cubesi.Value = 0) iCubes.Add(i); if (iCubes.Count > 0) /在所有為0的數(shù)上,隨機(jī)增加一個數(shù) System.Random r = new Random(); cubes(int)iCubesr.Next(1, iCubes.Count) - 1.Value = (r.Next(1, 100) < 90 ? 2 : 4); ; else if (CanMove()=false) /當(dāng)不能移動,游戲結(jié)束! MessageBox.Show("G
15、ame Over!"); 6. 判斷游戲是否結(jié)束的算法實現(xiàn)private bool CanMove() /判斷左右是否能夠移動,如果存在兩個數(shù)相同,即方塊可以移動累加,返回true,游戲未結(jié)束 if (cube1.Value = cube2.Value | cube2.Value = cube3.Value | cube3.Value = cube4.Value | cube5.Value = cube6.Value | cube6.Value = cube7.Value | cube7.Value = cube8.Value | cube9.Value = cube10.Value
16、 | cube10.Value = cube11.Value | cube11.Value = cube12.Value | cube13.Value = cube14.Value | cube14.Value = cube15.Value | cube15.Value = cube16.Value ) return true; /同理。判斷上下能否移動 if (cube1.Value = cube5.Value | cube5.Value = cube9.Value | cube9.Value = cube13.Value | cube2.Value = cube6.Value | cube
17、6.Value = cube10.Value | cube10.Value = cube14.Value | cube3.Value = cube7.Value | cube7.Value = cube11.Value | cube11.Value = cube15.Value | cube4.Value = cube8.Value | cube8.Value = cube12.Value | cube12.Value = cube16.Value ) return true; return false;/全部不能移動,返回false,即游戲結(jié)束 二 游戲運行說明1.游戲運行流程圖1. 游戲開始2.
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省萍鄉(xiāng)市2024-2025學(xué)年高二上學(xué)期期末考試物理試卷(含答案)
- 廣東省廣州市白云區(qū)2025-2026學(xué)年八年級上學(xué)期期末考試英語試題(含答案無聽力音頻及原文)
- 五年級期末考試卷及答案
- 微生物學(xué)試題及答案
- 北京航空航天大學(xué)《德國文學(xué)選讀》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 2025 四年級科學(xué)上冊小學(xué)科學(xué)上冊綜合復(fù)習(xí)課件
- 2021年湖南歷史高考一分一段位次表出爐
- 2023年人教版一年級語文下冊期中試卷(及參考答案)
- 南通事業(yè)單位招聘2022年考試全真模擬試題4套及答案解析(附后)
- 道路工程施工技術(shù)要點
- 專題13 三角函數(shù)中的最值模型之胡不歸模型(原卷版)
- 門診藥房西藥管理制度
- 新能源汽車生產(chǎn)代工合同
- 2025年中煤科工集團(tuán)重慶研究院有限公司招聘筆試參考題庫含答案解析
- 消防救援預(yù)防職務(wù)犯罪
- 一體化泵站安裝施工方案
- 畜禽糞污資源化利用培訓(xùn)
- 《搶救藥物知識》課件
- 廣州數(shù)控GSK 980TDc車床CNC使用手冊
- 校區(qū)打印店合作服務(wù) 投標(biāo)方案(技術(shù)方案)
- 建筑工程咨詢服務(wù)合同(標(biāo)準(zhǔn)版)
評論
0/150
提交評論