|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <iostream>
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#define MAX 1000
#define high 40
#define wigh 50
//食物的属性
struct s
{
int x,y;
}food;
//蛇的属性
struct crd
{
int x,y;
};
struct d
{
struct crd bold[MAX];
int size;
char go_where;
}snack;
char snack_c;//存放蛇当期的方向;
int flag=1;//食物被啃标志;
int count=0;//分数记录
//定位光标。
void get_x_y(int x,int y)
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord. X=x;coord. Y=y;
SetConsoleCursorPosition(handle,coord);
}
//画地图。
void map_create()
{
for(int i=0;i<high;i++)
{
get_x_y(0,i); printf("*");
get_x_y(wigh,i); printf("*");
get_x_y(wigh+10,i);printf("*");
}
for(int i=0;i<wigh+10;i++)
{
get_x_y(i,0); printf("*");
get_x_y(i,high); printf("*");
}
get_x_y(52,5);printf("贪吃蛇");
get_x_y(51,15);printf("游戏说明:");
get_x_y(52,17);printf("按A,D,W,Z任意一键开始");
get_x_y(52,19);printf("A向左,D向右");
get_x_y(52,21);printf("W向上,Z向下");
get_x_y(52,23);printf("H键退出游戏");
get_x_y(100,100);
}
//画蛇
void snack_create()
{
for(int i=0; i<snack.size;i++)
{
get_x_y(snack.bold[i].x,snack.bold[i].y);
printf("*");
}
}
//蛇身坐标移动变化
void snack_change()
{
for(int i=snack.size;i>0;i--)
{
snack. bold[i].x=snack. bold[i-1].x;
snack. bold[i].y=snack. bold[i-1].y;
}
}
//初始化蛇身坐标
void frist()
{
snack. size=5;
snack.go_where='d';
food. x=10;food. y=10;
get_x_y(food.x,food.y);
printf("*");
for(int i=0;i<snack.size;i++)
{
snack. bold[i].x=wigh/2;
snack. bold[i].y=high/2;
}
}
//按键操作
int key_create()
{
switch(snack_c)
{
case 'w':
case 'W': if(snack.go_where!='z'&&snack.go_where!='Z')
{ if(snack.bold[0].y==0)//不让它穿过上墙去破坏文字说明.
{ snack_c='g';return 0;}
snack.bold[0].y--;
} break;
case 'z':
case 'Z': if(snack.go_where!='w'&&snack.go_where!='W')
{ if(snack.bold[0].y==high)//不让它穿过下墙去破坏文字说明.
{ snack_c='g';return 0;}
snack.bold[0].y++;
} break;
case 'a':
case 'A': if(snack.go_where!='d'&&snack.go_where!='D')
{ if(snack.bold[0].x==0)//不让它穿过左墙去破坏文字说明.
{ snack_c='g';return 0;}
snack.bold[0].x--;
} break;
case 'd':
case 'D': if(snack.go_where!='a'&&snack.go_where!='A')
{
if(snack.bold[0].x==wigh)//不让它穿过右墙去破坏文字说明.
{ snack_c='g';return 0;}
snack.bold[0].x++;
} break;
case 'H':
case 'h':system("cls");get_x_y(wigh/2,high/2);printf("程序已退出…\n");
get_x_y(100,100);Sleep(500);exit(1);
}
snack.go_where=snack_c;
}
//蛇的檫尾
int snack_clear()
{
if (snack.bold[snack.size].x==0)
{
if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
{ return 0;}
}
if (snack.bold[snack.size].x==wigh)
{
if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
{ return 0;}
}
if (snack.bold[snack.size].x==wigh+10)
{
if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
{ return 0;}
}
if (snack.bold[snack.size].y==0)
{
if(snack.bold[snack.size].x<=wigh&&snack.bold[snack.size].x>=0)
{ return 0;}
}
if (snack.bold[snack.size].y==high)
{
if(snack.bold[snack.size].x<=wigh&&snack.bold[snack.size].x>=0)
{ return 0;}
}
//以上都是防止边框被蛇吃掉处理。
get_x_y(snack.bold[snack.size].x, snack.bold[snack.size].y);
printf(" ");
}
//食物的产生
int snack_food()
{
srand((unsigned)time(0));
food.x=rand()%(wigh-4)+2;
food.y=rand()%(high-4)+2;
for(int i=0;i<snack.size;i++)
{
if(food.x==snack.bold[i].x&&food.y==snack.bold[i].y)
{ return 0;}
}
get_x_y(food.x,food.y);
printf("*");
flag=1;
}
//蛇的移动
void snack_move()
{
while(!kbhit())
{
snack_create();
get_x_y(100,100);//去除光标。
if(snack.bold[0].x==food.x&&snack.bold[0].y==food.y)
{
count++;flag=0; snack.size++;
get_x_y(52,30);printf("分数记录: %d",count);
}
while(flag==0)
{ snack_food();}
key_create();
snack_change();
Sleep(200);
snack_clear();
}
snack_c=getch();
//system("cls");
}
int main()
{
map_create();//地图
frist();//初始化
while(1)
{
snack_move();
}
return 0;
} |
|