DOS贪吃蛇程序设计思路及代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
游戏背景及设计原因
蛇引诱夏娃吃了苹果之后,就被贬为毒虫,成为阴险的象征。而蛇吃东西是整只动物吞进去的,很久以前(大概文艺复兴的时候)就有人发明了一种游戏,就是现在贪吃蛇的前身,后来慢慢的发展就变成了今天的贪吃蛇了—一个很受欢迎、为人熟知、给很多人美好时光的经典小游戏。
贪吃蛇在我们曾经的岁月里留下了很多美好的记忆,也伴随我们走过了很长一段的人生路,对于贪吃蛇这个游戏有着特殊的感情,也一直很好奇这个游戏是怎么设计的,所以这次我们就选择了这个题目。一是弄清楚这个游戏的设计;二是学习程序的编辑过程和对编程的进一步深入了解。
程序结构图
程序流程图
程序设计及说明
1、边墙(Wall)
该类规定游戏的范围大小。
2、蛇类(Snake)
用该类生成一个实例蛇snake。
3、移动(Move)
该类用于实现对蛇的操作控制,即蛇头方向的上下左右的移动操作。
4、食物类(Food)
该类是游戏过程中食物随机产生的控制和显示。
5、判断死亡(Dead)
该类是对游戏过程中判断玩家操作是否导致蛇的死亡,其中包括蛇头咬食自己身体和蛇头是否触及游戏“边墙”。
6、蛇结点(SnakeNode)
该类是蛇吃下随机产生的食物从而增加长度的控制类,其中包括蛇长度增加和尾部的变化。
7、计分统计(Score)
该类由于玩家的游戏成绩记录,及游戏结束时的得分输出。
...
部分函数及说明
1.Char menu();
/*用于玩家选择的游戏速度,返回一个char值*/
2.DELAY(char ch1);
/*用于控制游戏速度*/
3.void drawmap();
/*绘制游戏地图函数*
4、void menu()
/*游戏帮助信息的输出*
...
部分类细节解说
1、蛇的构建—Snake
class Snake{
public:
int x[n];
int y[n];
int node; //蛇身长度
int direction;//蛇运动方向
int life;//蛇生命,判断死亡
}
2、随机食物Food
利用rand()函数进行随机数产生,然后就行坐标定位void Food(void){
...
int pos_x = 0;
int pos_y = 0;
pos_x = rand() % length;//x坐标的确定
pos_y = rand() % (width-1);//y坐标的确定...
}
3、蛇头方向确定
利用switch语句进行方向确定...
switch(){
case VK_UP:{
OutChar2.Y--;
y--;
break;
}
case VK_LEFT:{
OutChar2.Y++;
y++;
break;
}
case VK_DOWN:{
OutChar2.X---;
x--;
break;
}
case 'VK_RIGHT:{
OutChar2.X++;
x++;
break;
}
}
代码
#include
#include
#include
#include
#include
using namespace std;
int score=0,t=300,f=1;//得分与时间间隔/ms(控制贪吃蛇的速度)double ss=0,tt=0;//统计时间所用参数
class Node
{
Node(): x(0), y(0), prior(0), next(0) { }
int x;
int y;
Node *prior;
Node *next;
friend class Snake;
};
class Snake
{
public:
Snake();
~Snake();
void output();
void move();
void change_point(char);
private:
Node *head;
Node *tail;
enum p{ UP, RIGHT, DOWN, LEFT }point; //方向
int food_x, food_y; //食物的坐标
static const int N = 23;
int game[N][N];
void add_head(int, int); //添加坐标为a,b的结点
void delete_tail(); //删除最后一个结点
void greate_food(); //产生食物
void gotoxy(int, int);
};
void menu(); //游戏操作菜单
int main()
{ system("color a"); //初始cmd窗口颜色为黑(背景)淡绿(文字)
cout<<"\n\n\n\n\n\n ";
for(int i=0;i<23;i++)
{char star[]={"Welcome To Snake Game!"};
cout< Sleep(170);} cout<<"\n\n 祝你好运!"< if(kbhit()){char kk=getch();if(kk==9)f=5;} //如果执行,吃一颗星加5分system("cls"); Snake s; menu(); system("color 1a"); s.output(); while (true) { char keydown = getch(); if(keydown==32)getch(); if(keydown==27)return 0; s.change_point(keydown); while (!kbhit()) {clock_t start,end;start=clock(); s.move(); s.output(); Sleep(t); end=clock();tt=(double)(end-start)/CLOCKS_PER_SEC;ss+=tt; cout<<" 时间:"<<(int)ss;