版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計文檔</b></p><p> 題 目: 連連看 </p><p> 作 者: </p><p> 系 別: 信息系 班級: 三隊 </p><p> 專 業(yè): 信
2、息網(wǎng)絡(luò)安全監(jiān)察(軟件方向)</p><p> 指導(dǎo)教師: </p><p><b> 前 言</b></p><p> 現(xiàn)在小游戲、網(wǎng)頁游戲越來越受網(wǎng)民歡迎,除了玩的方法簡單外(不像其他游戲還需要注冊下載繁瑣過程),很多游戲不乏經(jīng)典。連連看游戲就是典型了!</p&
3、gt;<p> 游戲“連連看”,只要將相同花色的兩張牌用三根以內(nèi)的直線連在一起就可以消除,規(guī)則簡單容易上手。游戲速度節(jié)奏快,畫面清晰可愛,老少皆宜。</p><p> 不管你走到哪個游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)休閑小游戲。</p><p> 豐富的道具和公共模
4、式的加入,增強游戲的競爭性。多樣式的地圖,使玩家在各個游戲水平都可以尋找到挑戰(zhàn)的目標,長期地保持游戲的新鮮感。使用新穎的連擊積分規(guī)則,使游戲玩家在體會連擊的快感后,同時對自己的游戲速度,更有挑戰(zhàn)性和追求極速的欲望。</p><p> 游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨特的魅力在全世界的娛樂領(lǐng)域占據(jù)主流位置,我們在承認廣大娛樂網(wǎng)民的選擇空間狹小的同時,也必須明確的一點就是游戲本身所具有的強大的吸引力。
5、游戲的吸引力主要在于,它在讓玩家打發(fā)時間的同時,可以讓人實現(xiàn)在顯示生活中不能實現(xiàn)的理想,得到在現(xiàn)實中不能得到的東西。而且游戲產(chǎn)業(yè)促動高科技技術(shù)不斷升級,作為經(jīng)濟增長的一大支撐點,已經(jīng)成為經(jīng)濟騰飛的“第四產(chǎn)業(yè)”。</p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p>
6、<b> 關(guān) 鍵 字1</b></p><p> Abstract2</p><p> Keywords2</p><p> 第1章 項目概述3</p><p> 1.1 項目背景3</p><p> 1.2 任務(wù)概述3</p><p> 1.3
7、項目開發(fā)計劃4</p><p><b> 1.4 術(shù)語表5</b></p><p> 第2章 分析階段6</p><p><b> 2.1 用況6</b></p><p> 2.2 概念模型10</p><p> 2.3 系統(tǒng)順序圖11</p>
8、;<p> 第3章 設(shè)計階段16</p><p> 3.1 協(xié)作圖16</p><p> 3.2 設(shè)計類圖17</p><p> 3.3 界面設(shè)計與界面類18</p><p> 第4章 構(gòu)造階段20</p><p> 4.1 核心代碼20</p><p>
9、 4.2 系統(tǒng)測試26</p><p> 第5章 用戶手冊30</p><p> 5.1 系統(tǒng)主要功能30</p><p> 5.2 運行環(huán)境要求30</p><p> 5.3 游戲操作方法30</p><p> 第6章 畢業(yè)設(shè)計小結(jié)31</p><p><b>
10、 致 謝32</b></p><p><b> 參考文獻32</b></p><p><b> 摘 要</b></p><p> 小游戲制作的目的是滿足了人們休閑的需要,在緊張工作之余休閑類的小游戲能夠給人帶來最大程度的放松,也可以增進人們之間的交流,溝通,通過游戲還可以認識更多的朋友。 &
11、lt;/p><p> 本程序?qū)⑷陙硭鶎W(xué)的專業(yè)知識和其他方面的知識融入到實際應(yīng)用中。</p><p> 通過此次課題的設(shè)計,掌握如何制作一個游戲軟件,以及制作游戲軟件的整個流程,制作游戲軟件的步驟,為以后的就業(yè)工作打下基礎(chǔ)。</p><p><b> 關(guān) 鍵 字</b></p><p><b> 小游戲;連
12、連看; </b></p><p><b> Abstract</b></p><p> The small game manufactures the goal has met the people leisure needs, when intense work the leisure class small game can bring the g
13、reatest degree to the human the relaxation, may also promote between people's exchange, the communication, may also know more friends through the game. This procedure the specialized knowledge which and other aspect
14、knowledge studies for three years integrates to the practical application. Through does this topic's design, how grasp manufactures a game software, as</p><p><b> Keywords</b></p><
15、;p> Small game; Looked again and again;</p><p><b> 項目概述</b></p><p><b> 項目背景</b></p><p> 現(xiàn)在小游戲、網(wǎng)頁游戲越來越受網(wǎng)民歡迎,除了玩的方法簡單外(不像其他游戲還需要注冊下載繁瑣過程),很多游戲不乏經(jīng)典。連連看游戲
16、就是典型了!</p><p> 游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨特的魅力在全世界的娛樂領(lǐng)域占據(jù)主流位置,我們在承認廣大娛樂網(wǎng)民的選擇空間狹小的同時,也必須明確的一點就是游戲本身所具有的強大的吸引力。游戲的吸引力主要在于,它在讓玩家打發(fā)時間的同時,可以讓人實現(xiàn)在顯示生活中不能實現(xiàn)的理想,得到在現(xiàn)實中不能得到的東西。而且游戲產(chǎn)業(yè)促動高科技技術(shù)不斷升級,作為經(jīng)濟增長的一大支撐點,已經(jīng)成為經(jīng)濟騰飛的“第四
17、產(chǎn)業(yè)”。</p><p> 相關(guān)技術(shù)及開發(fā)工具介紹</p><p> 本系統(tǒng)采用面向?qū)ο蟮能浖_發(fā)辦法,Microsoft公司的可視化集成開發(fā)以 環(huán)境 Visual Studio .Net作為開發(fā)平臺,以C#作為開發(fā)語言實現(xiàn)預(yù)定的需求功能。 </p><p> Visual Studio .Net 集成開發(fā)環(huán)境簡介: .Net是Microsoft XML We
18、b services 平臺。.Net平臺為創(chuàng)建新一代分布式Web應(yīng)用提供了所有的工具和技術(shù)(表示技術(shù)、構(gòu)件技術(shù)和數(shù)據(jù)庫技術(shù))。它支持標準的 Internet 協(xié)議,包括 HTTP 協(xié)議、XML(可擴展標記語言)和SOAP(簡單對象訪問協(xié)議,從而實現(xiàn)了異構(gòu)系統(tǒng)間應(yīng)用程序的集成和通信。.Net平臺包括5個主要部分:Windows .Net ,.Net 企業(yè)級服務(wù)器,.Net Web服務(wù)構(gòu)件,.Net Framework ,Visual St
19、udio .Net,Windows .Net ,.Net企業(yè)級服務(wù)器,.Net Web服務(wù)構(gòu)件,.Net Framework ,Visual Studio .Net,Visual Studio .Net是為建立基于.Net Framework 應(yīng)用程序而設(shè)的一個可視化集成開發(fā)環(huán)境,它提供了更優(yōu)秀的多種編譯語言的編輯和編譯統(tǒng)一的開發(fā)平臺,他是一個快速開發(fā)企業(yè)級Web 應(yīng)用程序以及高性能桌面應(yīng)用的工具。它為所有的編程語言提供了簡單統(tǒng)一的代
20、碼編輯器,包括XML</p><p> 1.3.2 C#語言簡介: C#是一種現(xiàn)代的、面向?qū)ο蟮恼Z言,它結(jié)合了C/C++和 Visual C++的強大功能以及Visual Basic的簡單易用性。C#有以下新特性:簡單:C#做了些該進,使語言更簡單;面向?qū)ο螅篊#支持面向?qū)ο蟮娜N編程原則:封裝、繼承和多態(tài);類型安全:C#去掉了指針,從根本上保證了程序的穩(wěn)定性和類型安全;版本控制:C#實現(xiàn)了版本技術(shù),避免了“D
21、LL 災(zāi)難” ;兼容性:C#允許在遵守.Net Framework CLS 的條件下訪問不同的 API, 可以與 Windows 的幾種傳統(tǒng)服務(wù)交互;靈活性:C#允許聲明一些不安全的方法和類,從而使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組。總之,C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言,它在繼承C和C++強大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有宏和模板,不允許多重繼承)。C#綜合了VB簡單的可視化操作和C
22、++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET 開發(fā)的首選語言。</p><p><b> 任務(wù)概述</b></p><p><b> 任務(wù)概述</b></p><p><b> 實現(xiàn)單機版連連看</b></p><
23、p> 開始游戲后,隨機生成圖片位置</p><p><b> 游戲中可使用道具</b></p><p><b> 實現(xiàn)目標</b></p><p><b> 游戲概況</b></p><p><b> 方案論證</b></p>
24、<p><b> 界面設(shè)計</b></p><p><b> 圖片選取及生成</b></p><p><b> 算法路徑實現(xiàn)</b></p><p><b> 游戲運行</b></p><p><b> 項目開發(fā)計劃<
25、/b></p><p> 如表11項目開發(fā)計劃</p><p> 日期 階段</p><p> 2月19到2月24 確定設(shè)計方向</p><p> 2月24到3月5
26、 可行性分析</p><p> 3月5到3月11 概要設(shè)計</p><p> 3月12到3月17 詳細設(shè)計</p><p> 3月19到4月7 編寫代碼</p><p> 4月9
27、到4月14 軟件測試</p><p> 4月14到4月18 編寫項目文檔 </p><p><b> 術(shù)語表</b></p><p> 重列:將游戲中的所有對子重新排列一次。</p><p> 延長時間:將游
28、戲中的使用時間延長。</p><p> 種子數(shù):產(chǎn)生圖片的數(shù)量</p><p> 重復(fù)數(shù):每種圖片的重復(fù)出現(xiàn)數(shù)</p><p><b> 分析階段</b></p><p><b> 用況</b></p><p><b> 系統(tǒng)用況圖</b>&l
29、t;/p><p> 如圖 21系統(tǒng)用況</p><p><b> 圖 21系統(tǒng)用況</b></p><p><b> 開始游戲</b></p><p><b> 如表 2.1.2</b></p><p> 表 2.1.2開始游戲用況</p
30、><p><b> 種類數(shù)/重復(fù)數(shù)設(shè)置</b></p><p> 如表 2.1.3種類數(shù)/重復(fù)數(shù)設(shè)置用況</p><p> 表 2.1.3種類數(shù)/重復(fù)數(shù)設(shè)置用況</p><p><b> 2.1.4重列游戲</b></p><p> 如表 2.1.4重列游戲用況<
31、/p><p> 表 2.1.4重列游戲用況</p><p> 2.1.5暫停/開始</p><p> 如表2.1.5暫停/開始用況</p><p> 表 2.1.5暫停/開始用況</p><p><b> 概念模型</b></p><p><b> 候選概
32、念</b></p><p> 游戲、重列、生成圖片數(shù)、選擇音樂文件、延長時間等</p><p><b> 關(guān)聯(lián)</b></p><p> 如圖 2.2.2關(guān)聯(lián)</p><p><b> 圖 2.2.2關(guān)聯(lián)</b></p><p><b> 屬性
33、</b></p><p><b> 圖 2.2.3屬性</b></p><p><b> 圖 2.2.3屬性</b></p><p><b> 概念模型圖</b></p><p> 圖 2.2.4概念模型圖</p><p><b
34、> 系統(tǒng)順序圖</b></p><p><b> 開始游戲順序圖</b></p><p><b> 如圖 2.3.1</b></p><p> 圖 2.3.1開始游戲順序圖</p><p><b> 修改背景音樂順序圖</b></p>
35、<p> 如圖 2.3.2修改背景音樂順序圖</p><p> 圖 2.3.2修改背景音樂順序圖</p><p><b> 重列游戲順序圖</b></p><p> 如圖 2.3.3重列游戲順序圖</p><p> 圖 2.3.3重列游戲順序圖</p><p> 種類數(shù)/重復(fù)
36、數(shù)順序圖</p><p> 如圖 2.3.4種類數(shù)/重復(fù)數(shù)順序圖</p><p> 圖 2.3.4種類數(shù)/重復(fù)數(shù)順序圖</p><p> 2.3.5暫停/開始順序圖</p><p> 如圖 2.3.5暫停/開始順序圖</p><p> 圖 2.3.5暫停/開始順序圖</p><p>&
37、lt;b> 設(shè)計階段</b></p><p><b> 協(xié)作圖</b></p><p><b> 修改背景音樂協(xié)作圖</b></p><p> 1. 如圖 3.1.1修改背景音樂的協(xié)作圖</p><p> 圖 3.1.1修改背景音樂的協(xié)作圖</p><
38、p><b> 2.解釋</b></p><p> 修改背景音樂信息被發(fā)送到一個系統(tǒng)實例,它對應(yīng)于修改背景音樂這個系統(tǒng)操作消息</p><p> 系統(tǒng)對象發(fā)送修改背景音樂消息到背景音樂的實例</p><p><b> 重列的協(xié)作圖</b></p><p> 1.如圖3.1.2重列的協(xié)作
39、圖</p><p> 圖 3.1.2重列的協(xié)作圖</p><p><b> 2.解釋</b></p><p> 重列信息被發(fā)送到一個系統(tǒng)實例,它對應(yīng)于重列這個系統(tǒng)操作消息</p><p> 系統(tǒng)對象發(fā)送重列消息到圖片的實例</p><p><b> 設(shè)計類圖</b>
40、</p><p><b> 軟件類</b></p><p><b> 加入方法</b></p><p><b> 加入關(guān)聯(lián)</b></p><p> 基本設(shè)計概念和處理流程</p><p><b> 界面設(shè)計與界面類</b>
41、;</p><p><b> 主界面</b></p><p> 如圖 3.4.1主界面</p><p> 圖 3.4.1主界面</p><p><b> 游戲失敗界面</b></p><p> 如圖 3.4.2游戲失敗界面</p><p>
42、 圖 3.4.2游戲失敗界面</p><p><b> 游戲控制區(qū)界面</b></p><p> 如圖 3.4.3游戲控制區(qū)界面</p><p> 圖 3.4.3游戲控制區(qū)界面</p><p><b> 3.4.4流程邏輯</b></p><p><b>
43、 構(gòu)造階段</b></p><p><b> 核心代碼</b></p><p> 圖片的隨機生成所用到的方法 </p><p> 說明:通過數(shù)組從圖片庫隨即獲取規(guī)定個數(shù)得到圖片,隨機分布在畫布上。圖片個數(shù)一定是偶數(shù)個。 </p><p><b> 代碼如下:</b></p
44、><p> namespace LLK</p><p><b> {</b></p><p> public partial class Form1 : Form</p><p><b> {</b></p><p> public Form1()</p>
45、<p><b> {</b></p><p> InitializeComponent();</p><p> IniteBmp(MAXPICS);</p><p><b> }</b></p><p> Music music = new Music();</p>
46、<p> SoundPlayer selectplayer = new SoundPlayer("Sounds\\select.wav");</p><p> SoundPlayer eraseplayer = new SoundPlayer("Sounds\\erase.wav");</p><p> SoundPlayer r
47、efreshplayer = new SoundPlayer("Sounds\\refresh.wav");</p><p> SoundPlayer bombplayer = new SoundPlayer("Sounds\\bomb.wav");</p><p> int[,] gmap = new int[MAPWIDTH,MAPHEIGH
48、T];//實際的圖片矩陣為19*11</p><p> Graphics g_g = null;//全局畫布</p><p> const int PBMAX = 100;//processbar的最大值</p><p> static int pbvalue=PBMAX;//proecssbar現(xiàn)在的值</p><p> stat
49、ic int reducestep = 1;//第次減少的步數(shù)</p><p> static long score = 0;//游戲得分</p><p><b> //圖片的寬和高</b></p><p> private const int PICWIDTH = 31;</p><p> private co
50、nst int PICHEIGHT = 34;</p><p> private const int MAPWIDTH = 19;</p><p> private const int MAPHEIGHT = 11;</p><p> private const int MAXPICS = 39;</p><p> //本局中圖片的數(shù)
51、量</p><p> private int picnum = 18;</p><p> private int multipic = 4;//一張圖片重復(fù)出來的次數(shù),一定為偶數(shù)</p><p> //加載到內(nèi)存中的圖片</p><p> Image[] img = new Image[39];</p><p>
52、; Image[] bombimg = new Image[6];</p><p> Kernal AI=null;</p><p><b> //游戲開始</b></p><p> bool bStart = false;</p><p><b> //加載圖</b></p>
53、<p> private void IniteBmp(int maxnum)</p><p><b> {</b></p><p> g_g = this.CreateGraphics();</p><p> for (int i = 0; i < MAPWIDTH; i++)</p><p>
54、; for (int j = 0; j < MAPHEIGHT; j++)</p><p> gmap[i, j] = 0;</p><p> IniteRandomMap(ref gmap, maxnum);</p><p> AI = new Kernal(ref gmap);</p><p> for (int i =
55、0; i < maxnum; i++)</p><p><b> {</b></p><p> ResourceManager rm = new ResourceManager("LLK.data", Assembly.GetExecutingAssembly());</p><p> img[i]= (Imag
56、e)rm.GetObject(i.ToString()+".bmp");</p><p> //img[i] = (Image)Bitmap.FromFile("Images\\"+(i+1).ToString()+".bmp");</p><p><b> }</b></p><p&
57、gt; for (int i = 0; i < 6; i++)</p><p><b> {</b></p><p> //bombimg[i] = (Image)Bitmap.FromFile("Images\\B"+(i+1).ToString()+".bmp");</p><p><
58、;b> }</b></p><p><b> }</b></p><p> private bool CheckWin(ref int[,] map)</p><p><b> {</b></p><p> bool Win = true;</p><
59、p> for (int i = 0; i < MAPWIDTH; i++)</p><p> for (int j = 0; j < MAPHEIGHT; j++)</p><p> if (map[i, j] != 0)</p><p> Win = false;</p><p> return Win;<
60、/p><p><b> }</b></p><p> private void IniteRandomMap(ref int[,] map,int num)</p><p><b> {</b></p><p> Random r=new Random();</p><p&g
61、t; while (num > 0)</p><p><b> {</b></p><p> for (int i = 0; i < multipic; i++)</p><p><b> {</b></p><p> int xrandom = r.Next(19) ;<
62、;/p><p> int yrandom = r.Next(11) ;</p><p> if (map[xrandom, yrandom] == 0)</p><p><b> {</b></p><p> map[xrandom, yrandom] = num;</p><p><b
63、> }</b></p><p><b> else</b></p><p><b> i--;</b></p><p><b> }</b></p><p><b> num--;</b></p><p>
64、;<b> }</b></p><p><b> }</b></p><p> private void FreshMap(ref int[,] map)</p><p><b> {</b></p><p> Random r = new Random();<
65、/p><p> for(int i=0;i<MAPWIDTH;i++)</p><p> for (int j = 0; j < MAPHEIGHT; j++)</p><p><b> {</b></p><p> if (gmap[i, j] != 0)</p><p><
66、;b> {</b></p><p> int x = r.Next(19);</p><p> int y = r.Next(11);</p><p> int temp = gmap[x, y];</p><p> gmap[x, y] = gmap[i, j];</p><p> gm
67、ap[i, j] = temp;</p><p><b> }</b></p><p><b> }</b></p><p> TransportMap(ref gmap);</p><p><b> }</b></p><p> privat
68、e void TransportMap(ref int[,] map)</p><p><b> {</b></p><p> for(int i=0;i<MAPWIDTH;i++)</p><p> for (int j = 0; j < MAPHEIGHT; j++)</p><p><b&g
69、t; {</b></p><p> AI.GiveMapValue(i, j, map[i, j]);</p><p><b> }</b></p><p><b> }</b></p><p> //在指定位置畫指定圖</p><p> privat
70、e void Draw(Graphics g, Image scrImg, int PicX,int PicY)</p><p><b> {</b></p><p> g.DrawImage(scrImg, new Point(PicX, PicY));</p><p><b> }</b></p>
71、<p> private void Form1_Paint(object sender, PaintEventArgs e)</p><p><b> {</b></p><p> g_g.DrawLine(new Pen(new SolidBrush(Color.DeepSkyBlue), 5), 0, 11 * 34 + 5, 19 * 34, 1
72、1 * 34 + 5);</p><p> if (bStart)</p><p><b> {</b></p><p> for (int i = 0; i < MAPWIDTH; i++)</p><p> for (int j = 0; j < MAPHEIGHT; j++)</p>
73、<p><b> {</b></p><p> if (gmap[i, j] != 0)</p><p><b> {</b></p><p> Draw(g_g, img[gmap[i, j] - 1], i * PICWIDTH, j * PICHEIGHT);</p><p&
74、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int two = 0;//用來計算點擊塊的次數(shù),最大為2</p>&l
75、t;p> Point fpoint;//記錄第一次點擊的位置</p><p> private void Form1_MouseDown(object sender, MouseEventArgs e)</p><p><b> {</b></p><p> int curx = e.X / 31;</p><
76、p> int cury = e.Y/ 34;</p><p> if (curx > 18 || cury > 10)</p><p><b> return;</b></p><p> if (gmap[curx, cury] != 0)</p><p><b> {</b&
77、gt;</p><p> selectplayer.Play();</p><p> Pen pen = new Pen(new SolidBrush(this.BackColor));</p><p> g_g.DrawRectangle(pen, new Rectangle(curx * 31, cury * 34, 31, 34));</p>
78、<p><b> two++;</b></p><p> switch (two)</p><p><b> {</b></p><p><b> case 1:</b></p><p> fpoint = new Point(curx, cury);&
79、lt;/p><p><b> break;</b></p><p><b> case 2:</b></p><p> if (AI.IsLink(fpoint.X, fpoint.Y, curx, cury))</p><p><b> {</b></p>
80、<p><b> two = 0;</b></p><p> eraseplayer.Play();</p><p><b> 過關(guān)設(shè)置 </b></p><p> 把界面上全部圖片都消去即為通過此關(guān),進入下一關(guān),種類數(shù)加1.</p><p><b> 代碼如下:&l
81、t;/b></p><p> //獲得拐點數(shù)目和位置,做畫線處理</p><p> ProcessCorner(fpoint,new Point(curx,cury));</p><p> if (CheckWin(ref gmap))</p><p><b> {</b></p><p
82、> starttimer = false;</p><p> MessageBox.Show("恭喜過關(guān)!");</p><p> bStart = false;</p><p> picnum++;//種類加1</p><p> if (picnum>38)</p><p>
83、<b> {</b></p><p> picnum = 39;</p><p> multipic += 2;</p><p> if (picnum * multipic > 209)</p><p><b> {</b></p><p> Messag
84、eBox.Show("你太強悍了,請聯(lián)系孫法憲(電話15838095284),請為你提高難度!哈哈!");</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p>
85、 button1_Click_1(sender, e);</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p
86、><b> two = 1;</b></p><p> fpoint = new Point(curx, cury);</p><p><b> }</b></p><p><b> break;</b></p><p><b> default:&l
87、t;/b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 得分設(shè)
88、置 </b></p><p><b> 說明:</b></p><p> 1:兩個目標是相同的 </p><p> 2:兩個目標之間連接線的折點不超過兩個。(連接線由x軸和y軸的平行線組成) 那么分析一下連接的情況可以看到,一般分三種情況</p><p> 1:直線相連 2:一個折點 3:兩個折點:
89、</p><p> 可以發(fā)現(xiàn),如果有折點,每個折點必定有且至少有一個坐標(x或者y)是和其中一個目標點是相同的,也就是說,折點必定在兩個目標點所在的x方向或y方向的直線上。</p><p><b> 所以設(shè)計思路就是:</b></p><p> 假設(shè)目標點 p1 , p2 ,如果有兩個折點分別為z1 , z2 那么,所要進行的是 <
90、/p><p> 1:如果驗證p1 , p2 直線連線,則連接成立 </p><p> 2:搜索以p1,p2的x,y方向四條直線(可能某兩條直線會重合)上的有限點,每次取兩點作為z1,z2 ,驗證p1到z1/z1到z2/z2到p2 是否都能直線相連 ,是則連接成立。</p><p><b> 代碼如下:</b></p><p
91、> //此方法用做處理畫線和消去,寫的比較爛</p><p> private void ProcessCorner(Point p1,Point p2)</p><p><b> {</b></p><p> Point[] corner = new Point[3];</p><p> corner
92、= AI.GetPoints();</p><p> Pen pen = new Pen(new SolidBrush(Color.Red), 5);//線畫筆</p><p> Pen bkpen = new Pen(new SolidBrush(this.BackColor), 5);//擦去畫筆</p><p> pbvalue += 4;</p&
93、gt;<p> // MoveUp(p1.X, p1.Y);</p><p> //MoveUp(p2.X, p2.Y);</p><p> switch (corner[2].X)</p><p><b> {</b></p><p><b> case 1:</b><
94、;/p><p> score += 20;//一個拐點加20;</p><p> g_g.DrawLine(pen, new Point(p1.X*31+15,p1.Y*34+17), new Point(corner[0].X*31+15,corner[0].Y*34+17));</p><p> g_g.DrawLine(pen, new Point(p2.X
95、 * 31+15, p2.Y * 34+17), new Point(corner[0].X * 31+15, corner[0].Y * 34+17));</p><p> Thread.Sleep(100);</p><p> EraseBlock(g_g, p1, p2);</p><p> g_g.DrawLine(bkpen, new Point(p
96、1.X * 31 + 15, p1.Y * 34 + 17), new Point(corner[0].X * 31 + 15, corner[0].Y * 34 + 17));</p><p> g_g.DrawLine(bkpen, new Point(p2.X * 31 + 15, p2.Y * 34 + 17), new Point(corner[0].X * 31 + 15, corner[0].Y
97、* 34 + 17));</p><p><b> break;</b></p><p><b> case 2:</b></p><p> score += 40;//兩個拐點加40</p><p> Point[] ps ={ new Point(p1.X*31+15,p1.Y*34+1
98、7),new Point( corner[1].X*31+15,corner[1].Y*34+17),new Point(corner[0].X*31+15,corner[0].Y*34+17),new Point(p2.X*31+15,p2.Y*34+17)};</p><p> g_g.DrawLines(pen, ps);</p><p> Thread.Sleep(100);&
99、lt;/p><p> EraseBlock(g_g, p1, p2);</p><p> g_g.DrawLines(bkpen,ps);</p><p> //foreach (Point mp in ps)</p><p><b> //{</b></p><p> //MessageB
100、ox.Show("("+mp.X.ToString()+","+mp.Y.ToString()+")");</p><p><b> //}</b></p><p><b> break;</b></p><p><b> case 0:</
101、b></p><p> score += 10;//直連加10</p><p> g_g.DrawLine(pen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(p2.X * 31 + 15, p2.Y * 34 + 17));</p><p> Thread.Sleep(100);</
102、p><p> EraseBlock(g_g, p1, p2);</p><p> g_g.DrawLine(bkpen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(p2.X * 31 + 15, p2.Y * 34 + 17));</p><p><b> break;</b>&
103、lt;/p><p> default: break;</p><p><b> }</b></p><p> //RefreshMap(ref gmap);</p><p> label5.Text = score.ToString();</p><p><b> }</b&
104、gt;</p><p> private void EraseBlock(Graphics g, Point p1, Point p2)</p><p><b> {</b></p><p> g.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(p1.X * 31,
105、p1.Y * 34, 31, 34));</p><p> g.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(p2.X * 31, p2.Y * 34, 31, 34));</p><p> gmap[p1.X, p1.Y] = 0;</p><p> gmap[p2.X, p2.Y]
106、= 0;</p><p> AI.GiveMapValue(p1.X, p1.Y, 0);</p><p> AI.GiveMapValue(p2.X, p2.Y, 0);</p><p><b> }</b></p><p> bool starttimer = false;</p><p&
107、gt; private void button1_Click_1(object sender, EventArgs e)</p><p><b> {</b></p><p> //處理Processbar</p><p> if (!starttimer)</p><p><b> {</b&
108、gt;</p><p> progressBar1.Value = PBMAX;</p><p> pbtimer.Interval = 500;</p><p> pbtimer.Start();</p><p> starttimer = true;</p><p><b> }</b&g
109、t;</p><p><b> //處理分數(shù)</b></p><p> score = 0;</p><p> picnum = Convert.ToInt16(textBox1.Text);</p><p> multipic = Convert.ToInt16(textBox2.Text);</p>
110、;<p> if (picnum * multipic > 209)</p><p><b> {</b></p><p> MessageBox.Show("游戲區(qū)域內(nèi)最多只有209個空,您選的數(shù)據(jù)太多!請重新選 !");</p><p> textBox1.Text = "18&qu
111、ot;;</p><p> textBox2.Text = "4";</p><p><b> return;</b></p><p><b> }</b></p><p> IniteBmp(picnum);</p><p> if (bSta
112、rt)</p><p><b> {</b></p><p> MessageBox.Show("游戲已在運行!");</p><p><b> return;</b></p><p><b> }</b></p><p>&
113、lt;b> else</b></p><p><b> {</b></p><p> bStart = true;</p><p> this.Invalidate();</p><p> music.Play("Sounds\\左邊.mp3");</p>&
114、lt;p> //music.Play("Sounds\\bg-07.mid");</p><p><b> }</b></p><p><b> }</b></p><p><b> //將塊向上移</b></p><p> private
115、void MoveUp(int x, int y)</p><p><b> {</b></p><p> if (y < 1)</p><p><b> return;</b></p><p> for (int i = y; i < MAPHEIGHT-1;i++ )<
116、/p><p><b> {</b></p><p> gmap[x, i] = gmap[x, i + 1];</p><p><b> }</b></p><p><b> }</b></p><p> private void RefreshM
117、ap(ref int[,] map)</p><p><b> {</b></p><p> if (bStart)</p><p><b> {</b></p><p> for (int i = 0; i < MAPWIDTH; i++)</p><p>
118、 for (int j = 0; j < MAPHEIGHT; j++)</p><p><b> {</b></p><p> if (gmap[i, j] != 0)</p><p><b> {</b></p><p> Draw(g_g, img[gmap[i, j] - 1]
119、, i * PICWIDTH, j * PICHEIGHT);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p
120、> private void button2_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> refreshplayer.Play();</p><p> FreshMap(ref gmap);</p><p> this.Inv
121、alidate();</p><p><b> }</b></p><p> /// 以下為爆炸處理</p><p> private void button3_Click(object sender, EventArgs e)</p><p><b> {</b></p>&
122、lt;p><b> }</b></p><p> private void pbtimer_Tick(object sender, EventArgs e)</p><p><b> {</b></p><p> pbvalue = pbvalue - reducestep;</p><p
123、> if (pbvalue > 100)</p><p> pbvalue = 100;</p><p> if (pbvalue == 0&&starttimer)</p><p><b> {</b></p><p> starttimer = false;</p>
124、<p> pbtimer.Stop();</p><p> MessageBox.Show("Failed!");</p><p><b> return;</b></p><p><b> }</b></p><p><b> else</
125、b></p><p> progressBar1.Value = pbvalue;</p><p><b> }</b></p><p> private void Form1_Load(object sender, EventArgs e)</p><p><b> {</b><
126、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 系統(tǒng)測試</b></p><p><b> 游戲測試結(jié)果</b>
127、</p><p> 在程序代碼基本完成后,經(jīng)過不斷的調(diào)試與修改,最后測試本次所設(shè)計的連連看游戲能夠正常運行,在基本功能與比較成熟的連連看游戲沒有太大差別,沒有出現(xiàn)明顯的錯誤和漏洞,但是在一些細節(jié)方面仍然需要完善,比如在游戲中可以加入一些聲音的提示,在游戲完成和失敗的時候可以彈出一些小的Flash動畫,還有就是可以加入一個連連看英雄榜等等??偟膩碚f本次設(shè)計在功能上已經(jīng)基本達到要求,其他細節(jié)方面有待以后完善。<
128、;/p><p><b> 功能實現(xiàn):正常</b></p><p><b> 用戶手冊</b></p><p><b> 系統(tǒng)主要功能</b></p><p> 重列道具,暫時/開始游戲</p><p><b> 運行環(huán)境要求</b&
129、gt;</p><p> 操作系統(tǒng):Windows 2000、Windows XP、Windows NT、Windows Vista、Windows 7</p><p> 必備組件包:Microsoft .NET Framework 2.0</p><p><b> 游戲操作方法</b></p><p> 第一次
130、使用鼠標點擊棋盤中的棋子,該棋子此時為“被選中”,以特殊方式顯示;再次以鼠標點擊其他棋子,若該棋子與被選中的棋子圖案相同,且把第一個棋子到第二個棋子連起來,中間的直線不超過 3 根,則消掉這一對棋子,否則第一顆棋子恢復(fù)成未被選中狀態(tài),而第二顆棋子變成被選中狀態(tài)。</p><p> 勝利條件 :消除畫面上所有圖片獲得一局勝利,種子數(shù)為18初始值時,總關(guān)數(shù)為4關(guān),4關(guān)完成后游戲通關(guān)當圖片的數(shù)量大于209張的時候完成
131、游戲后勝利</p><p> 失敗條件 :游戲所需時間用盡時,游戲結(jié)束</p><p> 計分規(guī)則 :兩圖片直連加強10分,一個拐點加20分,兩個拐點加30</p><p> 使用道具 :道具總共有兩種,第一種是重列道具,當玩家無法找到能消除的游戲圖片時,可以使用重列道具。</p><p><b> 畢業(yè)設(shè)計小結(jié)</b
132、></p><p> 這個游戲是我和傅丞合作完成的,由于以前沒有配合過,控件命名,代碼書寫都有各自的習(xí)慣,給程序的寫作帶來了很多的麻煩。為了克服這些困難解決這些問題,我們花了一下午的時間用于交流,結(jié)合個人的習(xí)慣,取長補短,去蕪存菁,統(tǒng)一了格式。</p><p> 實踐證明我們那一個下午沒有白費,在以后的合作中我們配合默契,節(jié)省了很多的時間。讓我明白了,團隊就不是一個人的事,要學(xué)會
133、適應(yīng),交流和包容。 </p><p> 這個游戲分兩個模塊,其中第一的內(nèi)容是非常分散,而且內(nèi)部又有很多小模塊,互相之間也有非常密切的聯(lián)系,很多變量之間數(shù)據(jù)的傳遞都要考慮好。而第二個模塊(即路徑判斷問題)相對比較集中,代碼內(nèi)容非常長,工作量也是很大的,且?guī)缀跞渴窃诖a中編寫,沒有添加什么界面上的控件操作。 </p><p> 另外這個游戲沒有用到數(shù)據(jù)庫,所使用的功能也不是很多,但
134、是由于考慮到要按固有的游戲規(guī)則來編寫,因此要寫較多時間考慮游戲怎么玩,怎么通過代碼判斷用戶每個鼠標點擊的坐標以及當前坐標位置代表的圖片內(nèi)容等各方面的判斷考慮得就較多了。 </p><p><b> 致 謝</b></p><p> 感謝所有關(guān)心、幫助過我們的老師、朋友和同學(xué)們,使我們大學(xué)三年的時光更加美好、難忘。</p><p>&l
135、t;b> 參考文獻</b></p><p> [1] 孫三才, 許薰尹.精通 C#與 ASP.net 程序設(shè)計.中國鐵道出版社 ;</p><p> [2] Charles C. Caison.ASP.NET 程序員查詢辭典.中國鐵道出版社 ;</p><p> [3] 2005 王興東.ASP & ASP.NET 應(yīng)用編程150例
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 連連看java小游戲畢業(yè)設(shè)計論文
- [畢業(yè)設(shè)計資料]連連看java小游戲畢業(yè)設(shè)計資料
- 畢業(yè)設(shè)計--連連看游戲設(shè)計與實現(xiàn)畢業(yè)設(shè)計實現(xiàn)
- 連連看游戲設(shè)計論文
- 連連看小游戲設(shè)計
- 畢業(yè)設(shè)計論文——連連看設(shè)計
- 連連看游戲開題報告
- 基于java連連看游戲
- 連連看畢業(yè)論文--基于安卓系統(tǒng)的趣味連連看游戲設(shè)計與實現(xiàn)
- 基于java的連連看游戲設(shè)計
- 連連看游戲機
- java課程設(shè)計--連連看游戲設(shè)計
- 連連看游戲設(shè)計與實現(xiàn)2
- 連連看游戲設(shè)計與實現(xiàn).docx
- qt連連看游戲設(shè)計與實現(xiàn)
- 安卓版連連看畢業(yè)設(shè)計報告
- 基于java的連連看游戲設(shè)計畢業(yè)論文
- 基于java的連連看游戲設(shè)計畢業(yè)論文
- android課程設(shè)計連連看小游戲
- 連連看游戲設(shè)計與實現(xiàn)論文.docx
評論
0/150
提交評論