




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機應用基礎與程序設計三級項目設計報告項目名稱:連連看班級:2014 級軟件工程 8班學號:140120010226姓名:郭鵬飛日期:2014 年 12 月 31 日說明:報告內(nèi)容可以根據(jù)自己的設計實踐自行擬定和修改,內(nèi)容盡量翔實,頁數(shù)不夠 可以加頁, 內(nèi)容過于單薄將影響得分 。建議寫報告之前自己上網(wǎng)或在圖書館查閱相關(guān) 資料進行報告書寫方法的自學。一、項目分析項目分析簡要說明項目主要用戶需求、設計思路及模塊劃分。1、用戶需求分析 在當今社會,人們的生活壓力越來越大,也沒有太多時間去玩大型的 游戲,所以需要一些簡單的小游戲來緩解大家的工作和學習壓力。 而連連看 是一款簡單,容易理解,大多數(shù)人都
2、會玩的小游戲,耗費時間也不是太長, 所以特意設計此款游戲來滿足用戶放松心情的需求。2、系統(tǒng)設計思路(1)必須先導入圖片,當倆張圖片一樣時,便可以消除;(2)窗體基本的菜單欄必須有;(3)有時間軸控制時間,確定輸贏;(4)當時間到時,不能繼續(xù)游戲;贏了的話,要保存游戲者姓名和判 斷勝負的時間;(5)最好有歷史記錄,記錄下來用戶每一次的得分情況。3、系統(tǒng)模塊劃分板塊一:圖片導入。 連連看應該有用來點擊的圖片, 使用戶避免因為只 有數(shù)字而感到無聊。板塊二:圖片標記。 連連看需要點擊倆次圖片, 所以必須記錄第一次點 擊的圖片是哪一個。板塊三:圖片連線。 該過程是整個游戲的核心過程, 是最重要的一個過
3、程,也是耗時最長的一個過程。連線方式主要分為三種方式,即直線連接、 一個折點連接、 倆個折點連接。 如果用戶前后點擊的圖片可以通過三種方式 中的任意一種連接,并且圖片完全一樣,則達到消除圖片的效果。板塊四:判斷成功。通過判斷圖片是否完全消除,判斷游戲是否勝利板塊五:判斷失敗。如果時間到的話, 用戶失敗, 增加了游戲的競爭性。 板塊六:重新開始。 但用戶游戲結(jié)束或想要重新開始時, 可以重新開始 新的游戲。板塊七:游戲暫停。通過游戲暫停,使用戶有事時可以暫停游戲,之后 可以繼續(xù)游戲。板塊八:游戲難度。 滿足不同程度的用戶的不同需求, 共分為“簡單” 、 “一般”、“復雜”三個難度,享受不同的挑戰(zhàn)難
4、度。板塊九:歷史記錄。 將用戶玩過的記錄保存下來, 同時可以使用戶名和 游戲時間都保存下來,并且和游戲難度一一對應。板塊十:背景音樂。 為了使用戶在游戲過程中更加享受, 增加背景音樂 和消除音樂,并且任何時候可以控制音樂的開始和結(jié)束。二、項目設計詳細介紹項目各個子模塊的設計方法及設計核心技術(shù)。1、各個子模塊的設計方法 板塊一:圖片導入。圖片的導入有很多種方法,在該游戲中我采用了 ImageList的方法。添加一個 ImageList控件,Name為ImageList1,在其 Image 的屬性中添加圖片,之后再將圖片導入窗口。同時,為了設計簡單,我使用 了二維 Button 來承載圖片,在 i
5、,j 的循環(huán)中添加代碼,具體代碼如下:MyButtoni, j.Name = i.ToString();/ 為了判斷圖片是否相同MyButtoni, j.ImageList = imageList1;MyButtoni, j.ImageIndex = i - 1;板塊二:圖片標記。 首先判斷是否已有圖片選中, 如果有則判斷是否滿足條 件;如果沒有,則該圖片被選中,同時做出標記,我的方法是使背景變?yōu)榧t 色,所以在導入圖片時沒有使圖片放大。具體代碼如下:Button button = ( Button )sender; button.BackColor =Color .Red;if (Before
6、Button = null )BeforeButton = button;button =nullelseif (button = BeforeButton)/ 如果前后選擇圖片為圖一張,則取消選BeforeButton = null ;button.BackColor =this .BackColor;else/ 判斷是否可以消除板塊三:圖片連線。連線時游戲的核心代碼。首先判斷直連,如果倆張 相同的圖片中間沒有別的圖片則滿足條件可以消除。此處通過網(wǎng)上查閱資 料,用到了返回值。具體代碼如下:/ 豎直方向的連線bool Y_line( int Y1, int Y2, int x)if (Y1 Y
7、2) / 保證 Y1Y2int t = Y1;Y1 = Y2;Y2 = t;for ( int m = Y1 + 1; m = Y2; m+)if (m = Y2) break ;if (MyButtonx, m.Visible != false )return false ;return true ;/ 水平方向的連線bool X_line( int X1, int X2, int y)/ 保證 X1 X2)int t = X1; X1 = X2; X2 = t;for ( int m = X1 + 1; m Y2)int t = Y1; Y1 = Y2; Y2 = t;t = X1; X1
8、 = X2; X2 = t;if (Y1 Y2)if (X1 X2)if (MyButtonX1, Y2.Visible =false )/ 右下生變化if (X_line(X2, X1, Y2) = true )/ 經(jīng)過直連后 X1 X2if (Y_line(Y1, Y2, X1) =true )z1.X = MyButtonX1, Y2.Left + length / 2;z1.Y = MyButtonX1, Y2.Top + length / 2;return true ;大小發(fā)if (MyButtonX2, Y1.Visible =false )/ 左上if (X_line(X2, X
9、1, Y1) =true )if (Y_line(Y1, Y2, X2) = true )z1.X = MyButtonX2, Y1.Left + length / 2;z1.Y = MyButtonX2, Y1.Top + length / 2;return true ;return false ;其代碼如false )接著是倆個折點的代碼, 首先先通過上下左右四個方向分開論述,下: / 二折連右bool right( int X1, int X2, int Y1, int Y2)for ( int x = X1 + 1; x = 0; x-)false )if (X_line(X1, x,
10、 Y1) =true & MyButtonx, Y1.Visible =if (OneCorner(x, Y1, X2, Y2) =true )z1.X = MyButtonx, Y1.Left + length / 2;z1.Y = MyButtonx, Y1.Top + length / 2;z2.X = MyButtonx, Y2.Left + length / 2;z2.Y = MyButtonx, Y2.Top + length / 2;return true ;if (X_line(X1, 0, Y1) =true )if (X_line(X2, 0, Y2) =true )z1.
11、X = MyButton0, Y1.Left + length / 2;z1.Y = MyButton0, Y1.Top + length / 2;z2.X = MyButton0, Y2.Left + length / 2;z2.Y = MyButton0, Y2.Top + length / 2; return true ;return false ;/ 二折連上bool up( int X1, int X2, int Y1, int Y2)for ( int y = Y1 - 1; y = 0; y-)false )if (Y_line(Y1, y, X1) =true & MyButt
12、onX1, y.Visible =if (OneCorner(X1, y, X2, Y2) =true )z1.X = MyButtonX1, y.Left + length / 2;z1.Y = MyButtonX1, y.Top + length / 2;z2.X = MyButtonX2, y.Left + length / 2;z2.Y = MyButtonX2, y.Top + length / 2;return true ;if (Y_line(Y1, 0, X1) =true )if (Y_line(Y2, 0, X2) =true )z1.X = MyButtonX1, 0.L
13、eft + length / 2;z1.Y = MyButtonX1, 0.Top + length / 2;z2.X = MyButtonX2, 0.Left + length / 2;z2.Y = MyButtonX2, 0.Top + length / 2; return true ;false )if (Y_line(y, Y1, X1) = true & MyButtonX1, y.Visible = if (OneCorner(X1, y, X2, Y2) = true )z1.X = MyButtonX1, y.Left + length / 2;z1.Y = MyButtonX
14、1, y.Top + length / 2;z2.X = MyButtonX2, y.Left + length / 2;z2.Y = MyButtonX2, y.Top + length / 2; return true ; if (Y_line(Y1, Upright + 1, X1) =true )if (Y_line(Y2, Upright + 1, X2) = true ) z1.X = MyButtonX1, Upright + 1.Left + length / 2;z1.Y = MyButtonX1, Upright + 1.Top + length / 2;z2.X = My
15、ButtonX2, Upright + 1.Left + length / 2;z2.Y = MyButtonX2, Upright + 1.Top + length / 2; return true ; return false ; 然后將二折連的四種分類綜合在一起,代碼如下: bool TwoCorner( int X1, int X2, int Y1, int Y2)if(right(X1, X2, Y1, Y2) =true )return true ;if(left(X1, X2, Y1, Y2) =true )return true ;if(up(X1, X2, Y1, Y2) =
16、true )return true ;if (down(X1, X2, Y1, Y2) =true )return true ;elsereturn false ; 最后將直連、一折連、二折連的代碼統(tǒng)統(tǒng)綜合起來,代碼如下: bool Path()if (X1 = X2)if (Y_line(Y1, Y2, X1) =true )LinkWay = GamePath.line;return true ;if (Y1 = Y2)if (X_line(X1, X2, Y1) =true )LinkWay = GamePath.line;return true ;if (OneCorner(X1, Y
17、1, X2, Y2) =true )LinkWay = GamePath.OneCorner;return true ;if (TwoCorner(X1, X2, Y1, Y2) =true )LinkWay = GamePath.TwoConcer;return true ;else return false ;通過這些代碼,該游戲連線的判定就解決了。板塊四:判斷成功。 當窗口中沒有圖片時, 便可以彈出窗口通知用戶已 完成游戲, 并記錄游戲者姓名。 記錄姓名在板塊九會詳細介紹, 下面是判斷 是否完成游戲的代碼:private bool Win()for (i = 1; i = Horizon
18、tal; i+)for (j = 1; j = Upright; j+)if (MyButtoni, j.Visible =false )continue ;else return false ;if (i = Horizontal+1) return true ;elsereturn false ;板塊五:判斷失敗。該過程比較簡單,當時間結(jié)束時游戲即失敗,代碼 如下:private bool Lose()該代碼應該在時間空間 Timer 的 Tick 時間中執(zhí)行。板塊六:重新開始。在窗口中添加“主菜單”按鈕,用戶可以通過返回 主菜單重新開始游戲。在該事件下加游戲初始化的代碼,具體如下:pri
19、vate void initialise() / 初始化游戲score = 0;/ 時間軸time = 60;toolStripProgressBar1.Maximum = time; toolStripProgressBar1.Minimum = 0; toolStripProgressBar1.Value = time;/ 時間軸toolStripStatusLabel1.Text = 你的分數(shù): + score.ToString(); toolStripStatusLabel2.Text = 所剩時間: + time.ToString(); buttonMean.Visible = tr
20、ue ;buttonBegin.Enabled = true ;for (i = 0; i = Horizontal+1; i+)for (j = 0; j = Upright+1; j+)MyButtoni, j = new Button ();MyButtoni, j.Size =new Size (length, length);MyButtoni, j.Left = 3 * distance + (i - 1) * length;MyButtoni, j.Top = 3 * distance + (j - 1) * length + menuStrip1.Height;MyButton
21、i, j.Visible = false ; Controls.Add(MyButtoni, j);for (i = 1; i = Horizontal; i+)for (j = 1; j = Upright; j+)Button button = new Button ();button = MyButtoni, j;button.Click += new EventHandler (Mybt_Click);MyButtoni, j.Name = i.ToString();/ 為了判斷圖片是否相同MyButtoni, j.ImageList = imageList1;MyButtoni, j
22、.ImageIndex = i - 1;MyButtoni, j.Visible = true ;/ 導入圖片/ 調(diào)整各個控件 窗體的位置location();板塊七:游戲暫停。當游戲暫停時,該按鈕應該顯示“繼續(xù)” ,同時時 間停止,用戶不能看到游戲界面;繼續(xù)游戲后,按鈕顯示“暫停” ,同時時 間開始繼續(xù)減少。時間停止與繼續(xù)通過控制 Timer 的 Enable 屬性。為了遮 蓋游戲界面,用了 PictureBox 空間,通過控制該空間的 Visibl 屬性控制游 戲界面的可見性,同時可以在游戲開始時顯示該圖片,使界面更加美觀。板塊八:游戲難度。 該設計也比較簡單, 通過控制圖片的多少來控制難
23、 度。游戲難度可以在開始游戲之前選擇,不再贅述。板塊九:歷史記錄。該過程主要應用了文件的讀取和窗體之間變量的傳 遞。記錄必須保存在當?shù)氐奈募铮?否則游戲關(guān)閉后記錄將不再存在, 都取 時也必須從當?shù)匚募x取。 其中文件應分為簡單游戲的姓名, 分數(shù), 一般難 度的姓名、 分數(shù)和困難難度的姓名和分數(shù)構(gòu)成, 以簡單游戲為例。 同時窗口 間變量的傳遞可以將要傳遞的變量寫在 form 后的括號中,然后承接的窗口 要有接受的變量,類似于事件之間的傳遞。接著是保存記錄,當游戲勝利,彈出 FormWin窗口,可以記錄游戲者姓 名和時間,代碼如下:fs = new ( .FileseasyName.txt ,
24、.Append);StreamWriter sw = new StreamWriter (fs, Encoding .UTF8); / 解決亂碼fsTime = new ( .FileseasyTime.txt , .Append);StreamWriter swTime = new StreamWriter (fsTime, Encoding .Default); sw.WriteLine(textBox1.Text);swTime.WriteLine(time.ToString();sw.Close();fs.Close(); swTime.Close();fsTime.Close();這
25、樣便可以把記錄存到當?shù)氐奈募A里。然后是點擊排行榜是需要讀取文件, 還是以簡單模式為例, 彈出新的窗 口 FormTop,代碼如下:StreamReader sr = new StreamReader( .FileseasyName.txt , false ); StreamReader srTime = new StreamReader( .FileseasyTime.txt , false );MyName = sr.ReadToEnd();/讀取全部time = srTime.ReadToEnd();sr.Close();srTime.Close();label1.Text += nn
26、+ MyName;label2.Text += nn + time;板塊十:游戲音樂。 游戲音樂分為背景音樂和消除音樂。 消除音樂內(nèi)存 比較小, 可以直接用 WAV格式,代碼也比較簡單, 當消除成功時執(zhí)行如下代 碼:SoundPlayer SP = new SoundPlayer ();SP.SoundLocation =.SoundClear.Wav ;SP.Play();然后北京音樂如果用 WAV格式的話內(nèi)存太大, 為減小游戲內(nèi)存, 所以將北京 音樂換為 WMA格式,同時上面的代碼不可用, 所以我通過百度找到一些代碼, 雖然不是太懂,但為了游戲的完整性,還是使用了。首先要聲明空間,即: u
27、sing System.Runtime.InteropServices;using System.Media; / 播放音樂用的空間接著,在 class FormMain 中添加如下代碼:public static uint SND_ASYNC = 0x0001; / play asynchronouslypublic static uint SND_ = 0x00020000; / name is DllImport ( winmm.dll )public static extern uint mciSendString( string lpstrCommand,string lpstrRe
28、turnString, uint uReturnLength, uint hWndCallback);/ 播放音樂/ 沒看懂。最后在你想要播放音樂的位置添加如下代碼:mciSendString( close temp_alias , null , 0, 0);mciSendString(open .SoundBackMusic.wma alias temp_alias,null , 0, 0);mciSendString(play temp_alias repeat, null , 0, 0);(其中 .SoundBackMusic.wma 為文件位置)我在 FormMain 中添加了一段,實
29、現(xiàn)了北京音樂的播放,為了實現(xiàn)音樂的暫 停,當用戶關(guān)閉背景音樂時, 執(zhí)行相似代碼, 將文件換為空白文件即可實現(xiàn)。2、設計核心技術(shù) 核心技術(shù)主要是連線的實現(xiàn),上面已經(jīng)闡述,同時為了美觀,添加了一些基本功能(1)GDI+畫圖當連線條件滿足時,畫出倆個圖片之間的連線方式,首先需要找出圖片的中心,如果是直連,可以直接連接, 一折連和二折連需要找出他們的折 點然后連線,之后停頓幾秒后連線要消失。連線的代碼如下:private void DrawLine( int X1, int X2, int Y1, int Y2, Color myColor, GamePath LinkWay)Graphics g =
30、 this .CreateGraphics();Pen myPen = new Pen(myColor, 2);int x1 = MyButtonX1, Y1.Left + length / 2;int y1 = MyButtonX1, Y1.Top + length / 2;int x2 = MyButtonX2, Y2.Left + length / 2;int y2 = MyButtonX2, Y2.Top + length / 2;/ 調(diào)整連線的點為 Button 的中點switch (LinkWay)case GamePath.line:g.DrawLine(myPen, x1, y
31、1, x2, y2);break ;case GamePath.OneCorner:g.DrawLine(myPen, x1, y1, z1.X, z1.Y);g.DrawLine(myPen, z1.X, z1.Y,x2, y2);break ;case GamePath.TwoConcer:g.DrawLine(myPen, x1, y1, z1.X, z1.Y);g.DrawLine(myPen, z1.X, z1.Y, z2.X, z2.Y);g.DrawLine(myPen, z2.X, z2.Y, x2, y2);break ;如果消除條件滿足,執(zhí)行該事件(2)用到了枚舉類型,將游戲的難易程度分開,以便統(tǒng)計,具體代碼 如下:public enum style easy, common, hard ;public enum Rank easy,common,hard ;(3)應用了進度條來顯示時間的多少, 進度條的 Maximum表示進度條最 大時代表的值,必然, Minimum代表最小時代表的值,而 Value 當前值??梢?通過使 Value 的減少來減少時間,為了增加游戲的可玩性,當消除成功時增 加 2 秒,失敗后減少 3 秒。這些過程都通過控制 Value 的大小實現(xiàn)。 其他的一些核心技
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSM 0055-2024“領(lǐng)跑者”評價技術(shù)要求 燒結(jié)釹鐵硼永磁材料
- 2025年度資質(zhì)借用與投標環(huán)境保護合作協(xié)議
- 二零二五年度智能交通管理系統(tǒng)單方解除合同
- 2025年度跨海大橋旋挖灌注樁施工合同
- 二零二五年度防盜門市場調(diào)研與采購合作協(xié)議
- 二零二五年度生物技術(shù)專利申請合作協(xié)議
- 二零二五年度體育健身公司聘用兼職教練合同書
- 二零二五年度勞務派遣公司勞動合同范本(含合同解除與賠償)
- 四川省2025年度房屋租賃租賃合同解除與終止合同
- 二零二五年度消費金融貸款連帶保證合同書
- 家庭急救知識(異物卡喉的急救)共45張課件
- 機臺異常處理規(guī)定
- 旅游地產(chǎn)開發(fā)模式和創(chuàng)新(含案例)
- 診斷學完整教案(共167頁)
- 《汽車文化》全套教案
- 拆除工程檢驗批質(zhì)量檢驗記錄
- 甲狀腺腫瘤PPT課件
- 城市燃氣工程監(jiān)理實施細則
- 項目總工崗位職責
- 鋁合金和工藝課件:硬質(zhì)陽極氧化處理
- (完整版)部編四年級語文下詞語表
評論
0/150
提交評論