版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
貪吃蛇項目五高等院校公共課系列精品教材C#程序設(shè)計了解集合和泛型學(xué)會動態(tài)數(shù)組ArrayList的使用熟練掌握使用屬性的get、set方法實現(xiàn)類之間的傳值掌握Point類的使用掌握控件MenuStrip、ColorDialog的使用學(xué)會使用鍵盤事件KeyDown和KeyPress技能目標(biāo)跑馬燈看上去就像一條貪吃蛇,給跑馬燈加上鍵盤控制事件,他就變成了貪吃蛇,再加上顏色的設(shè)置、食物的生成、貪吃蛇的生長和死亡等操作進(jìn)一步完成貪吃蛇游戲的設(shè)計。項目導(dǎo)讀任務(wù)1知識點(diǎn)任務(wù)2貪吃蛇項目案例知識梳理知識點(diǎn)任務(wù)1一、集合二、泛型集合知識梳理任務(wù)引入:用數(shù)組來存儲和操作一組數(shù)據(jù)的確很方便,但是,使用數(shù)組也是有約束條件的,比如:數(shù)組內(nèi)數(shù)據(jù)類型必須是同一類型,而且數(shù)組的大小必須提前指定足夠大的大小。那么有沒有比數(shù)組更靈活的解決方案呢?——當(dāng)然有,那就是集合。任務(wù)分析:集合中存放的數(shù)據(jù)類型可以是不同的,而且集合的大小也會隨著數(shù)據(jù)的插入而自動增長。當(dāng)然如果集合中元素的數(shù)據(jù)類型不同的話,有時也會帶了不少麻煩,比如:從集合中拿出元素時還要判斷它的類型才能使用。而泛型集合就解決了以上問題,因為泛型集合要求放入其中的數(shù)據(jù)必須是同一類型的,這點(diǎn)和數(shù)組類似,但是泛型集合的大小也是可以自動增長的。任務(wù)1知識點(diǎn)一、集合集合(Collection)類是專門用于數(shù)據(jù)存儲和檢索的類。這些類提供了對棧(stack)、隊列(queue)、動態(tài)數(shù)組(arrayList)和哈希表(hashtable)的支持。集合(Collection)類服務(wù)于不同的目的,如為元素動態(tài)分配內(nèi)存,基于索引訪問列表項等等。這些類創(chuàng)建Object類的對象的集合,在C#中,Object類是所有數(shù)據(jù)類型的基類。System.Collection命名空間主要包含如下幾種集合:動態(tài)數(shù)組ArrayList哈希表Hashtable堆棧Stack隊列Queue任務(wù)1知識點(diǎn)(一)動態(tài)數(shù)組動態(tài)數(shù)組(ArrayList)代表了可被單獨(dú)索引的對象的有序集合。它基本上可以替代一個數(shù)組。但是,與數(shù)組不同的是,可以使用索引在指定的位置添加和移除項目,動態(tài)數(shù)組會自動重新調(diào)整它的大小。它也允許在列表中進(jìn)行動態(tài)內(nèi)存分配、增加、搜索、排序各項。ArrayList類的常用屬性如下表所示。任務(wù)1知識點(diǎn)ArrayList類的常用方法如下:1.publicvirtualintAdd(objectvalue);2.publicvirtualvoidAddRange(ICollectionc);3.publicvirtualvoidClear();4.publicvirtualboolContains(objectitem);5.publicvirtualArrayListGetRange(intindex,intcount);6. publicvirtualintIndexOf(object);7. publicvirtualvoidInsert(intindex,objectvalue);8. publicvirtualvoidInsertRange(intindex,ICollectionc);9. publicvirtualvoidRemove(objectobj);10. publicvirtualvoidRemoveAt(intindex);任務(wù)1知識點(diǎn)11. publicvirtualvoidRemoveRange(intindex,intcount);12. publicvirtualvoidReverse();13. publicvirtualvoidSetRange(intindex,ICollectionc);14. publicvirtualvoidSort();15. publicvirtualvoidTrimToSize();任務(wù)1知識點(diǎn)(二)哈希表堆棧(Stack)代表了一個后進(jìn)先出的對象集合。當(dāng)需要對各項進(jìn)行后進(jìn)先出的訪問時,則使用堆棧。在列表中添加一項,稱為推入元素,從列表中移除一項時,稱為彈出元素。Stack類常用的屬性是Count,用戶獲取Stack中包含的元素個數(shù)。Stack類常用的方法如下:1. publicvirtualvoidClear();2. publicvirtualboolContains(objectobj);3. publicvirtualobjectPeek();4. publicvirtualobjectPop();5. publicvirtualvoidPush(objectobj);6. publicvirtualobject[]ToArray();任務(wù)1知識點(diǎn)(三)堆棧堆棧(Stack)代表了一個后進(jìn)先出的對象集合。需要對各項進(jìn)行后進(jìn)先出的訪問時,則使用堆棧。在列表中添加一項,稱為推入元素,從列表中移除一項時,稱為彈出元素。Stack類常用屬性是Count,用戶獲取Stack中包含的元素個數(shù)。Stack類常用方法如下:1. publicvirtualvoidClear();2. publicvirtualboolContains(objectobj);3. publicvirtualobjectPeek();4. publicvirtualobjectPop();5. publicvirtualvoidPush(objectobj);6. publicvirtualobject[]ToArray();任務(wù)1知識點(diǎn)(四)隊列Queue類常用方法如下:1. publicvirtualvoidClear();2. publicvirtualboolContains(objectobj);3. publicvirtualobjectDequeue();4. publicvirtualvoidEnqueue(objectobj);5. publicvirtualobject[]ToArray();6. publicvirtualvoidTrimToSize();任務(wù)1知識點(diǎn)二、泛型集合泛型集合是OOP(ObjectOrientedProgramming,面向?qū)ο蟪绦蛟O(shè)計)中的一個重要概念,主要目的是提高c#程序的性能。創(chuàng)建泛型集合,主要利用System.Collections.Generic命名空間下面的List泛型類創(chuàng)建集合,語法如下:List<T>myList=newList<T>();其中的“T”就是所要使用的類型,既可以是簡單類型,如string、int,也可以是用戶自定義類型。System.Collections.Generic命名空間常見的泛型集合有:列表List<T>、字典Dirctionary<TKey,TValue>、泛型堆棧Stack<T>和泛型隊列Queue<T>。任務(wù)1知識點(diǎn)(一)列表列表List<T>與數(shù)組特別接近,也是用的最多的泛型集合。常用的List<T>成員如表所示。任務(wù)1知識點(diǎn)(二)字典創(chuàng)建通用集合時,List<T>很有用,但有時需要一種集合:即將一組鍵映射到一組值(存儲若干項鍵值對),且不能有重復(fù)的鍵。常用的Dictionary<TKey,TValue>成員如表所示。任務(wù)1知識點(diǎn)(三)泛型堆棧泛型堆棧表示后進(jìn)先出LIFO集合,泛型堆棧和普通堆棧的區(qū)別是泛型堆棧要求入棧的元素必須是同一類型。泛型堆棧類Stack<T>以數(shù)組的方式實現(xiàn)了堆棧,其操作總是發(fā)生在集合末尾,且可包含重復(fù)的元素和null元素。常用的Stack<T>成員如表所示。任務(wù)1知識點(diǎn)(四)泛型隊列泛型隊列表示先進(jìn)先出FIFO集合,泛型隊列和普通隊列的區(qū)別是泛型隊列要求入隊的元素必須是同一類型。Queue<T>也可以包含重復(fù)的元素和null元素。常用的Queue<T>成員如表所示。任務(wù)1知識點(diǎn)貪吃蛇項目案例任務(wù)2一、創(chuàng)建項目二、界面布局三、編寫代碼知識梳理任務(wù)引入:如果對跑馬燈項目加上鍵盤控制移動方向功能的化,就有了貪吃蛇的雛形,同學(xué)們是不是都迫不及待了?在本任務(wù)中,我們一起來完成貪吃蛇游戲的開發(fā)。任務(wù)分析:要想開發(fā)一個完整的貪吃蛇游戲,需要考慮的問題還有很多,比如說:貪吃蛇用什么數(shù)據(jù)結(jié)構(gòu)存儲?最好用集合來存放,方便控制,大小也可以動態(tài)增長。還有,食物怎樣生成?貪吃蛇怎樣吃食物?怎樣增長?有幾種死法?……這些問題需要我們逐一解決。任務(wù)2貪吃蛇項目案例一、創(chuàng)建項目啟動VS2013以后,選擇“文件”菜單——“新建”——“項目”打開“新建項目”對話框,確認(rèn)左側(cè)目錄樹選中的是“VisualC#”選項,然后選擇“Windows窗體應(yīng)用程序”,瀏覽到項目的存放目錄“D:\CSharp”,名稱設(shè)置為“WGreedySnake”,進(jìn)入項目后,把自動生成的Form1窗體重命名為FrmMain,改名后按回車鍵確認(rèn),會彈出如圖所示的對話框另外,還需要添加Windows窗體類文件FrmDirSe.cst和兩個普通類文件Food.cs和Snake.cs,這幾個類都是通過右擊項目名稱“WGreedySnake”添加,添加完畢后項目結(jié)構(gòu)圖如圖所示。任務(wù)2貪吃蛇項目案例任務(wù)2貪吃蛇項目案例“MicrosoftVisualStudio”對話框
添加完畢后項目結(jié)構(gòu)圖二、界面布局本項目共包含兩個Windows窗體:主窗體FrmMain和鍵盤方向設(shè)置FrmDirSet,其中FrmMain界面布局如圖所示,依次從工具箱中將每個控件添加到FrmMain窗體中。任務(wù)2貪吃蛇項目案例FrmMain窗體中主要控件的屬性和事件設(shè)置如表5-6所示,其中ColorDialog控件是顏色選擇對話框,可以用來選擇蛇體和食物的顏色。任務(wù)2貪吃蛇項目案例任務(wù)2貪吃蛇項目案例
添加多個子菜單界面布局三、編寫代碼本項目的后臺代碼主要分布在Food.cs、Snake.cs、FrmDirSet.cs和FrmMain.cs四個類文件中。(一)Food.cs類使用#region進(jìn)行代碼折疊以后的效果如圖所示,需要手動引入兩個命名空間System.Windows.Forms和System.Drawing。任務(wù)2貪吃蛇項目案例1.定義三個字段2.定義兩個屬性,分別對應(yīng)兩個字段location和foodColor,用于類間傳值。3.編寫PutFood()方法,該方法包含一個Control類型的參數(shù),表示存放食物的容器控件,實際對應(yīng)主窗體中的Panel控件。4.編寫ChangePostion()方法,其功能是:當(dāng)前食物被貪吃蛇吃掉以后,用更新位置來模擬重新生成新的食物。任務(wù)2貪吃蛇項目案例(二)Snake.cs類使用#region進(jìn)行代碼折疊以后的效果如圖所示,需要手動引入三個命名空間System.Windows.Forms、System.Drawing和System.Collections。任務(wù)2貪吃蛇項目案例1.定義枚舉類型Direction(在類Snake的上面,命名空間里面,和類Snake是平行的)2.定義三個字段3.定義兩個屬性,分別對應(yīng)兩個字段snakeColor和mySnake,用于類間傳值。4.編寫CreateSnake()方法,該方法包含一個Control類型的參數(shù),表示存放貪吃蛇的容器控件,實際對應(yīng)主窗體中的Panel控件。5.編寫SnakeMove()方法,其功能是讓貪吃蛇動起來,并根據(jù)字段dir的變化而改變移動方向,算法思路和跑馬燈項目的timer2_Click()類似。6.編寫IsDead()方法,該方法返回類型是布爾型,用于判斷貪吃蛇是否死亡,撞到容器的邊沿或者撞到貪吃蛇自身都會導(dǎo)致死亡。7.編寫EatFood()方法,該方法返回類型是布爾型,有兩個參數(shù),分別是食物和貪吃蛇所在的容器。任務(wù)2貪吃蛇項目案例(三)FrmDirSet.cs類使用#region進(jìn)行代碼折疊以后的效果如圖所示,由于該類在創(chuàng)建時選擇的是Windows窗體,所以無需手動導(dǎo)入命名空間System.Windows.Forms。任務(wù)2貪吃蛇項目案例1.定義一個字段,用于存放鍵盤信息2.定義一個屬性,把對應(yīng)字段myKeys的讀寫操作都公有化。3.編寫窗體FrmDirSet的Load事件綁定的方法FrmDirSet_Load()。4.分別編寫五個文本框的鍵盤按下事件綁定的方法txtUp_KeyDown()、txtDown_KeyDown()、txtLeft_KeyDown()、txtRight_KeyDown()、txtStop_KeyDown()。任務(wù)2貪吃蛇項目案例(四)FrmMain.cs類使用#region進(jìn)行代碼折疊以后的效果如圖所示,由于該類在創(chuàng)建時選擇的是Windows窗體,所以無需手動導(dǎo)入命名空間System.Windows.Forms。任務(wù)2貪吃蛇項目案例1.定義五個字段。2.編寫“開始游戲”按鈕的單擊事件綁定的方法btnStart_Click(),啟動貪吃蛇游戲,該方法是在設(shè)計界面雙擊控件btnStart自動生成的。3.編寫timer1_Tick()方法,該方法是在設(shè)計界面雙擊控件timer1自動生成的4.編寫窗體FrmMain的鍵盤按下事件綁定
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國離心風(fēng)機(jī)行業(yè)發(fā)展需求及投資戰(zhàn)略分析報告
- 2024-2030年中國眼鏡鏡片行業(yè)營銷模式及未來發(fā)展趨勢預(yù)測報告版
- 2024年耐高溫超輕硅酸鈣隔熱保濕材料項目評估分析報告
- 甘肅省白銀市第九中學(xué)2025屆物理高三上期中統(tǒng)考試題含解析
- 2025屆山東省威海市物理高二第一學(xué)期期中綜合測試模擬試題含解析
- 江西省撫州市臨川實驗學(xué)校重點(diǎn)班2025屆高三物理第一學(xué)期期末預(yù)測試題含解析
- 湖南省洞口縣第九中學(xué)2025屆物理高二上期中統(tǒng)考模擬試題含解析
- 山東省臨沂市2025屆物理高三上期中質(zhì)量跟蹤監(jiān)視試題含解析
- 重慶市江津區(qū)高2025屆物理高三上期中達(dá)標(biāo)檢測試題含解析
- 2025屆廣東省五校高一物理第一學(xué)期期末經(jīng)典模擬試題含解析
- 中國聯(lián)通LAN工程施工及驗收規(guī)范
- 中間表模式接口相關(guān)-住院與his-adt方案
- 臨床PCR檢驗的室內(nèi)質(zhì)控方法課件
- 計算機(jī)解決問題的過程-優(yōu)質(zhì)課課件
- 作文講評-“忘不了……”課件
- 深基坑安全管理(安全培訓(xùn))課件
- pep四年級上冊英語期中復(fù)習(xí)課件
- 12月4日全國法制宣傳日憲法日憲法知識科普宣教PPT教學(xué)課件
- 血液透析營養(yǎng)管理課件
- 神經(jīng)內(nèi)科醫(yī)療質(zhì)量評價體系考核標(biāo)準(zhǔn)
- 綠化監(jiān)理實施細(xì)則
評論
0/150
提交評論