收藏 分享(赏)

C#贪吃蛇课程设计报告.pdf

上传人:精品资料 文档编号:10731651 上传时间:2020-01-03 格式:PDF 页数:16 大小:526.21KB
下载 相关 举报
C#贪吃蛇课程设计报告.pdf_第1页
第1页 / 共16页
C#贪吃蛇课程设计报告.pdf_第2页
第2页 / 共16页
C#贪吃蛇课程设计报告.pdf_第3页
第3页 / 共16页
C#贪吃蛇课程设计报告.pdf_第4页
第4页 / 共16页
C#贪吃蛇课程设计报告.pdf_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、C#课 程 设 计 基 于 VC#.NET 的贪 吃 蛇 游 戏 的开 发 与 设 计姓 名 : 李 贵 敏学 号 : 200880114105班 级 : 软 件 081 班指 导 教 师 : 程 铭完 成 日 期 : 2011-6-24C#课 程 设 计1目 录1. 实 验 目 的 22. 实 验 任 务 与 要 求 22.1实 验 内 容 22.2实 验 要 求 22.3实 验 环 境 23. 设 计 方 案 23.1程 序 功 能 23.2设 计 思 想 23.3设 计 总 体 流 程 图 23.4设 计 的 具 体 实 现 34. 程 序 测 试 74.1测 试 内 容 与 结 果 7

2、4.2程 序 运 行 效 果 图 75. 实 验 总 结 9参 考 文 献 10附 录 10附 录 A: 主 要 源 程 序 10C#课 程 设 计21. 实 验 目 的通 过 C#课 程 设 计 , 使 学 生 能 将 学 到 的 面 向 对 象 的 程 序 设 计 思 想 应 用 到具 体 的 工 作 和 学 习 中 , 加 深 对 类 与 对 象 的 理 解 , 要 求 学 生 能 够 对 现 实 生 活 中许 多 具 体 的 事 物 抽 象 出 类 , 并 掌 握 继 承 与 派 生 , 基 类 、 虚 方 法 和 抽 象 方 法 和多 态 性 的 概 念 。通 过 这 次 课 程 设

3、 计 掌 握 C#语 言 程 序 设 计 的 编 程 思 想 , 为 后 续 课 程 打下 基 础 。2. 实 验 任 务 与 要 求2.1实 验 内 容编 写 一 个 C#GUI版 小 游 戏 程 序2.2实 验 要 求编 写 C#语 言 程 序 实 现 贪 吃 蛇 游 戏 。 一 条 蛇 在 密 闭 的 围 墙 内 , 在 围 墙 内随 机 出 现 多 个 食 物 , 通 过 按 键 盘 上 的 四 个 光 标 键 控 制 蛇 向 上 下 左 右 四 个 方 向 移动 , 蛇 头 撞 到 食 物 , 则 表 示 食 物 被 蛇 吃 掉 , 时 蛇 的 身 体 长 一 节 , 同 时 计 1

4、 分 ,接 着 又 出 现 食 物 , 等 待 被 蛇 吃 掉 , 如 果 蛇 在 移 动 过 程 中 , 撞 到 墙 壁 或 身 体 交 叉蛇 头 撞 到 自 己 的 身 体 游 戏 结 束 。 并 实 现 多 人 一 起 玩 。2.3实 验 环 境Windows XP, Microsoft Visual Studio 20103. 设 计 方 案3.1程 序 功 能贪 吃 蛇 游 戏 是 一 个 经 典 小 游 戏 , 一 条 蛇 在 密 闭 的 围 墙 内 , 在 围 墙 内 随 机 出现 一 个 食 物 , 通 过 按 键 盘 上 的 四 个 光 标 键 控 制 蛇 向 上 下 左 右

5、 四 个 方 向 移 动 , 蛇头 撞 到 食 物 , 则 表 示 食 物 被 蛇 吃 掉 , 时 蛇 的 身 体 长 一 节 , 同 时 计 1 分 , 接 着 又出 现 食 物 , 等 待 被 蛇 吃 掉 , 如 果 蛇 在 移 动 过 程 中 , 撞 到 墙 壁 或 身 体 交 叉 蛇 头 撞到 自 己 的 身 体 游 戏 结 束 。3.2设 计 思 想程 序 关 键 在 于 表 示 蛇 的 图 形 及 蛇 的 移 动 。 用 一 个 小 矩 形 块 表 示 蛇 的 一 节 身体 , 身 体 每 长 一 节 , 增 加 一 个 矩 形 块 , 蛇 头 用 一 节 表 示 。 移 动 时

6、必 须 从 蛇 头 开始 , 所 以 蛇 不 能 向 相 反 的 方 向 移 动 , 如 果 不 按 任 意 键 , 蛇 自 行 在 当 前 方 向 上 前移 , 但 按 下 有 效 方 向 键 后 , 蛇 头 朝 着 该 方 向 移 动 , 一 步 移 动 一 节 身 体 , 所 以 按下 有 效 方 向 键 后 , 先 确 定 蛇 头 的 位 置 , 而 后 蛇 的 身 体 随 蛇 头 移 动 , 图 形 的 实 现是 从 蛇 头 新 位 置 开 始 画 出 蛇 。 食 物 的 出 现 与 消 失 也 是 画 矩 形 块 和 覆 盖 矩 形 块 。为 了 便 于 理 解 , 定 义 两 个

7、 结 构 体 : 食 物 与 蛇 。3.3设 计 总 体 流 程 图C#课 程 设 计3载 入 游 戏 并 初 始 化蛇 开 始 移 动根 据 键 盘 控 制 蛇 移 动 方 向判 断 蛇 头 和 食 物 的坐 标 是 否 重 合随 机 生 成 多 个 食 物是 否判 断 蛇 头 和 自身 及 墙 是 否 重游 戏 结 束 是 否开始游戏 退出游戏继续游戏暂停游戏3.4设 计 的 具 体 实 现(1)画 板 的 设 计C#课 程 设 计41.新 建 一 个 Windows 应 用 程 序 , 起 名 Snake。2.重 命 名 Form1, 改 为 Splash。3.从 工 具 栏 里 拖 放

8、 一 个 picturebox到 Splash上 面 , 设 置 属 性 。(2) Palette类 的 实 现画 板 Palette 类 是 整 个 游 戏 的 核 心 处 理 类 , 里 面 定 义 了 画 布 的 大 小 , 背 景色 , 蛇 块 列 表 以 及 游 戏 速 度 , 移 动 方 向 等 属 性 , 另 外 还 提 供 了 timer 计 时 器 , 用于 定 时 更 新 蛇 块 坐 标 位 置 , 以 及 如 何 在 画 面 上 画 图 的 函 数 。(3)Start 函 数Start函 数 用 于 开 始 游 戏 , 这 个 函 数 的 内 部 其 实 就 是 设 定

9、食 物 , 以 及 触 发 计时 器 , 代 码 片 段 如 下C#课 程 设 计5(4)OnBlockTimedEvent函 数OnBlockTimedEvent函 数 是 计 时 器 的 执 行 函 数 , 这 个 函 数 用 于 更 新 蛇 块 信 息列 表 , 以 及 检 测 游 戏 是 否 结 束 等 等 , 代 码 片 段 如 下(5)CheckDead 函 数checkDead函 数 用 于 检 测 游 戏 是 否 结 束 , 具 体 检 查 规 则 如 下(6) Move 函 数Move 函 数 用 于 更 新 整 个 蛇 块 的 坐 标 , 我 们 前 面 通 过 将 蛇 块

10、 信 息 放 到 ArrayList 里 来 表 示贪 吃 蛇 的 整 个 信 息 , 其 中 根 据 下 标 从 0 到 Count-1 依 次 表 示 各 个 蛇 块 的 信 息 。(7) GetFood 函 数GetFood 函 数 用 于 生 成 下 一 个 食 物 , 其 实 就 是 一 个 蛇 块 , 生 成 的 规 则 就 是 , 坐标 要 在 画 布 范 围 内 , 并 且 食 物 的 坐 标 不 能 和 贪 吃 蛇 的 坐 标 重 合 , 具 体 代 码 如 下C#课 程 设 计6通 过 for 循 环 检 查 食 物 坐 标 是 否 和 贪 吃 蛇 的 蛇 块 列 表 Ar

11、rayList 里 的 蛇 块 有 冲 突(8) PaintPalette函 数PaintPalette函 数 需 要 一 个 参 数 , 也 就 是 绘 图 句 柄 , 然 后 在 这 个 画 布 上 画 图 也就 是 我 们 看 到 的 游 戏 效 果首 先 用 背 景 色 清 空 画 布 , 然 后 画 食 物 , 其 次 是 通 过 for 循 环 将 贪 吃 蛇 的 每 个 蛇 块 画 在 画布 上 , 以 此 达 到 游 戏 效 果 。(9) FormMain_K eyDown 函 数这 个 函 数 用 于 更 改 贪 吃 蛇 的 移 动 方 向 , 这 里 设 定 了 wdsa

12、和 上 下 左 右 都 可 以 使 用 , 更 改移 动 方 向 的 前 提 就 是 新 的 方 向 不 能 和 当 前 方 向 相 反 , 也 即 是 只 能 90 度 拐 弯 , 不 能 180 度 拐弯 。C#课 程 设 计7(10) pictureBox1_Paint 函 数这 个 事 件 在 pictureBox1需 要 重 新 绘 制 的 时 候 发 生 , 这 里 面 只 要 简 单 调 用 一 下让 贪 吃 蛇 重 新 绘 制 一 下 游 戏 就 行 了4、 程 序 测 试4.1测 试 内 容 与 结 果A 选 项 新 游 戏 游 戏 正 常 启 动B 选 项 新 游 戏 暂

13、停 游 戏 暂 停 , 并 显 示 当 前 得 分C 选 项 新 游 戏 暂 停 继 续 游 戏 继 续 运 行D 选 项 新 游 戏 ( 暂 停 继 续 ) 退 出 游 戏 显 示 当 前 得 分 , 确 认键 后 退 出 游 戏E 选 项 新 游 戏 , 蛇 头 撞 出 画 布 界 面 游 戏 结 束 , 并 显 示 当 前 得 分 0F 选 项 新 游 戏 , 蛇 头 吃 到 食 物 游 戏 继 续 , 得 分 +1G 选 项 新 游 戏 , 蛇 头 吃 到 8 个 食 物 后 , 蛇 头 撞 到 蛇 尾 游 戏 结 束 ,并 显 示 当 前 得 分 84.2程 序 运 行 效 果 图C

14、#课 程 设 计8C#课 程 设 计95、 实 验 总 结经 过 短 短 两 星 期 的 VC#.NET 课 程 设 计 , 让 我 对 C#有 了 一 个 更 深 的 了 解 , 以前 总 认 为 C#很 枯 燥 , 认 为 那 些 我 们 所 设 计 的 程 序 没 有 什 么 用 处 , 但 现 在 通 过 设计 贪 吃 蛇 游 戏 这 个 程 序 使 我 懂 得 了 如 何 将 所 学 的 知 识 运 用 于 生 活 当 中 。 虽 然 在刚 开 始 设 计 程 序 时 不 太 明 白 如 何 去 设 计 这 程 序 , 但 当 我 看 过 老 师 的 范 例 以 后 ,有 李 初 步

15、 的 思 路 , 用 C#语 言 做 出 这 个 贪 吃 蛇 程 序 后 , 让 我 深 深 感 受 到 C#语 言的 神 奇 。在 设 计 这 个 程 序 中 我 主 要 学 会 了 运 用 有 关 C#语 言 的 知 识 把 面 向 对 象 的 程 序C#课 程 设 计10设 计 思 想 应 用 到 具 体 的 工 作 和 学 习 中 , 加 深 对 类 与 对 象 的 理 解 并 能 够 对 现 实 生活 中 许 多 具 体 的 事 物 抽 象 出 类 , 并 掌 握 继 承 与 派 生 , 基 类 、 虚 方 法 和 抽 象 方 法和 多 态 性 的 概 念 。同 时 也 产 生 李

16、很 多 关 于 做 程 序 的 启 发 :1) 在 设 计 程 序 之 前 ,务 必 要 对 你 所 设 计 的 题 目 和 内 容 有 一 个 系 统 的 了 解 ,知 道 所 设 计 的 题 目 和 内 容 包 含 那 些 资 源 。2) 设 计 程 序 采 用 什 么 编 程 语 言 并 不 是 非 常 重 要 ,关 键 要 有 一 个 清 晰 的 思 路和 一 个 完 整 的 软 件 流 程 图 , 因 而 , 要 先 把 设 计 原 理 与 思 路 搞 清 楚 , 再 把 流 程 图画 出 来 , 这 样 设 计 起 来 就 简 单 多 了 。3) 在 设 计 程 序 时 ,不 能

17、妄 想 一 次 就 将 整 个 程 序 设 计 好 ,“反 复 修 改 ,不 断 改进 ”是 程 序 设 计 的 必 经 之 路 , 发 现 错 误 也 是 取 得 成 绩 的 一 种 。4) 要 养 成 注 释 程 序 的 好 习 惯 ,一 个 程 序 的 完 美 与 否 不 仅 仅 是 实 现 功 能 ,而应 该 让 人 一 看 就 能 明 白 你 的 思 路 ,这 样 也 为 资 料 的 保 存 和 交 流 提 供 了 方 便 。参 考 文 献 Visual Studio C#.NET 2005教 程 C#入 门 经 典 、 C#高 级 编 程 、 C#程 序 开 发 范 例 宝 典 附

18、 录附 录 A: 部 分 源 程 序1、 Main.cs 文 件using System;using System.Drawing;using System.Windows.Forms;namespace Netterpillars class MainGame public static GameEngine netterpillarGameEngine;private static AINetterpillar objAINetterpillar = new AINetterpillar();public static void Main(string args) Splash WinSp

19、lash;GameField WinGameField;GameOver WinGameOver = new GameOver();int LastTick=0; int DesiredFrameRate = 10;/ Create the game engine objectnetterpillarGameEngine = new GameEngine();WinSplash = new Splash();while ( WinSplash.ShowDialog()=DialogResult.OK) WinGameField = new GameField();WinGameField.Sh

20、ow();C#课 程 设 计11Application.DoEvents();/Creates a copy of the background image to allow erasing the spritesGameEngine.BackgroundImage =(Image)WinGameField.PicGameField.Image.Clone();netterpillarGameEngine.CreateGameField(WinGameField.PicGameField.Handle);while ( !netterpillarGameEngine.GameOver) if

21、(!netterpillarGameEngine.Paused) / EXTRA: Force a Frame rate of 10 frames to second on maximumif(System.Environment.TickCount-LastTick=1000/DesiredFrameRate) MoveComputerCharacters();netterpillarGameEngine.Render();LastTick = System.Environment.TickCount;Application.DoEvents();WinGameOver.ShowDialog

22、();WinGameField.Dispose();netterpillarGameEngine = null;WinSplash.Dispose();WinGameOver.Dispose();public static void MoveComputerCharacters() /Move the Netterpillarsfor(int i=0; i=1; i-) NetterBodyi.Location = NetterBodyi-1.Location;NetterBody0.Location = Location;NetterBody0.Draw(winHandle);NetterB

23、odyLength+;/ Updates the Netterpillar head positionLocation = new Point(x, y);/Clear the mushroomErase(winHandle);/ Draw the Netterpillar headDraw(winHandle);/ Reset the direction controller variabledirectionSet = false;public void Move(int x, int y, System.IntPtr winHandle) / Erase the last part of

24、 the bodyNetterBodyNetterBodyLength-1.Erase(winHandle);/ Updates the whole bodys position and then the head positionfor(int i=NetterBodyLength-1; i=1; i-) NetterBodyi.Location = NetterBodyi-1.Location;NetterBody0.Location = Location;Location = new Point(x, y);/ Redraws only the first part of the bod

25、y and the headNetterBody0.Draw(winHandle);/We dont need to erase the netterpillar head, since the body will coveritC#课 程 设 计15Draw(winHandle);/ Reset the direction controller variabledirectionSet = false;public new void Draw(System.IntPtr winHandle) switch(Direction) case Sprite.CompassDirections.Ea

26、st:base.Draw(NetterHeadE, winHandle);break;case Sprite.CompassDirections.South:base.Draw(NetterHeadS, winHandle);break;case Sprite.CompassDirections.West:base.Draw(NetterHeadW, winHandle);break;case Sprite.CompassDirections.North:base.Draw(NetterHeadN, winHandle);break;for(int i=0; iNetterBodyLength; i+) NetterBodyi.Draw(winHandle);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报