1、学 生 课 程 设 计 报 告一 、 课 程 设 计 内 容贪 吃 蛇 小 游 戏 程 序 设 计( 贪 吃 蛇 游 戏 是 一 个 经 典 小 游 戏 , 一 条 蛇 在 封 闭 围 墙 里 , 围 墙 里 随 机 出 现 一 个 食 物 , 通 过 按键 盘 四 个 光 标 键 控 制 蛇 向 上 下 左 右 四 个 方 向 移 动 , 蛇 头 撞 倒 食 物 , 则 食 物 被 吃 掉 , 蛇 身 体 长一 节 , 同 时 记 10分 , 接 着 又 出 现 食 物 , 等 待 蛇 来 吃 , 如 果 蛇 在 移 动 中 身 体 交 叉 蛇 头 撞 倒 自 己身 体 则 游 戏 结 束
2、。 )二 、 技 术 路 线使 用 VC+6.0作 为 开 发 环 境 ,采 用 控 制 台 的 形 式 完 成 整 个 游 戏 的 开 发 , 没 有 用 到 MFC。加 入 了 pcc32.h的 头 文 件 及 库 文 件 , 用 于 对 控 制 台 打 印 效 果 的 控 制 。同 时 也 加 入 了 PlaySound()函 数 , 实 现 了 对 菜 单 选 择 , 游 戏 开 始 , 游 戏 结 束 的 音 效 控 制 。游 戏 栏 和 输 出 栏 的 同 时 打 印 , 数 据 的 更 新 打 印 效 果 , 没 有 采 用 双 线 程 的 方 法 实 现 。接 收 用 户 键
3、盘 输 入 信 息 , 实 现 游 戏 暂 停 , 重 新 开 始 , 菜 单 选 择 和 进 入 菜 单 。三 、 设 计 与 实 现1.游 戏 基 本 功 能 :游 戏 有 开 始 菜 单 界 面 , 并 有 开 始 游 戏 , 游 戏 帮 助 , 关 于 游 戏 , 退 出 游 戏 四 个 选 项游 戏 初 始 化 后 , 一 条 蛇 在 密 闭 的 围 墙 内 ,在 围 墙 内 随 机 出 现 一 个 食 物 ,通 过 按 键 盘 上 的 四 个 方 向 键 控 制 蛇 移 动 ,蛇 在 移 动 过 程 中 撞 到 墙 壁 将 不 会 死 亡 , 而 是 穿 过 围 墙 继 续 行 进
4、 ,但 是 如 果 蛇 身 体 交 叉 蛇 头 撞 到 自 己 的 身 体 , 则 游 戏 结 束 。同 时 , 游 戏 过 程 中 可 暂 停 游 戏 , 并 有 积 分 系 统 ,且 积 分 每 满 一 定 值 , 蛇 的 运 行 速 度 也 会 逐 步 增 加 。2.函 数 定 义 和 声 明( 1) 头 文 件#include#include#include#include#include#include “mmsystem.h“#pragma comment(lib,“winmm.lib“)#include“pcc32.h“ #pragma comment(lib, “pcc32_v
5、c6.lib“)using namespace std;#define UP 72/定 义 上 下 左 右 常 量#define DOWN 80#define LEFT 75#define RIGHT 77#define ESC 27#define SPACE 32/空 格#define ENTER 13/回 车( 2) 函 数 声 明void GamePrint();/游 戏 开 始 画 面 函 数void Gameinit();/游 戏 初 始 化 函 数void Sweep_Screem();/清 屏 函 数void Gotoxy(int , int);/光 标 移 动 函 数void
6、Hid_Cursor();/光 标 隐 藏 函 数void Snake_Move();/蛇 运 动 函 数int Create_Food();/食 物 产 生 函 数void Pwall();/画 墙 函 数void Key();/键 盘 操 作 和 处 理 函 数void Hit_Wall();/判 断 是 否 撞 墙void Eat_Itself();/判 断 是 否 咬 到 自 己void Whether_Eat();/判 断 蛇 是 否 吃 到 食 物void GameRun();/游 戏 运 行 函 数void SurFace();/开 始 菜 单 界 面void GameOver(
7、);/游 戏 结 束 判 断 函 数void Pause();/游 戏 暂 停 函 数void MyCount1();/统 计 边 栏 , 用 来 做 提 示void MyCount2();/统 计 边 栏 , 用 来 做 一 些 统 计void Menu( int );/开 始 界 面void Inti_Data();/初 始 化 数 据( 3) 变 量 声 明int X, Y;/食 物 坐 标int Map7924=0;/地 图 尺 寸 , 其 实 有 食 物 记 为 1int over = 0;/用 来 标 记 游 戏 结 束int score = 0;/记 录 分 数int speed
8、 = 130;/记 录 速 度int ColoArray15=15,1,2,3,4,5,6,7,8,9,10,11,12,13,14;/自 己 定 义 的 用 来 控 制 颜 色 的 数 组int length = 3;/初 始 化 蛇 的 长 度 为 3int Key_Menu;/开 始 菜 单 界 面 用 的 零 时 按 键3.主 函 数 int main( )int main() /主 函 数START:Inti_Data();fixConsoleSize(18,15);Hid_Cursor();SurFace();PlaySound(TEXT(“m22.wav“), NULL, SND
9、_FILENAME | SND_ASYNC );fixConsoleSize(105,25);GamePrint();Gameinit();GameRun();while(over) /如 果 游 戏 结 束 了 , 是 否 重 新 开 始 。 按 R键 为 重 新 开 始 int t=getch();if(t = r|t = R) system(“cls“);goto START;return 0;4.界 面 函 数 Surface( )SurFace()是 通 过 接 受 按 键 信 息 来 调 用 Menu();SurFace()中 给 出 了 四 个 菜 单 选 项 ,上 下 键 实
10、现 对 菜 单 的 选 择 ,ENTER键 实 现 对 菜 单 的 进 入 ;temp用 于 存 放 按 键 信 息 ,keytemp用 于 记 录 当 前 菜 单 的 位 置 ,实 现 了 在 第 一 个 菜 单 选 项 按 上 方 向 键 会 走 到 最 后 一 个 菜 单 选 项 ( keytemp+=4) ,在 最 后 一 个 菜 单 选 项 按 下 方 向 键 会 走 到 第 一 个 菜 单 选 项 ( keytemp%4)5.菜 单 函 数 Menu( int n)调 节 输 出 的 颜 色 给 人 以 选 择 光 效 移 动 的 效 果 , 事 实 上 只 是 先 清 屏 然 后
11、 重 新 打 印 了 而 已 , 通过 SurFace()传 参 来 控 制 菜 单 输 出 结 果6.流 程 图四 、 测 试 结 果1. 开 始 界 面开 始开 始 菜 单 界 面初 始 化 游 戏 界 面蛇 运 动蛇 吃 到 食 物 ?蛇 长 大蛇 死 亡继 续退 出 界 面N帮 助 菜 单 关 于 菜 单开 始 游 戏产 生 食 物 NYNY Y2. 游 戏 界 面五 、 感 想 和 体 会刚 开 始 决 定 做 这 个 游 戏 的 时 候 , 还 是 有 点 迷 茫 不 知 道 从 何 做 起 , 于 是 在 网 络 上 寻 找 了大 量 的 资 料 , 了 解 到 具 体 有 控
12、制 台 的 贪 吃 蛇 , MFC写 的 贪 吃 蛇 , 还 有 其 他 更 高 级 的 贪 吃蛇 。 最 终 开 始 有 初 步 的 规 划 。首 先 , 由 于 对 面 向 对 象 和 对 类 的 理 解 不 够 , 这 里 我 们 采 用 了 C 语 言 进 行 开 发 。其 次 , 介 于 对 Q T, WIN32SDK, GDI, OPENGL, DirectX 等 等 没 有 任 何 基 础 , 甚至 是 对 C+也 没 有 很 好 的 理 解 , 也 难 以 进 行 更 高 效 和 更 好 的 开 发 。最 后 , 我 们 没 有 采 用 MFC 进 行 游 戏 开 发 ,而 是
13、 直 接 采 用 了 控 制 台 进 行 开 发 。开 始 我 们 先 对 最 简 单 的 程 序 进 行 分 享 , 在 充 分 理 解 了 贪 吃 蛇 核 心 的 算 法 部 分 后 , 发 现了 完 成 这 个 项 目 的 可 行 性 , 其 他 的 部 分 就 可 以 靠 我 们 自 己 进 行 开 发 了 。在 完 全 依 靠 控 制 台 的 情 况 下 ,我 们 遇 到 并 解 决 了 许 多 问 题 , 提 高 了 自 己 , 同 时 也 收 获 了 实 践 的 经 验 。我 们 采 用 了 自 己 想 出 的 很 多 方 法 来 解 决 “ 界 面 ” 的 问 题 ,开 始 菜
14、 单 界 面 的 完 成 , 就 用 了 比 较 笨 的 方 法 , 原 因 还 是 知 识 贫 乏 。开 发 过 程 中 , 我 们 遇 到 了 许 多 问 题 , 在 网 络 寻 求 帮 助 之 后 , 我 们 意 外 的 发 现 了 PCC32库 , 并 下 载 了 这 个 库 和 头 文 件 , 在 对 PCC32 头 文 件 进 行 深 入 研 究 之 后 , 我 们 在 游 戏 的开 发 中 大 量 使 用 了 PCC32.h 头 文 件 中 的 函 数 , 使 我 们 的 开 发 变 得 更 加 顺 利 。 在 次 非 常感 谢 PCC32 库 的 作 者 , 正 是 他 的 无
15、 私 奉 献 , 才 使 我 们 的 能 够 更 好 得 开 发 。还 有 就 是 多 线 程 的 问 题 , 在 多 方 面 询 问 之 后 , 发 现 单 线 程 的 局 限 性 太 大 , 但 是 还 是 因为 知 识 匮 乏 的 缘 故 , , 我 们 对 如 果 实 现 多 线 程 没 有 很 好 的 理 解 , 最 终 只 能 使 用 单 线 程 。还 有 就 是 我 们 对 windowsAPI了 解 甚 少 , 然 而 WindowsAPI包 括 几 千 个 可 调 用 的 函 数 ,这 让 我 们 在 临 时 运 用 的 时 候 , 显 得 力 不 从 心 , 很 多 函 数
16、 并 没 有 完 全 了 解 其 功 能 和 各 参数 的 用 法 就 拿 来 使 用 , 希 望 在 以 后 的 生 活 中 , 更 加 努 力 的 去 学 习 。现 在 腹 中 的 知 识 还 非 常 非 常 有 限 , 能 够 完 成 这 个 游 戏 , 我 们 觉 得 挺 开 心 的 , 不 过 高 手看 了 我 们 的 代 码 , 没 有 发 辫 其 他 任 何 评 论 , 直 接 给 了 三 个 字 , 烂 代 码 , 这 让 我 们 明 白了 , 我 们 要 走 的 路 还 很 远 。在 以 后 的 学 习 中 , 我 们 小 组 一 定 会 更 加 努 力 , 总 有 一 天 我 们 也 会 成 为 真 正 的 高 手