



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、c#小游戲開發 大連理工大學管理學院本科生實驗報告 信息系統開發工具 實驗命題:_貪吃蛇小游戲開發_ 專 業:信息管理與信息系統 班 級: 管信 1701 學 號: 202105028 學生姓名: 張春立 完成時間: 2021 年 5 月 30 于 基于 c# 窗體程序的貪吃蛇小游戲的開發 1.首先展示設計界面效果已及運行效果 窗體設計界面 運行效果 2.使用到的控件 畫布,按鈕,textbox,定時器 3.操作方法 點擊 開始/暫停 按鈕開始游戲或暫停游戲。蛇可以無限長大,也就是說永遠不會勝利,最終也會失敗。蛇撞到墻或者自己則結束游戲,游戲將被重置。 4.大概實現思路 (1)在畫布上畫出三個
2、連續的黑色矩形(設置圓角,讓它看起來像那么回事兒) (2)在畫布上隨機生成 10 個矩形(同樣設置圓角),作為蛇的食物。 (3)蛇移動到與食物相交的時候食物消失,蛇的長度加一,吃掉的食物消失,再重新生成一個食物。 (4)重復以上步驟,直到玩家撞到墻或者撞到自己。 5.構建類 構建 snackplayer 類,bodypart 類,point 類,gamepart 類,foodmanager 類,foodpellet 類,這些類全部都在 snack 命名空間下。foodpellet 類繼承 gamepart 類。使用窗體控件建立窗體及相關控件。 6.構建的類的作用及實現 snackplayer
3、類: 定義了玩家蛇的基本屬性,如方向,大小,增加長度,并用 bodypart 實例化對象列表,表示蛇的每一部分。 public enum direction left, right, up, down, none private listbodypart m_snakeparts = new listbodypart(); private const int m_circleradius = 20; private direction m_movedirection = direction.none; private int m_pendingsegments; 構造函數 public sna
4、keplayer(snakeform form)實現初始化蛇的長度以及位置 m_snakeparts.add(new bodypart(100, 0, direction.right); m_snakeparts.add(new bodypart(80, 0, direction.right); m_snakeparts.add(new bodypart(60, 0, direction.right); 主要方法有 public void addbodysegments(int number)/增加蛇的長度 public void moveplayer()/控制蛇移動,通過對畫布上面坐標的改變
5、來實現 public void setdirection(direction dir)/控制蛇移動方向 bodypart 類:用來初始化蛇的方向 gamepart 類:用來獲取蛇所在點的位置 foodmanager 類: 屬性,生成隨機數,用來隨機生成食物所在的點;同時 foodpellet 實例化對象列表,代表所有食物對象。 private random r = new random(); private listfoodpellet m_foodpellets = new listfoodpellet(); 方法 public void addrandomfood() int x = r.
6、next(m_gamewidth - m_circleradius); / random x/y positions int y = r.next(m_gameheight - m_circleradius); int ix = (x / m_circleradius); /use truncating to snap to grid/對齊網格 int iy = y / m_circleradius; x = ix * m_circleradius; / grid x/y positions y = iy * m_circleradius; m_foodpellets.add(new food
7、pellet(x, y); / 保存食物對象 /增加一個食物點 public void addrandomfood(int amount) for(int i=0;iamount;i+) addrandomfood(); /增加食物 7.總體邏輯實現 public snakeform() initializecomponent(); application.addmessagefilter(this); this.formclosed += (s, e) = application.removemessagefilter(this); player1 = new snakeplayer(thi
8、s); foodmngr = new foodmanager(gamecanvas.width, gamecanvas.height); foodmngr.addrandomfood(10); scoretxtbox.text = score.tostring(); /初始化窗體,并獲取食物與蛇的實例,隨機獲取十個食物點 public void toggletimer() gametimer.enabled = !gametimer.enabled; /通過計時器設置蛇的開始與暫停 private void gametimer_tick(object sender, eventargs e)
9、setplayermovement();/移動 checkforcollisions();/檢測碰撞是需要結束游戲,還是需要對蛇的長度加一 gamecanvas.invalidate();/重新繪制畫布 /通過計時器來觸發蛇的移動與檢驗是否結束游戲 private void checkforcollisions() if (player1.isintersectingrect(new rectangle(-100, 0, 100, gamecanvas.height) player1.onhitwall(direction.left); if (player1.isintersectingre
10、ct(new rectangle(0, -100, gamecanvas.width, 100) player1.onhitwall(direction.up); if (player1.isintersectingrect(new rectangle(gamecanvas.width, 0, 100, gamecanvas.height) player1.onhitwall(direction.right); if (player1.isintersectingrect(new rectangle(0, gamecanvas.height, gamecanvas.width, 100) pl
11、ayer1.onhitwall(direction.down); /檢測是否與食物相撞 listrectangle snakerects = player1.getrects(); foreach(rectangle rect in snakerects) if(foodmngr.isintersectingrect(rect,true) foodmngr.addrandomfood(); player1.addbodysegments(1); score+; scoretxtbox.text = score.tostring(); /檢測碰撞是需要結束游戲,還是需要對蛇的長度加一 priva
12、te void setplayermovement() if (input.iskeydown(keys.left) player1.setdirection(direction.left); else if (input.iskeydown(keys.right) player1.setdirection(direction.right); else if (input.iskeydown(keys.up) player1.setdirection(direction.up); else if (input.iskeydown(keys.down) player1.setdirection(direction.down); player1.moveplayer(); /讓蛇動起來 private void start_btn_click(object sender
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園綠化基地管理制度
- 生物發光藥物遞送-洞察及研究
- 2024年綜合數據采集傳輸系統資金籌措計劃書代可行性研究報告
- 醫院勞動紀律方管理獎懲規定
- 光伏發電站項目合作協議
- 農民愛城市作文800字(12篇)
- 正式離職與入職證明(7篇)
- 品牌經銷合同協議書
- 垃圾發電廠的工作原理
- 技術結構化面試題及答案
- 古鎮旅游活動策劃方案
- 清遠市突發事件總體應急預案
- 通風與防排煙系統的施工方案
- 滬教版英語小學四年級上學期試卷與參考答案(2024-2025學年)
- 人工智能訓練師理論知識考核要素細目表二級
- 2024年人教版一年級數學(下冊)期末試卷及答案(各版本)
- 《卒中患者吞咽障礙護理規范》
- DL∕T 698.45-2017 電能信息采集與管理系統 第4-5部分:通信協議-面向對象的數據交換協議
- GB/T 44189-2024政務服務便民熱線運行指南
- 浙江省杭州市學軍中學2025屆數學高一下期末統考試題含解析
- 2025年中考數學專題09 逆等線最值專題(原卷版)
評論
0/150
提交評論