c语言贪吃蛇小游戏程序课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生课程设计报告
一、课程设计内容
贪吃蛇小游戏程序设计
(贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中身体交叉蛇头撞倒自己身体则游戏结束。)
二、技术路线
使用VC++6.0作为开发环境,
采用控制台的形式完成整个游戏的开发,没有用到MFC。
加入了pcc32.h的头文件及库文件,用于对控制台打印效果的控制。
同时也加入了PlaySound()函数,实现了对菜单选择,游戏开始,游戏结束的音效控制。游戏栏和输出栏的同时打印,数据的更新打印效果,没有采用双线程的方法实现。
接收用户键盘输入信息,实现游戏暂停,重新开始,菜单选择和进入菜单。
三、设计与实现
1.游戏基本功能:
游戏有开始菜单界面,并有开始游戏,游戏帮助,关于游戏,退出游戏四个选项
游戏初始化后,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,
通过按键盘上的四个方向键控制蛇移动,
蛇在移动过程中撞到墙壁将不会死亡,而是穿过围墙继续行进,
但是如果蛇身体交叉蛇头撞到自己的身体,则游戏结束。
同时,游戏过程中可暂停游戏,并有积分系统,
且积分每满一定值,蛇的运行速度也会逐步增加。
2.函数定义和声明
(1)头文件
#include
#include
#include
#include "mmsystem.h" #pragma comment (lib,"winmm.lib")
#include"pcc32.h" #pragma comment
(lib, "pcc32_vc6.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 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();
//游戏结束判断函数
void Pause();
//游戏暂停函数
void MyCount1();
//统计边栏,用来做提示
void MyCount2();
//统计边栏,用来做一些统计
void Menu( int );
//开始界面
void Inti_Data();
//初始化数据
(3)变量声明
int X, Y;
//食物坐标
int Map[79][24]={{0}};
//地图尺寸,其实有食物记为1
int over = 0;
//用来标记游戏结束
int score = 0;
//记录分数
int speed = 130;
//记录速度
int ColoArray[15]=
{15,1,2,3,4,5,6,7,8,9,10,11,12,13,14} ;
//自己定义的用来控制颜色的数组
int length = 3;
//初始化蛇的长度为3
int Key_Menu;
//开始菜单界面用的零时按键
3.主函数int main()
int main() //主函数
{
START:
Inti_Data();
fixConsoleSize(18,15);
Hid_Cursor();
SurFace();
PlaySound(TEXT("m22.wav"), NULL, SND_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()中给出了四个菜单选项,
上下键实现对菜单的选择,
ENTER键实现对菜单的进入;
temp用于存放按键信息,
keytemp用于记录当前菜单的位置,
实现了在第一个菜单选项按上方向键会走到最后一个菜单选项(keytemp+=4),
在最后一个菜单选项按下方向键会走到第一个菜单选项(keytemp%4)
5.菜单函数Menu(int n)
调节输出的颜色给人以选择光效移动的效果,事实上只是先清屏然后重新打印了而已,通过SurFace()传参来控制菜单输出结果