![坦克大戰(zhàn)需求分析_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa1.gif)
![坦克大戰(zhàn)需求分析_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa2.gif)
![坦克大戰(zhàn)需求分析_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa3.gif)
![坦克大戰(zhàn)需求分析_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa4.gif)
![坦克大戰(zhàn)需求分析_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa/a2a67544-ba90-4c41-ac5c-1a4b8f6fdbfa5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、坦克大戰(zhàn)總結(jié)+轉(zhuǎn)載分類:.NET開(kāi)發(fā)C#語(yǔ)言1. 首先進(jìn)行需求分析想要實(shí)現(xiàn)一個(gè)坦克大戰(zhàn)的游戲,游戲中有我方坦克和對(duì)方坦克,還有我的基地,磚墻,鐵墻,水,綠草地還有背景,以及背景音音樂(lè)。我方坦克和對(duì)方坦克都可以上下左右移動(dòng),游戲的玩家通過(guò)減排來(lái)控制坦克的移動(dòng)和發(fā)射子彈,對(duì)方坦克在創(chuàng)建的時(shí)候就能夠發(fā)出子彈。當(dāng)子彈與坦克相碰時(shí)會(huì)有火花產(chǎn)生。當(dāng)我方坦克被對(duì)方的子彈打中,或者總部被毀時(shí)或者我方坦克打中對(duì)方坦克的數(shù)目達(dá)到某個(gè)值時(shí)游戲結(jié)束。2. 程序設(shè)計(jì)在Rational中畫(huà)出總體框架A背景,有高度,寬度和位置,能夠被繪制;B鐵墻,磚墻,水,綠草地等障礙物,應(yīng)該建立一個(gè)障礙物,將他們放到障礙物中。他們的屬性
2、都有位置、高度和寬度。鐵墻不能被子彈打壞,子彈和坦克不能穿過(guò);磚墻子彈和坦克不能穿過(guò),但是能夠被子彈打壞;水不能被子彈打壞,子彈和坦克不能夠穿過(guò);綠草地 不能被子彈打壞,子彈和坦克能穿過(guò)(相當(dāng)于一張圖片)。C坦克包括我方坦克和對(duì)方坦克,坦克有位置,速度,高度和寬度,能夠移動(dòng),繪制,發(fā)射子彈,向上下左右方向轉(zhuǎn)動(dòng)。D子彈包括我方子彈和對(duì)方子彈,子彈有速度和位置,能夠被繪制和移動(dòng)。E火花在子彈和物體碰撞時(shí)產(chǎn)生,有位置,還能夠被繪制。F基地有位置,能夠被繪制3. 編碼實(shí)現(xiàn)1) 創(chuàng)建好總體框架后,首先要建立一個(gè)控制臺(tái)項(xiàng)目。GameMa nager2) 創(chuàng)建游戲場(chǎng)public GameManager ()
3、中設(shè)定游戲場(chǎng)的高度和寬度3) 創(chuàng)建其他類,BackGround. Obstacle , Tank, MyTank, OtherTank, Shot, Fire。4) 添加背景I在BackGround中定義背景的高度和寬度,與游戲場(chǎng)大小一樣,定義Draw,將背景這個(gè)矩形畫(huà)出 Brush brush = new SoildBrush( Color.Green );Recta ngle rec = new Recta ngle(_Locati on,new Size(_Width,_Height);g.FillRecta ngle(brush,rec);II在GameManger中設(shè)置背景的高度和寬
4、度,并在paint中將背景Draw出來(lái)。5) 添加我方坦克I在Tank中定義坦克的高度寬度速度和位置屬性,繪制和移動(dòng)方法,在GameManage中private MyTa nk _MyTa nkObj = null;6) 添加對(duì)方坦克由于對(duì)方坦克有許多,要建一個(gè)集合來(lái)存放對(duì)方坦克private List<OtherTa nk> _ListOtherTa nk = new List<OtherTa nk>();for (int i = 0; i < 20; i+)Ran dom ran dom = new Ran dom(); in t tan kNum = ran
5、 dom.Next(1,2);OtherTa nk otherTa nk = n ull;Ran dom ran domTa nk = new Ran dom(112 * i);int x = ran domTa nk.Next(0,1000);int y = randomTank.Next(0, 300);if (tan kNum = 1)Point locatio nTank = new Poin t(x, y);otherTa nk = new OtherTa nk1(locati onTan k);_ListOtherTa nk.Add(otherTa nk);Thread.Sleep
6、(3000);每休息3000ms創(chuàng)建一個(gè)我方坦克7) 使我方坦克能夠移動(dòng)1、 剛開(kāi)始我定義了MoveUp MoveDown MoveLeft , MoveRight方法,但是寫(xiě)代碼的時(shí)候會(huì)很麻煩,所以改成了Move方法。定義了 KeyPress, Keypress=1、2、3、4的時(shí)候分別對(duì)應(yīng)我方坦克向上、向下、向左、向右的移動(dòng)。以下是我方坦克向上移動(dòng)的代碼,其他方 向的移動(dòng)與其類似。if (_Keypress = 1)/ 向上_Locati on.Y -= _Speed;_Direction = Resource.herol;/ 添加圖片if (_Locatio n.Y <= 0)_L
7、ocati on.Y = 0;for (int i = 0; i < Program.gameMangerObj.ListObstacle.Count; i+)if(GetRect().l ntersectsWith(Program.gameMa ngerObj .L istObstaclei.GetRect()if (Program.gameMa ngerObj.ListObstaclei is Grass)_Locati on.Y = _Locati on.Y;else_Locati on.Y = _Locati on.Y + _Speed;2、在 Tank 中定義 Image _D
8、irection3、 在 MyTank中 的 public MyTank()默認(rèn)構(gòu)造中 Direction = Resource.herol 默認(rèn)的 我方坦克是方向向上的圖片在Move方法中 如果keypress=1的時(shí)候添加向上的圖片 _Direction= Resource.herol;public override void Draw(Graphics g)g.Drawlmage(_Directio n, _Locatio n.X, _Locatio n. Y, _Width, _Height);出現(xiàn)錯(cuò)誤,image參數(shù)名,值不能為空4、我方坦克不能移出窗體在Move方法中設(shè)置其運(yùn)動(dòng)的范
9、圍。8) 添加障礙物1. 在 Obstacle 類中添加屬性,_Width,_Height,_Location. 繪制能力 Draw9) 對(duì)方坦克能夠自動(dòng)移動(dòng)1.對(duì)方坦克由4張圖片組成,定義random使其隨機(jī)創(chuàng)建這四張圖片,定義集合存放對(duì)方 坦克,每張圖片對(duì)應(yīng)的移動(dòng)方法不同。遇到的問(wèn)題:在設(shè)定 4個(gè)坦克移動(dòng)的時(shí)候原先定義的MoveUp MoveDown MoveLeftMoveRight方法太麻煩,現(xiàn)在定義一個(gè)Move方法來(lái)代替 MoveUp等。定義一個(gè)變量KeyPress當(dāng)KeyPress =1、2、3、4時(shí)分別對(duì)應(yīng)向上,向下,向左,向右的圖片。public class OtherTa n
10、k1 : OtherTa nkpublic override void Draw(Graphics g)g.Drawlmage(Resource.E nemyTa nkup, _Locati on);public OtherTa nk1()_Speed = 5;public OtherTa nk1(Poi nt locati on):this()_Locati on = locatio n;public override void Move()base.Move();_Locati on.Y -= _Speed;在 GameManager中void MoveOtherTa nk()while
11、(1 = 1)OtherTa nk otherTa nk = n ull;for (int i = 0; i < _ListOtherTank.Count; i+)otherTa nk = _ListOtherTa nki;if (otherTa nk != n ull)otherTa nk.Move();else break;Thread.Sleep(300);出現(xiàn)的問(wèn)題,對(duì)方坦克不能夠自動(dòng)移動(dòng),只有按下上下左右鍵的時(shí)候才移動(dòng),是因?yàn)闆](méi)有刷新,應(yīng)該在 MoveOtherTank 中添加 this.Refresh();2對(duì)方坦克能夠自由移動(dòng)了,但是都走出了游戲場(chǎng),應(yīng)該設(shè)定其運(yùn)動(dòng)的范圍。當(dāng)
12、對(duì)方坦克 到達(dá)游戲場(chǎng)邊界時(shí)應(yīng)該返回。與設(shè)置我方坦克邊界方法相同。3.對(duì)方坦克到達(dá)游戲場(chǎng)邊界后應(yīng)該隨機(jī)改變其方向。設(shè)置隨機(jī)數(shù)rand。并且在OtherTank的Move方法中實(shí)現(xiàn)10) 我方坦克能夠能夠穿過(guò)草,其他的障礙物都不能穿過(guò)。需要將我方坦克與其他障礙物做 碰撞測(cè)試。用 Rectangle在移動(dòng)的過(guò)程中發(fā)生碰撞,應(yīng)該寫(xiě)在MyTank的Move方法中。A在 Tank 和 Obstacle 中分別定義 Rectangle GetRect,在 MyTank的 Move方法中for (int i = 0; i <Program.gameMangerObj.ListObstacle.Count
13、; i+)if (GetRect().lntersectsWith(Program.gameMa ngerObj. ListObstaclei.GetRect()if( Program.gameMangerObj.ListObstaclei is Grass)_Locati on.Y =_Locati on.Y;else_Locati on.Y += _Speed;但是執(zhí)行后我方坦克只用碰到障礙物的初始坐標(biāo)的時(shí)候才會(huì)停止。是因?yàn)闆](méi)有設(shè)置障礙物的寬和高11) 同樣的方法設(shè)置對(duì)方坦克的碰撞12) 對(duì)方坦克在撞到障礙物或者游戲場(chǎng)邊界時(shí)要改變方向,方向是任意的,應(yīng)該建立隨機(jī)數(shù) 對(duì)方坦克不能在 Move
14、的同時(shí)Draw出來(lái),因?yàn)樾枰淖兎较?。但是運(yùn)行的時(shí)候出現(xiàn)問(wèn)題了,我方坦克向上的圖片在撞墻之后,方向剛開(kāi)始向左后向右又變成向下的了,是因?yàn)樽驳缴线吔绾?,坦克轉(zhuǎn)向左右的時(shí)候仍然會(huì)撞到上邊界,所以應(yīng)該使_Locatio n.Y -=20;13) 添加子彈。1.我方子彈是在什么地方產(chǎn)生的?什么時(shí)候產(chǎn)生的?A我方子彈在我方坦克上面產(chǎn)生的,當(dāng)按下空格鍵時(shí)我方坦克發(fā)射子彈。在GameMa nage中定義我方子彈的集合,注意我方子彈是在按下空格鍵的時(shí)候產(chǎn)生的,產(chǎn)生的 位置是我方坦克正中間??梢苑謩e向B我方子彈能夠移動(dòng),我方子彈根據(jù)我方坦克的向上向下向左向右的圖片, 上,向下,向左,向右移動(dòng)。在我方子彈中pub
15、lic override void Move()/我方子彈的移動(dòng)if (_ShotDirection = 1)/_Locati on.Y -= _Speed;if (_ShotDirection = 2)/_Locati on.Y += _Speed;if (_ShotDirection = 3)/_Locati on.X -= _Speed;if (_ShotDirection = 4)/_Locati on.X += _Speed;在我方坦克中public override MyShot Shoot()/int x = 0;子彈向上走向下走向左走向右走我方坦克發(fā)射子彈的行為能力int y
16、= 0;if (Keypress = 1)/ 從坦克中間發(fā)射出來(lái)的子彈 x = _Locatio n.X + _Width / 2;y = _Locati on.Y;if (Keypress = 2)x = _Locatio n.X + _Width / 2;y = _Locati on.Y;if (Keypress = 3)x = _Locati on.X;y = _Locati on.Y + _Height / 2;if (Keypress = 4)x = _Locati on.X;y = _Locati on.Y + _Height / 2;Point locati on = new P
17、oin t(x, y);myShot = new MyShot(locati on ,this); return myShot;在 GameManage中void MoveMyShot()while (1 = 1)MyShot myShot = null;for (int i = 0; i < _ListMyShot.Count; i+) myShot = _ListMyShoti;if (myShot != null)myShot.Move();else break;Thread.Sleep(2); this.Refresh();在 void出來(lái)GameMa nager_Pa int(
18、 objectsen der,PaintEventArgse)中將我方子彈繪制2.添加對(duì)方子彈。對(duì)方子彈是在對(duì)方坦克創(chuàng)建的時(shí)候就產(chǎn)生的。對(duì)方子彈的移動(dòng)也是根據(jù)對(duì)方坦克的上下左右方向移動(dòng)的14)設(shè)置子彈與障礙物、坦克、基地的碰撞1.設(shè)置我方子彈與障礙物的碰撞, 碰撞之后我方子彈消失的同時(shí)產(chǎn)生火花。 那么首先先把 火花繪制出來(lái)。我方子彈與障礙物的碰撞發(fā)生在我方子彈移動(dòng)的時(shí)候,要在我方子彈移動(dòng)的方法中來(lái)實(shí)現(xiàn)。A我方子彈與障礙物【除水 草】相撞,產(chǎn)生一些火花B如何檢測(cè)相撞在什么地方檢測(cè)我方子彈移動(dòng)一次就跟障礙物做一次比較C在檢測(cè)到相撞之后創(chuàng)建一些火花?;鸹ㄔ诖绑w中畫(huà)出來(lái)、D對(duì)方子彈也是同樣的方法將火花畫(huà)出來(lái)、E當(dāng)子彈撞到磚墻時(shí),磚墻移除,子彈移除,撞到鐵墻時(shí),只有子彈移除F我方子彈與對(duì)方坦克撞擊后均移除。2. 設(shè)置對(duì)方子彈與障礙物,我方坦克的碰撞。設(shè)置我的基地與對(duì)方坦克的碰撞設(shè)
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版部編歷史七年級(jí)上冊(cè)《第19課 北魏政治和北方民族大交融》聽(tīng)課評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)上冊(cè)1.5《分式方程的應(yīng)用》聽(tīng)評(píng)課記錄2
- 八年級(jí)數(shù)學(xué)下冊(cè)23.3事件的概率1聽(tīng)評(píng)課記錄滬教版五四制
- 人教版地理八年級(jí)下冊(cè)6.3《世界上最大的黃土堆積區(qū)-黃土高原》聽(tīng)課評(píng)課記錄1
- 蘇科版數(shù)學(xué)八年級(jí)上冊(cè)聽(tīng)評(píng)課記錄《5-1物體位置的確定》
- 用功合同范本(2篇)
- 環(huán)境友好原材料采購(gòu)合同(2篇)
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)《第2單元因數(shù)與倍數(shù) 第1課時(shí) 因數(shù)和倍數(shù)(1)》聽(tīng)評(píng)課記錄
- 聽(tīng)評(píng)課記錄2年級(jí)
- 統(tǒng)編教材部編人教版道德與法治九年級(jí)下冊(cè)《3.2 與世界深度互動(dòng)》聽(tīng)課評(píng)課記錄
- 二零二五年度大型自動(dòng)化設(shè)備買賣合同模板2篇
- 2024版金礦居間合同協(xié)議書(shū)
- 江西省部分學(xué)校2024-2025學(xué)年高三上學(xué)期1月期末英語(yǔ)試題(含解析無(wú)聽(tīng)力音頻有聽(tīng)力原文)
- GA/T 2145-2024法庭科學(xué)涉火案件物證檢驗(yàn)實(shí)驗(yàn)室建設(shè)技術(shù)規(guī)范
- 2025內(nèi)蒙古匯能煤化工限公司招聘300人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年中國(guó)融通資產(chǎn)管理集團(tuán)限公司春季招聘(511人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 寵物護(hù)理行業(yè)客戶回訪制度構(gòu)建
- 電廠檢修管理
- 《SPIN銷售法課件》課件
- 機(jī)動(dòng)車屬性鑒定申請(qǐng)書(shū)
- 2024年中考語(yǔ)文試題分類匯編:非連續(xù)性文本閱讀(學(xué)生版)
評(píng)論
0/150
提交評(píng)論