当前位置:文档之家› 最简单贪吃蛇源码

最简单贪吃蛇源码

?/*******************************************************/
/*本程序仅仅实现贪吃蛇最基本的功能,可供初学C/C++者参考*/
/*******************************************************/
#include
#include
#include
#include
#include
using namespace std;

struct Body
{
int x,y;
Body* next;
};
const int wall_x = 50;
const int wall_y = 25;
int direction = 1; //蛇头方向
int count = 0;
Body* head = new Body;
Body* temp2 = new Body;
Body* temp3 = new Body;

void gotoXY(short x, short y) //设置光标输出位置
{
COORD pos = {x,y};
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(out,pos);
}
void DrawMap() //画地图
{
for (int i = 0; i < wall_x; i++)
{
gotoXY(i,wall_y-1);
cout<<'*';
gotoXY(i,0);
cout<<'*';
}
for (int i = 0; i < wall_y; i++)
{
gotoXY(0,i);
cout<<'*';
gotoXY(wall_x-1,i);
cout<<'*';
}
}
void InitBody() //初始化蛇身
{
head->x = 5;
head->y = 3;
temp2->x = 4;
temp2->y = 3;
temp3->x = 3;
temp3->y = 3;
head->next = temp2;
temp2->next = temp3;
temp3->next = 0;
}
void DrawBody() //画蛇身
{
Body * p;
p = head;
while(p != 0)
{
gotoXY(p->x, p->y);
cout<<'*';
p = p->next;
}
}
void move_Body() //蛇身移动
{
Body * p = new Body;
if(1 == direction) //向右
{
p->x = head->x + 1;
p->y = head->y;
p->next = head;
head = p;
}
if(2 == direction) //向左
{
p->x = head->x - 1;
p->y = head->y;
p->next = head;
head = p;
}
if(3 == direction) //向下
{
p->y = head->y + 1;
p->x = head->x;
p->next = head;
head = p;
}
if(4 == direction) //向上
{
p->y = head->y - 1;
p->x = head->x;
p->next = head;
head = p;
}
}
void contrl_Body() //方向控制
{
char ch;
while(kbhit())
{
ch = getch();
if('d' == ch || 'D' == ch)
direction = 1;
if('a' == ch || 'A' == ch)
direction = 2;
if('w' == ch || 'W' == ch)
direction = 4;
if('s' == ch || 'S' == ch)
direction = 3;
}
}
void DelBody() //删除蛇尾
{
Body* p = head;
while((p->next)->next != 0)
{
p = p->next;
}
gotoXY(p->next->x, p->next->y);
cout<<' ';
delete p->next;
p->next = 0;

}
int Food = 0;
int Food_x = 0;
int Food_y = 0;
void DrawFood() //产生食物
{
srand(time(0));
if(0 == Food)
{

Food_x = rand()%47 + 2;
Food_y = rand()%22 + 2;
Body * p = head;
while(p != 0)
{
if(p->x == Food_x && p->y == Food_y)
{
Food_x = rand()%47 + 2;
Food_y = rand()%22 + 2;
}
p = p->next;
}
gotoXY(Food_x, Food_y);
cout<<'*';
Food = 1;
}
}

int main()
{
DrawMap();
InitBody();
DrawBody();
gotoXY(55,10);
cout<<"w = 上,a = 左";
gotoXY(55,13);
cout<<"s = 下,d = 右!";

while(1)
{
gotoXY(55,15);
cout<<"当前得分:"<gotoXY(55,17);
cout<<"当前蛇身长度:"<move_Body();
DrawBody();
DrawFood();
contrl_Body();
if(head->x == Food_x && head->y == Food_y) //吃到食物
{
move_Body();
DrawBody();
Food = 0;
count++;
}
DelBody();
if(head->x == 1 || head->y == 24 || head->x == 50 || head->y == 0 )
{
cout<<"游戏结束";
break;
}
Sleep(250);
}
return 0;
}

相关主题
文本预览
相关文档 最新文档