已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连理工大学管理学院本科生实验报告信息系统开发工具实验命题:_贪吃蛇小游戏开发_专 业:信息管理与信息系统班 级: 管信1701 学 号: 201705028 学生姓名: 张春立 完成时间: 2019年5月30 基于C#窗体程序的贪吃蛇小游戏的开发1.首先展示设计界面效果已及运行效果窗体设计界面运行效果2.使用到的控件画布,按钮,textbox,定时器3.操作方法点击 开始/暂停 按钮开始游戏或暂停游戏。蛇可以无限长大,也就是说永远不会胜利,最终也会失败。蛇撞到墙或者自己则结束游戏,游戏将被重置。4.大概实现思路(1)在画布上画出三个连续的黑色矩形(设置圆角,让它看起来像那么回事儿)(2)在画布上随机生成10个矩形(同样设置圆角),作为蛇的食物。(3)蛇移动到与食物相交的时候食物消失,蛇的长度加一,吃掉的食物消失,再重新生成一个食物。(4)重复以上步骤,直到玩家撞到墙或者撞到自己。5.构建类构建SnackPlayer类,BodyPart类,Point类,GamePart类,FoodManager类,FoodPellet类,这些类全部都在Snack命名空间下。FoodPellet类继承GamePart类。使用窗体控件建立窗体及相关控件。6.构建的类的作用及实现SnackPlayer类:定义了玩家蛇的基本属性,如方向,大小,增加长度,并用BodyPart实例化对象列表,表示蛇的每一部分。public enum Direction left, right, up, down, none private List m_SnakeParts = new List(); private const int m_CircleRadius = 20; private Direction m_MoveDirection = Direction.none; private int m_PendingSegments; 构造函数public SnakePlayer(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()/控制蛇移动,通过对画布上面坐标的改变来实现public void SetDirection(Direction Dir)/控制蛇移动方向BodyPart类:用来初始化蛇的方向GamePart类:用来获取蛇所在点的位置FoodManager类:属性,生成随机数,用来随机生成食物所在的点;同时FoodPellet实例化对象列表,代表所有食物对象。private Random r = new Random(); private List m_FoodPellets = new List(); 方法public void AddRandomFood() int X = r.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 FoodPellet(X, Y); / 保存食物对象 /增加一个食物点public void AddRandomFood(int Amount) for(int i=0;i Application.RemoveMessageFilter(this); Player1 = new SnakePlayer(this); 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) SetPlayerMovement();/移动 CheckForCollisions();/检测碰撞是需要结束游戏,还是需要对蛇的长度加一 GameCanvas.Invalidate();/重新绘制画布 /通过计时器来触发蛇的移动与检验是否结束游戏private void CheckForCollisions() if (Player1.IsIntersectingRect(new Rectangle(-100, 0, 100, GameCanvas.Height) Player1.OnHitWall(Direction.left); if (Player1.IsIntersectingRect(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) Player1.OnHitWall(Direction.down);/检测是否与食物相撞 List SnakeRects = Player1.GetRects(); foreach(Rectangle rect in SnakeRects) if(FoodMngr.IsIntersectingRect(rect,true) FoodMngr.AddRandomFood(); Player1.AddBodySegments(1); score+; ScoreTxtBox.Text = score.ToString(); /检测碰撞是需要结束游戏,还是需要对蛇的长度加一 private 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, EventArgs e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南长沙浏阳市人民医院公开招聘编外合同制人员8人备考笔试题库及答案解析
- 深度解析(2026)《GBT 25987-2010装甲防暴车》(2026年)深度解析
- 深度解析(2026)《GBT 25931-2010网络测量和控制系统的精确时钟同步协议》
- 福建漳州市2026届国企类选优生招聘(第四批)开考岗位参考考试题库及答案解析
- 2025广西百色市乐业县专业森林消防救援队伍招聘13人备考笔试试题及答案解析
- 2025重庆广播新闻中心政务服务团队人员招聘9人参考考试题库及答案解析
- 深度解析(2026)GBT 25691-2010《土方机械 开斗式铲运机 容量标定》
- 深度解析(2026)《GBT 25656-2010信息技术 中文Linux应用编程界面(API)规范》(2026年)深度解析
- 2025西安交通大学第一附属医院医学影像科招聘劳务派遣助理护士参考考试试题及答案解析
- 共享经济合同纠纷与法律规制研究-基于网约车平台与驾驶员的劳动关系认定
- 2025年烟花爆竹经营单位安全管理人员考试试题及答案
- 2025天津大学管理岗位集中招聘15人参考笔试试题及答案解析
- 2025广东广州黄埔区第二次招聘社区专职工作人员50人考试笔试备考题库及答案解析
- 2025年云南省人民检察院聘用制书记员招聘(22人)考试笔试参考题库及答案解析
- 2026届上海市青浦区高三一模数学试卷和答案
- 2026年重庆安全技术职业学院单招职业技能测试题库附答案
- 环卫设施设备采购项目投标方案投标文件(技术方案)
- 微创机器人手术基层普及路径
- 24- 解析:吉林省长春市2024届高三一模历史试题(解析版)
- 2025年黑龙江省公务员《申论(行政执法)》试题含答案
- 福建省福州市仓山区2024-2025学年三年级上学期期末数学试题
评论
0/150
提交评论