連連看游戲畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)文檔</b></p><p>  題 目: 連連看 </p><p>  作 者: </p><p>  系 別: 信息系 班級(jí): 三隊(duì) </p><p>  專(zhuān) 業(yè): 信

2、息網(wǎng)絡(luò)安全監(jiān)察(軟件方向)</p><p>  指導(dǎo)教師: </p><p><b>  前 言</b></p><p>  現(xiàn)在小游戲、網(wǎng)頁(yè)游戲越來(lái)越受網(wǎng)民歡迎,除了玩的方法簡(jiǎn)單外(不像其他游戲還需要注冊(cè)下載繁瑣過(guò)程),很多游戲不乏經(jīng)典。連連看游戲就是典型了!</p&

3、gt;<p>  游戲“連連看”,只要將相同花色的兩張牌用三根以?xún)?nèi)的直線連在一起就可以消除,規(guī)則簡(jiǎn)單容易上手。游戲速度節(jié)奏快,畫(huà)面清晰可愛(ài),老少皆宜。</p><p>  不管你走到哪個(gè)游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)休閑小游戲。</p><p>  豐富的道具和公共模

4、式的加入,增強(qiáng)游戲的競(jìng)爭(zhēng)性。多樣式的地圖,使玩家在各個(gè)游戲水平都可以尋找到挑戰(zhàn)的目標(biāo),長(zhǎng)期地保持游戲的新鮮感。使用新穎的連擊積分規(guī)則,使游戲玩家在體會(huì)連擊的快感后,同時(shí)對(duì)自己的游戲速度,更有挑戰(zhàn)性和追求極速的欲望。</p><p>  游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨(dú)特的魅力在全世界的娛樂(lè)領(lǐng)域占據(jù)主流位置,我們?cè)诔姓J(rèn)廣大娛樂(lè)網(wǎng)民的選擇空間狹小的同時(shí),也必須明確的一點(diǎn)就是游戲本身所具有的強(qiáng)大的吸引力。

5、游戲的吸引力主要在于,它在讓玩家打發(fā)時(shí)間的同時(shí),可以讓人實(shí)現(xiàn)在顯示生活中不能實(shí)現(xiàn)的理想,得到在現(xiàn)實(shí)中不能得到的東西。而且游戲產(chǎn)業(yè)促動(dòng)高科技技術(shù)不斷升級(jí),作為經(jīng)濟(jì)增長(zhǎng)的一大支撐點(diǎn),已經(jīng)成為經(jīng)濟(jì)騰飛的“第四產(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章 項(xiàng)目概述3</p><p>  1.1 項(xiàng)目背景3</p><p>  1.2 任務(wù)概述3</p><p>  1.3

7、項(xiàng)目開(kāi)發(fā)計(jì)劃4</p><p><b>  1.4 術(shù)語(yǔ)表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è)計(jì)階段16</p><p>  3.1 協(xié)作圖16</p><p>  3.2 設(shè)計(jì)類(lèi)圖17</p><p>  3.3 界面設(shè)計(jì)與界面類(lèi)18</p><p>  第4章 構(gòu)造階段20</p><p>  4.1 核心代碼20</p><p> 

9、 4.2 系統(tǒng)測(cè)試26</p><p>  第5章 用戶手冊(cè)30</p><p>  5.1 系統(tǒng)主要功能30</p><p>  5.2 運(yùn)行環(huán)境要求30</p><p>  5.3 游戲操作方法30</p><p>  第6章 畢業(yè)設(shè)計(jì)小結(jié)31</p><p><b>

10、  致 謝32</b></p><p><b>  參考文獻(xiàn)32</b></p><p><b>  摘 要</b></p><p>  小游戲制作的目的是滿足了人們休閑的需要,在緊張工作之余休閑類(lèi)的小游戲能夠給人帶來(lái)最大程度的放松,也可以增進(jìn)人們之間的交流,溝通,通過(guò)游戲還可以認(rèn)識(shí)更多的朋友。 &

11、lt;/p><p>  本程序?qū)⑷陙?lái)所學(xué)的專(zhuān)業(yè)知識(shí)和其他方面的知識(shí)融入到實(shí)際應(yīng)用中。</p><p>  通過(guò)此次課題的設(shè)計(jì),掌握如何制作一個(gè)游戲軟件,以及制作游戲軟件的整個(gè)流程,制作游戲軟件的步驟,為以后的就業(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>  項(xiàng)目概述</b></p><p><b>  項(xiàng)目背景</b></p><p>  現(xiàn)在小游戲、網(wǎng)頁(yè)游戲越來(lái)越受網(wǎng)民歡迎,除了玩的方法簡(jiǎn)單外(不像其他游戲還需要注冊(cè)下載繁瑣過(guò)程),很多游戲不乏經(jīng)典。連連看游戲

16、就是典型了!</p><p>  游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨(dú)特的魅力在全世界的娛樂(lè)領(lǐng)域占據(jù)主流位置,我們?cè)诔姓J(rèn)廣大娛樂(lè)網(wǎng)民的選擇空間狹小的同時(shí),也必須明確的一點(diǎn)就是游戲本身所具有的強(qiáng)大的吸引力。游戲的吸引力主要在于,它在讓玩家打發(fā)時(shí)間的同時(shí),可以讓人實(shí)現(xiàn)在顯示生活中不能實(shí)現(xiàn)的理想,得到在現(xiàn)實(shí)中不能得到的東西。而且游戲產(chǎn)業(yè)促動(dòng)高科技技術(shù)不斷升級(jí),作為經(jīng)濟(jì)增長(zhǎng)的一大支撐點(diǎn),已經(jīng)成為經(jīng)濟(jì)騰飛的“第四

17、產(chǎn)業(yè)”。</p><p>  相關(guān)技術(shù)及開(kāi)發(fā)工具介紹</p><p>  本系統(tǒng)采用面向?qū)ο蟮能浖_(kāi)發(fā)辦法,Microsoft公司的可視化集成開(kāi)發(fā)以 環(huán)境 Visual Studio .Net作為開(kāi)發(fā)平臺(tái),以C#作為開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)預(yù)定的需求功能。 </p><p>  Visual Studio .Net 集成開(kāi)發(fā)環(huán)境簡(jiǎn)介: .Net是Microsoft XML We

18、b services 平臺(tái)。.Net平臺(tái)為創(chuàng)建新一代分布式Web應(yīng)用提供了所有的工具和技術(shù)(表示技術(shù)、構(gòu)件技術(shù)和數(shù)據(jù)庫(kù)技術(shù))。它支持標(biāo)準(zhǔn)的 Internet 協(xié)議,包括 HTTP 協(xié)議、XML(可擴(kuò)展標(biāo)記語(yǔ)言)和SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,從而實(shí)現(xiàn)了異構(gòu)系統(tǒng)間應(yīng)用程序的集成和通信。.Net平臺(tái)包括5個(gè)主要部分:Windows .Net ,.Net 企業(yè)級(jí)服務(wù)器,.Net Web服務(wù)構(gòu)件,.Net Framework ,Visual St

19、udio .Net,Windows .Net ,.Net企業(yè)級(jí)服務(wù)器,.Net Web服務(wù)構(gòu)件,.Net Framework ,Visual Studio .Net,Visual Studio .Net是為建立基于.Net Framework 應(yīng)用程序而設(shè)的一個(gè)可視化集成開(kāi)發(fā)環(huán)境,它提供了更優(yōu)秀的多種編譯語(yǔ)言的編輯和編譯統(tǒng)一的開(kāi)發(fā)平臺(tái),他是一個(gè)快速開(kāi)發(fā)企業(yè)級(jí)Web 應(yīng)用程序以及高性能桌面應(yīng)用的工具。它為所有的編程語(yǔ)言提供了簡(jiǎn)單統(tǒng)一的代

20、碼編輯器,包括XML</p><p>  1.3.2 C#語(yǔ)言簡(jiǎn)介: C#是一種現(xiàn)代的、面向?qū)ο蟮恼Z(yǔ)言,它結(jié)合了C/C++和 Visual C++的強(qiáng)大功能以及Visual Basic的簡(jiǎn)單易用性。C#有以下新特性:簡(jiǎn)單:C#做了些該進(jìn),使語(yǔ)言更簡(jiǎn)單;面向?qū)ο螅篊#支持面向?qū)ο蟮娜N編程原則:封裝、繼承和多態(tài);類(lèi)型安全:C#去掉了指針,從根本上保證了程序的穩(wěn)定性和類(lèi)型安全;版本控制:C#實(shí)現(xiàn)了版本技術(shù),避免了“D

21、LL 災(zāi)難” ;兼容性:C#允許在遵守.Net Framework CLS 的條件下訪問(wèn)不同的 API, 可以與 Windows 的幾種傳統(tǒng)服務(wù)交互;靈活性:C#允許聲明一些不安全的方法和類(lèi),從而使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組??傊?,C#是一種安全的、穩(wěn)定的、簡(jiǎn)單的、優(yōu)雅的,由C和C++衍生出來(lái)的面向?qū)ο蟮木幊陶Z(yǔ)言,它在繼承C和C++強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性(例如沒(méi)有宏和模板,不允許多重繼承)。C#綜合了VB簡(jiǎn)單的可視化操作和C

22、++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語(yǔ)法風(fēng)格、創(chuàng)新的語(yǔ)言特性和便捷的面向組件編程的支持成為.NET 開(kāi)發(fā)的首選語(yǔ)言。</p><p><b>  任務(wù)概述</b></p><p><b>  任務(wù)概述</b></p><p><b>  實(shí)現(xiàn)單機(jī)版連連看</b></p><

23、p>  開(kāi)始游戲后,隨機(jī)生成圖片位置</p><p><b>  游戲中可使用道具</b></p><p><b>  實(shí)現(xiàn)目標(biāo)</b></p><p><b>  游戲概況</b></p><p><b>  方案論證</b></p>

24、<p><b>  界面設(shè)計(jì)</b></p><p><b>  圖片選取及生成</b></p><p><b>  算法路徑實(shí)現(xiàn)</b></p><p><b>  游戲運(yùn)行</b></p><p><b>  項(xiàng)目開(kāi)發(fā)計(jì)劃<

25、/b></p><p>  如表11項(xiàng)目開(kāi)發(fā)計(jì)劃</p><p>  日期 階段</p><p>  2月19到2月24 確定設(shè)計(jì)方向</p><p>  2月24到3月5

26、 可行性分析</p><p>  3月5到3月11 概要設(shè)計(jì)</p><p>  3月12到3月17 詳細(xì)設(shè)計(jì)</p><p>  3月19到4月7 編寫(xiě)代碼</p><p>  4月9

27、到4月14 軟件測(cè)試</p><p>  4月14到4月18 編寫(xiě)項(xiàng)目文檔 </p><p><b>  術(shù)語(yǔ)表</b></p><p>  重列:將游戲中的所有對(duì)子重新排列一次。</p><p>  延長(zhǎng)時(shí)間:將游

28、戲中的使用時(shí)間延長(zhǎng)。</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>  開(kāi)始游戲</b></p><p><b>  如表 2.1.2</b></p><p>  表 2.1.2開(kāi)始游戲用況</p

30、><p><b>  種類(lèi)數(shù)/重復(fù)數(shù)設(shè)置</b></p><p>  如表 2.1.3種類(lèi)數(shù)/重復(fù)數(shù)設(shè)置用況</p><p>  表 2.1.3種類(lèi)數(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暫停/開(kāi)始</p><p>  如表2.1.5暫停/開(kāi)始用況</p><p>  表 2.1.5暫停/開(kāi)始用況</p><p><b>  概念模型</b></p><p><b>  候選概

32、念</b></p><p>  游戲、重列、生成圖片數(shù)、選擇音樂(lè)文件、延長(zhǎng)時(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>  開(kāi)始游戲順序圖</b></p><p><b>  如圖 2.3.1</b></p><p>  圖 2.3.1開(kāi)始游戲順序圖</p><p><b>  修改背景音樂(lè)順序圖</b></p>

35、<p>  如圖 2.3.2修改背景音樂(lè)順序圖</p><p>  圖 2.3.2修改背景音樂(lè)順序圖</p><p><b>  重列游戲順序圖</b></p><p>  如圖 2.3.3重列游戲順序圖</p><p>  圖 2.3.3重列游戲順序圖</p><p>  種類(lèi)數(shù)/重復(fù)

36、數(shù)順序圖</p><p>  如圖 2.3.4種類(lèi)數(shù)/重復(fù)數(shù)順序圖</p><p>  圖 2.3.4種類(lèi)數(shù)/重復(fù)數(shù)順序圖</p><p>  2.3.5暫停/開(kāi)始順序圖</p><p>  如圖 2.3.5暫停/開(kāi)始順序圖</p><p>  圖 2.3.5暫停/開(kāi)始順序圖</p><p>&

37、lt;b>  設(shè)計(jì)階段</b></p><p><b>  協(xié)作圖</b></p><p><b>  修改背景音樂(lè)協(xié)作圖</b></p><p>  1. 如圖 3.1.1修改背景音樂(lè)的協(xié)作圖</p><p>  圖 3.1.1修改背景音樂(lè)的協(xié)作圖</p><

38、p><b>  2.解釋</b></p><p>  修改背景音樂(lè)信息被發(fā)送到一個(gè)系統(tǒng)實(shí)例,它對(duì)應(yīng)于修改背景音樂(lè)這個(gè)系統(tǒng)操作消息</p><p>  系統(tǒng)對(duì)象發(fā)送修改背景音樂(lè)消息到背景音樂(lè)的實(shí)例</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ā)送到一個(gè)系統(tǒng)實(shí)例,它對(duì)應(yīng)于重列這個(gè)系統(tǒng)操作消息</p><p>  系統(tǒng)對(duì)象發(fā)送重列消息到圖片的實(shí)例</p><p><b>  設(shè)計(jì)類(lèi)圖</b>

40、</p><p><b>  軟件類(lèi)</b></p><p><b>  加入方法</b></p><p><b>  加入關(guān)聯(lián)</b></p><p>  基本設(shè)計(jì)概念和處理流程</p><p><b>  界面設(shè)計(jì)與界面類(lèi)</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>  圖片的隨機(jī)生成所用到的方法 </p><p>  說(shuō)明:通過(guò)數(shù)組從圖片庫(kù)隨即獲取規(guī)定個(gè)數(shù)得到圖片,隨機(jī)分布在畫(huà)布上。圖片個(gè)數(shù)一定是偶數(shù)個(gè)。 </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];//實(shí)際的圖片矩陣為19*11</p><p>  Graphics g_g = null;//全局畫(huà)布</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ù)出來(lái)的次數(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>  //游戲開(kāi)始</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>  //在指定位置畫(huà)指定圖</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;//用來(lái)計(jì)算點(diǎn)擊塊的次數(shù),最大為2</p>&l

75、t;p>  Point fpoint;//記錄第一次點(diǎn)擊的位置</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ò)關(guān)設(shè)置 </b></p><p>  把界面上全部圖片都消去即為通過(guò)此關(guān),進(jìn)入下一關(guān),種類(lèi)數(shù)加1.</p><p><b>  代碼如下:&l

81、t;/b></p><p>  //獲得拐點(diǎn)數(shù)目和位置,做畫(huà)線處理</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ò)關(guān)!");</p><p>  bStart = false;</p><p>  picnum++;//種類(lèi)加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("你太強(qiáng)悍了,請(qǐng)聯(lián)系孫法憲(電話15838095284),請(qǐng)為你提高難度!哈哈!");</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>  說(shuō)明:</b></p><p>  1:兩個(gè)目標(biāo)是相同的 </p><p>  2:兩個(gè)目標(biāo)之間連接線的折點(diǎn)不超過(guò)兩個(gè)。(連接線由x軸和y軸的平行線組成) 那么分析一下連接的情況可以看到,一般分三種情況</p><p>  1:直線相連 2:一個(gè)折點(diǎn) 3:兩個(gè)折點(diǎn):

89、</p><p>  可以發(fā)現(xiàn),如果有折點(diǎn),每個(gè)折點(diǎn)必定有且至少有一個(gè)坐標(biāo)(x或者y)是和其中一個(gè)目標(biāo)點(diǎn)是相同的,也就是說(shuō),折點(diǎn)必定在兩個(gè)目標(biāo)點(diǎn)所在的x方向或y方向的直線上。</p><p><b>  所以設(shè)計(jì)思路就是:</b></p><p>  假設(shè)目標(biāo)點(diǎn) p1 , p2 ,如果有兩個(gè)折點(diǎn)分別為z1 , z2 那么,所要進(jìn)行的是 <

90、/p><p>  1:如果驗(yàn)證p1 , p2 直線連線,則連接成立 </p><p>  2:搜索以p1,p2的x,y方向四條直線(可能某兩條直線會(huì)重合)上的有限點(diǎn),每次取兩點(diǎn)作為z1,z2 ,驗(yàn)證p1到z1/z1到z2/z2到p2 是否都能直線相連 ,是則連接成立。</p><p><b>  代碼如下:</b></p><p

91、>  //此方法用做處理畫(huà)線和消去,寫(xiě)的比較爛</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);//線畫(huà)筆</p><p>  Pen bkpen = new Pen(new SolidBrush(this.BackColor), 5);//擦去畫(huà)筆</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;//一個(gè)拐點(diǎn)加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;//兩個(gè)拐點(diǎn)加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>  //處理分?jǐn)?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個(gè)空,您選的數(shù)據(jù)太多!請(qǐng)重新選 !");</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("游戲已在運(yùn)行!");</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)測(cè)試</b></p><p><b>  游戲測(cè)試結(jié)果</b>

127、</p><p>  在程序代碼基本完成后,經(jīng)過(guò)不斷的調(diào)試與修改,最后測(cè)試本次所設(shè)計(jì)的連連看游戲能夠正常運(yùn)行,在基本功能與比較成熟的連連看游戲沒(méi)有太大差別,沒(méi)有出現(xiàn)明顯的錯(cuò)誤和漏洞,但是在一些細(xì)節(jié)方面仍然需要完善,比如在游戲中可以加入一些聲音的提示,在游戲完成和失敗的時(shí)候可以彈出一些小的Flash動(dòng)畫(huà),還有就是可以加入一個(gè)連連看英雄榜等等??偟膩?lái)說(shuō)本次設(shè)計(jì)在功能上已經(jīng)基本達(dá)到要求,其他細(xì)節(jié)方面有待以后完善。<

128、;/p><p><b>  功能實(shí)現(xiàn):正常</b></p><p><b>  用戶手冊(cè)</b></p><p><b>  系統(tǒng)主要功能</b></p><p>  重列道具,暫時(shí)/開(kāi)始游戲</p><p><b>  運(yùn)行環(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、使用鼠標(biāo)點(diǎn)擊棋盤(pán)中的棋子,該棋子此時(shí)為“被選中”,以特殊方式顯示;再次以鼠標(biāo)點(diǎn)擊其他棋子,若該棋子與被選中的棋子圖案相同,且把第一個(gè)棋子到第二個(gè)棋子連起來(lái),中間的直線不超過(guò) 3 根,則消掉這一對(duì)棋子,否則第一顆棋子恢復(fù)成未被選中狀態(tài),而第二顆棋子變成被選中狀態(tài)。</p><p>  勝利條件 :消除畫(huà)面上所有圖片獲得一局勝利,種子數(shù)為18初始值時(shí),總關(guān)數(shù)為4關(guān),4關(guān)完成后游戲通關(guān)當(dāng)圖片的數(shù)量大于209張的時(shí)候完成

131、游戲后勝利</p><p>  失敗條件 :游戲所需時(shí)間用盡時(shí),游戲結(jié)束</p><p>  計(jì)分規(guī)則 :兩圖片直連加強(qiáng)10分,一個(gè)拐點(diǎn)加20分,兩個(gè)拐點(diǎn)加30</p><p>  使用道具 :道具總共有兩種,第一種是重列道具,當(dāng)玩家無(wú)法找到能消除的游戲圖片時(shí),可以使用重列道具。</p><p><b>  畢業(yè)設(shè)計(jì)小結(jié)</b

132、></p><p>  這個(gè)游戲是我和傅丞合作完成的,由于以前沒(méi)有配合過(guò),控件命名,代碼書(shū)寫(xiě)都有各自的習(xí)慣,給程序的寫(xiě)作帶來(lái)了很多的麻煩。為了克服這些困難解決這些問(wèn)題,我們花了一下午的時(shí)間用于交流,結(jié)合個(gè)人的習(xí)慣,取長(zhǎng)補(bǔ)短,去蕪存菁,統(tǒng)一了格式。</p><p>  實(shí)踐證明我們那一個(gè)下午沒(méi)有白費(fèi),在以后的合作中我們配合默契,節(jié)省了很多的時(shí)間。讓我明白了,團(tuán)隊(duì)就不是一個(gè)人的事,要學(xué)會(huì)

133、適應(yīng),交流和包容。 </p><p>  這個(gè)游戲分兩個(gè)模塊,其中第一的內(nèi)容是非常分散,而且內(nèi)部又有很多小模塊,互相之間也有非常密切的聯(lián)系,很多變量之間數(shù)據(jù)的傳遞都要考慮好。而第二個(gè)模塊(即路徑判斷問(wèn)題)相對(duì)比較集中,代碼內(nèi)容非常長(zhǎng),工作量也是很大的,且?guī)缀跞渴窃诖a中編寫(xiě),沒(méi)有添加什么界面上的控件操作。 </p><p>  另外這個(gè)游戲沒(méi)有用到數(shù)據(jù)庫(kù),所使用的功能也不是很多,但

134、是由于考慮到要按固有的游戲規(guī)則來(lái)編寫(xiě),因此要寫(xiě)較多時(shí)間考慮游戲怎么玩,怎么通過(guò)代碼判斷用戶每個(gè)鼠標(biāo)點(diǎn)擊的坐標(biāo)以及當(dāng)前坐標(biāo)位置代表的圖片內(nèi)容等各方面的判斷考慮得就較多了。 </p><p><b>  致 謝</b></p><p>  感謝所有關(guān)心、幫助過(guò)我們的老師、朋友和同學(xué)們,使我們大學(xué)三年的時(shí)光更加美好、難忘。</p><p>&l

135、t;b>  參考文獻(xiàn)</b></p><p>  [1] 孫三才, 許薰尹.精通 C#與 ASP.net 程序設(shè)計(jì).中國(guó)鐵道出版社 ;</p><p>  [2] Charles C. Caison.ASP.NET 程序員查詢(xún)辭典.中國(guó)鐵道出版社 ;</p><p>  [3] 2005 王興東.ASP & ASP.NET 應(yīng)用編程150例

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論