![C#編程 [“貪吃蛇”小游戲]_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/df1e9958-ed4f-48b1-bc24-11066b81d865/df1e9958-ed4f-48b1-bc24-11066b81d8651.gif)
![C#編程 [“貪吃蛇”小游戲]_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/df1e9958-ed4f-48b1-bc24-11066b81d865/df1e9958-ed4f-48b1-bc24-11066b81d8652.gif)
![C#編程 [“貪吃蛇”小游戲]_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/df1e9958-ed4f-48b1-bc24-11066b81d865/df1e9958-ed4f-48b1-bc24-11066b81d8653.gif)
![C#編程 [“貪吃蛇”小游戲]_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/df1e9958-ed4f-48b1-bc24-11066b81d865/df1e9958-ed4f-48b1-bc24-11066b81d8654.gif)
![C#編程 [“貪吃蛇”小游戲]_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/df1e9958-ed4f-48b1-bc24-11066b81d865/df1e9958-ed4f-48b1-bc24-11066b81d8655.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C#編程 “貪吃蛇”小游戲一、項目內(nèi)容及要求編程實現(xiàn)一個“貪吃蛇”小游戲,具體要求如下:1)程序啟動后,蛇身默認(rèn)向右移動,直到用戶按下方向鍵改變運動方向。2)玩家通過鍵盤上的上、下、左、右四個方向鍵控制蛇在地圖上尋找豆,蛇吃下豆后,蛇身加長一節(jié)。 3)界面上任意時刻同時會有三個豆,豆的位置隨機生成,定時刷新。4)在游戲過程中,若蛇頭碰到場地邊界或自己的身體,則游戲失敗。二、算法分析一、控件設(shè)計1)主菜單控件 MenuStrip2)面板控件 Panel:背景色為黃色3)標(biāo)簽控件 Label1、Label2 二、類設(shè)計1)Game類,入口主窗體、游戲界面類。Game類的主要功能包括控制游戲的開始與
2、暫停、選擇游戲關(guān)卡、聲明并創(chuàng)建蛇的行為及豆的行為線程,啟動線程。2)Block類:代表蛇和豆一個節(jié)點的塊類,游戲中需要繪制的塊分為以下三種情況:(1)蛇頭:紅色橢圓(2)蛇身:紅色矩形 (3)豆:綠色橢圓添加類的屬性:塊的顏色、是否蛇頭、是否豆,橫坐標(biāo)X、縱坐標(biāo)Y添加類的行為:繪制塊draw()方法,構(gòu)造函數(shù)(判斷是否豆),重載構(gòu)造函數(shù)3)Snake類:定義游戲中的蛇。其屬性包括蛇移動的方向以及蛇身的集合(泛型集合List<>);其行為成員包括蛇吃豆、吃過豆之后蛇身增長、蛇身移動以及判斷蛇是否死亡等。4)Beans類:定義游戲中的豆。其屬性包括3個豆組成的列表(List<&g
3、t;);其行為成員包括定時刷新豆的集合以及移除某個豆。三、界面及運行過程四、關(guān)鍵代碼(代碼要求注釋完整,例如:變量的作用,語句的作用,方法的功能等都要加注釋說明)namespace 項目5 public partial class Form1 : Form Food food = new Food(); Snake snake = new Snake(); private int score; public Form1() InitializeComponent(); timer1.Enabled = false;/timer是否可用 timer1.Interval = snake.Speed
4、; /蛇初始速度 score = 0; Point body = new Point1000; /蛇最大長度 private void 操作ToolStripMenuItem_Click(object sender, EventArgs e) protected override bool ProcessDialogKey(Keys keyData) switch (keyData) case Keys.Up: if (snake.Direction != Direction.down) snake.Direction = Direction.up; break; case Keys.Down
5、: if (snake.Direction != Direction.up) snake.Direction = Direction.down; break; case Keys.Left: if (snake.Direction != Direction.right) snake.Direction = Direction.left; break; case Keys.Right: if (snake.Direction != Direction.left) snake.Direction = Direction.right; break; return base.ProcessDialog
6、Key(keyData); private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) private void 開始游戲ToolStripMenuItem_Click(object sender, EventArgs e) label2.Text = "0" score = 0; timer1.Enabled = true; if (snake.Live = false) snake = new Snake(); snake.resetSnake(); label2
7、.Text = "0" score = 0; timer1.Enabled = true; private void 關(guān)卡設(shè)定ToolStripMenuItem_Click(object sender, EventArgs e) private void 暫停游戲ToolStripMenuItem_Click(object sender, EventArgs e) if (暫停游戲ToolStripMenuItem.Text = "暫停游戲") timer1.Enabled = false; 暫停游戲ToolStripMenuItem.Text = &q
8、uot;繼續(xù)" else timer1.Enabled = true; 暫停游戲ToolStripMenuItem.Text = "暫停游戲" private void 退出游戲ToolStripMenuItem_Click(object sender, EventArgs e) this.Close(); private void 第一關(guān)ToolStripMenuItem_Click(object sender, EventArgs e) timer1.Interval = 200; private void 第二關(guān)ToolStripMenuItem_Click
9、(object sender, EventArgs e) timer1.Interval = 150; private void 第三關(guān)ToolStripMenuItem_Click(object sender, EventArgs e) timer1.Interval = 100; private void 第四關(guān)ToolStripMenuItem_Click(object sender, EventArgs e) timer1.Interval = 50; private void 第五關(guān)ToolStripMenuItem_Click(object sender, EventArgs e)
10、 timer1.Interval = 30; private void timer1_Tick(object sender, EventArgs e) snake.Move(); panel1.Invalidate();/蛇運動后,把picturebox1當(dāng)前界面設(shè)為無效,并引發(fā)paint事件,重新繪制界面 private void panel1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; snake.Draw(g);/畫蛇 if (snake.live = false) timer1.Enabled = fa
11、lse;/timer1不可用 if (snake.Body0.X = food.Position.X && snake.Body0.Y = food.Position.Y) snake.Eat(food); food.Exist = false; score += 10; label2.Text = score.ToString(); if (food.Exist) food.Draw(g); else food.Position = food.createdFood();/重新創(chuàng)造繪制食物 food.Exist = true; food.Draw(g); using Syst
12、em;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel;using System.Data;using System.Drawing;using System.Windows.Forms;using System.Media;using System.IO;namespace 項目5 class Block public enum Direction up, down, left, right, class Snake public int score
13、; public const int side = 10;/蛇身每個節(jié)點長度 Point body = new Point600;/蛇身最大長度 Direction direction;/蛇初始移動方向 public bool live;/蛇存活狀態(tài) int number;/蛇身節(jié)點個數(shù) int speed = 120;/蛇的初始速度 public int Speed/Speed屬性 get return speed; set speed = value; public Direction Direction/Direction的屬性 get return direction; set dir
14、ection = value; public bool Live/Live的屬性 get return live; set live = value; public Point Body/Body屬性 get return body; public Snake()/蛇類的構(gòu)造器初始值 Point node1 = new Point(100, 50); Point node2 = new Point(90, 50); body0 = node1; body1 = node2; number = 2; direction = Direction.right; live = true; public
15、 void Move()/蛇的移動 for (int i = this.number - 1; i > 0; i-)/蛇移動的方式 bodyi = bodyi - 1; switch (this.direction)/蛇移動的方向 case Direction.up: body0.Y -= side; break; case Direction.down: body0.Y += side; break; case Direction.left: body0.X -= side; break; case Direction.right: body0.X += side; break; if
16、 (body0.X < 10 | body0.X > 537 | body0.Y < 10 | body0.Y > 346)/蛇撞四壁掛 this.live = false; for (int i = 1; i <= number - 1; i+) if (body0.X = bodyi.X && body0.Y = bodyi.Y) this.live = false; public void Eat(Food food)/蛇吃食物 Label label2 = new Label(); bodynumber = food.Position; t
17、his.number+;/長度加 score += 2; label2.Text = Convert.ToString(score); public void Draw(Graphics g)/繪制蛇 SolidBrush RedBrush = new SolidBrush(Color.Red); g.DrawEllipse(Pens.Red, body0.X, body0.Y, side, side); g.FillEllipse(RedBrush, body0.X, body0.Y, side, side); for (int i = 1; i <= number - 1; i+)
18、g.DrawRectangle(Pens.Red, bodyi.X, bodyi.Y, side, side); g.FillRectangle(RedBrush, bodyi.X, bodyi.Y, side, side); if (this.live = false) g.DrawString("Game Over!", new Font("宋體", 36, FontStyle.Bold), RedBrush, new Point(100, 150); public void resetSnake()/重新設(shè)置蛇 Point node1 = new Point(100, 320); Point node2 = new Point(90, 320); body1 = node1; body0 = node2; number = 2; direction = D
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薪酬管理辦法修訂方案
- 美術(shù)行業(yè)收費管理辦法
- 廣告服務(wù)收費管理辦法
- 小區(qū)維修資金管理辦法
- 育嬰師職業(yè)簡介
- 肢體障礙兒童課件
- 腸癰病中醫(yī)課件
- 藥房處方調(diào)劑培訓(xùn)課件
- 廣東佛山禪城區(qū)數(shù)學(xué)試卷
- 佛山市二模初中數(shù)學(xué)試卷
- 船廠安全用電培訓(xùn)課件
- 交警大隊培訓(xùn)課件
- 高一下學(xué)期《高一暑假:彎道超車當(dāng)此時》主題班會課件
- 心絞痛培訓(xùn)課件
- 人教版九年級化學(xué)上冊暑假銜接講義(初二升初三)
- 部編版四年級語文上冊《全冊》課件
- 跆拳道館技術(shù)崗位薪酬制度
- 國內(nèi)外嬰幼兒早期教育的現(xiàn)狀與發(fā)展分析
- 無人駕駛車法規(guī)-深度研究
- 康復(fù)科實習(xí)生入科培訓(xùn)
- 《寧晉縣國土空間總體規(guī)劃(2021-2035年)》
評論
0/150
提交評論