C课程设计贪吃蛇小益智游戏内附完整源码及附件.doc

  • 格式:doc
  • 大小:73.99 KB
  • 文档页数:18

温馨提示

程序语言:C、C++、C#、Python(红色字体 表示本课设使用的程序设计语言)

图形功能选项:Win32控制台程序(黑框、文本界面)、Win32程序、MFC、WinForm、DirectX10(黑体标明 表示本课设的程序图形类别,默认为非图形界面Win32控制台程序)

数据结构:基础类型、数组、链表、双向链表、搜索树(非平衡二叉树)、平衡二叉树、链表与平衡二叉树相结合、堆栈、队列、串、图(黑体标明 表示本课设使用的数据结构)

C++语言项:STL库(黑体标明 表示使用C++的STL库)

编译环境:Windows 7 64位旗舰版(Linux及其他环境请谨慎下载)

集成开发环境:Visual C++ 6.0、DEVC++、CodeBlocks、Visual Studio 2015均可通过编译。(浅蓝色字体 表示需要运行修改后的版本,请用户自行选择源代码测试)

分多头文件编译:否(所有代码基本都包含在一个文件内,如需试验头文件功能,请自行参考相关文献)

内容说明:

1、课设题目及预览内容 将在第二页开始展示。

2、代码行数:259行

3、目录 所示内容,本文基本涵盖,如无内容,会在本页进行说明。

4、附录 绝对包含用户使用手册及程序完整源代码和详细注释。 5、如需下载 其他 头文件(例如DirectX需另行配置),本文会在此进行说明。

6、本文撰写内容仅供学习参考,另外,由于本人水平有限,编写之处难免存在错误和纰漏,恳请各位老师或同学批评指正。

上 机 报 告

程序实践名称:________________________________

学生姓名:________________________________

专 业:________________________________

班 级:________________________________

学 号:________________________________

指导教师:________________________________

上机成绩:________________________________

上机地点:________________________________

上机时间:____________年_______月_______日

一、上机目的与上机要求(可以有多个目标及要求,对应多个上机内容)

1、上机目的(具体的目的,类似于“提出问题”)

将理论用于实践,更充分的掌握课本的知识,巩固并加深对课本知识的理解,进一步提高我们的动手编程能力。编写程序既能锻炼我们的动手能力,又能培养提高我们的学习热情。贪吃蛇是一个很简单而且比较益智的小游戏,编写起来比较简单,而且我们所学的知识也恰好能解决这个问题。

首先,我们需要明确一下编写贪吃蛇的框架。

其次,需要几个类控制整个游戏的运作。

最后,如何解决蛇移动和吃到食物的问题。

2、上机要求 (具体的上机要求及相关的问题分析,类似于“分析问题”)

由于游戏比较简单,所以一个类足够驾驭这个游戏的运作。

还有蛇的移动,因为蛇吃到一个食物,相应的长度就加一,这样,应该拆成蛇头、蛇身、蛇尾来进行比较方便操作,蛇头控制移动方向,而且蛇头吃到了食物,则蛇尾不需要去除。

二、上机设备(环境)及要求

操作系统:Windows 7

编译环境:VC6.0++

三、上机内容与步骤(类似于“解决问题”)

1、步骤1

(1)上机内容(明确的上机内容):解决问题的思路和方法(系统/方法/算法等),图文结合

首先,定义一个二维数组来储存整个地图的内容;

其次,再定义一个二维数组来记录蛇每部分的运动方向;

最后,分析一下整个游戏的关键:

一开始,我们把蛇分成了三个部分,蛇头、蛇身、蛇尾。

如图所示,黄色的是墙,这是初始状态的地图。

食物

蛇尾 蛇头

食物

蛇尾→ 蛇头→

食物

蛇尾 蛇身

根据方向绘制蛇头,如下图:

食物

蛇尾 蛇身 蛇头

擦除蛇尾,如下图:

食物

蛇身 蛇头

再绘制蛇尾,如下图:

食物

蛇尾 蛇头

这样便完成了蛇的移动,同样的方向的记录也是类似的。

食物

蛇头 蛇头↑

蛇尾 蛇尾↑

注:有箭头代表蛇的方向。

当蛇吃到食物的时候,只需要在食物的地方绘制蛇头,而原来蛇头的地方绘制蛇身即可,无须擦除蛇尾再进行绘制,然后重新产生食物,如下图。

蛇头 蛇头↑

蛇身 蛇身↑

蛇尾 蛇尾↑

食物

当检测到按键的时候,先改变蛇的移动方向,再移动蛇即可。

(2)主要实现(详细的关键代码)

void RetroSnaker::move()

{

switch (directionMap[hearY][hearX])

{

case UP:

if (FOOD == map[hearY - 1][hearX]) //吃到食物

againFood();

else if (EMPTY == map[hearY - 1][hearX]) //什么都没遇到

erasingTheTail(); //擦除尾巴

else {

gameOver = true; //没有遇到食物或者空,则表示游戏结束

break;

}

erasingTheHear(UP); break;

case DOWN:

if (FOOD == map[hearY + 1][hearX]) //吃到食物

againFood();

else if (EMPTY == map[hearY + 1][hearX]) //什么都没遇到

erasingTheTail(); //擦除尾巴

else {

gameOver = true; //没有遇到食物或者空,则表示游戏结束

break;

}

erasingTheHear(DOWN);

break;

case LEFT:

if (FOOD == map[hearY][hearX - 1]) //吃到食物

againFood();

else if (EMPTY == map[hearY][hearX - 1]) //什么都没遇到

erasingTheTail(); //擦除尾巴

else {

gameOver = true; //没有遇到食物或者空,则表示游戏结束

break;

}

erasingTheHear(LEFT);

break;

case RIGHT:

if (FOOD == map[hearY][hearX + 1]) //吃到食物

againFood();

else if (EMPTY == map[hearY][hearX + 1]) //什么都没遇到

erasingTheTail(); //擦除尾巴

else {

gameOver = true; //没有遇到食物或者空,则表示游戏结束

break;

}

erasingTheHear(RIGHT);

break;

default:

break;

}

}

四:上机运行结果与分析

(详细的程序运行结果,图/表/文相结合,并对结果进行较全面的对比分析,类似于“验证问题”)