DOS贪吃蛇程序设计思路及代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档