文档视界 最新最全的文档下载
当前位置:文档视界 › 简单小游戏“贪吃蛇”可运行代码

简单小游戏“贪吃蛇”可运行代码

#include
#include
#include
#include
#include
#define SIZEMAX 100
#define SNAKELEN 10
#define SPEED 100
typedef enum
{
left,right,up,down
}DIR;
typedef struct
{
int x;
int y;
}COOR;
struct FOOD
{
COOR crd;
int flag;
}food;
struct SNAKE
{
COOR crd[SIZEMAX];
int node;
DIR dir;
}snake;
int speed=SPEED;

void init()
{
initgraph(640,480);
srand(time(NULL));
food.flag=0;
snake.crd[0].x=0+SNAKELEN;
snake.crd[0].y=0;
snake.crd[1].x=0;
snake.crd[1].y=0;
snake.node=2;
snake.dir=right;
}
void setfoodcrd()
{
food.crd.x=rand()%(600/SNAKELEN)*SNAKELEN;
food.crd.y=rand()%(480/SNAKELEN)*SNAKELEN;
food.flag=1;
}
void showfood()
{
rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);
}
void showsnake()
{
int i;
for(i=snake.node-1;i>=0;i--)
rectangle(snake.crd[i].x,snake.crd[i].y,snake.crd[i].x+SNAKELEN,snake.crd[i].y+SNAKELEN);
setcolor(BLACK);
rectangle(snake.crd[snake.node].x,snake.crd[snake.node].y,snake.crd[snake.node].x+SNAKELEN,snake.crd[snake.node].y+SNAKELEN);
setcolor(WHITE);rectangle(snake.crd[snake.node-1].x,snake.crd[snake.node-1].y,snake.crd[snake.node-1].x+SNAKELEN,snake.crd[snake.node-1].y+SNAKELEN);
}
void snakemove()
{
int i;for(i=snake.node;i>0;i--)
{
snake.crd[i].x=snake.crd[i-1].x;
snake.crd[i].y=snake.crd[i-1].y;
}
switch(snake.dir)
{
case up:snake.crd[0].y-=SNAKELEN;break;
case down:snake.crd[0].y+=SNAKELEN;break;
case left:snake.crd[0].x-=SNAKELEN;break;
case right:snake.crd[0].x+=SNAKELEN;
}showsnake();
}
void changeskdir() /*改变蛇的方向*/
{
char key;
key=getch();
switch(key)
{
case'w': case'W': if(snake.dir!=down)snake.dir=up;break;
case's': case'S': if(snake.dir!=up) snake.dir=down;break;
case'a': case'A': if(snake.dir!=right)snake.dir=left;break;
case'd': case'D': if(snake.dir!=left) snake.dir=right;break;
}
}
void gameover() /*游戏结束函数*/
{
IMAGE img;
loadimage(&img,"6.jpg");
putimage(0,0,&img);
setcolor(BLUE);
setfont(30,0,"宋体");
settextcolor(YELLOW);
outtextxy(280,100,"感谢您的支持");
outtextxy(320,150,"谢谢");
Sleep(2000);
}
void judgeslod()
{
int i;
if(snake.crd[0].x<0||snake.crd[0].x>=640||snake.crd[0].y<0||snake.crd[0].y>=480)
gameover();
for(i=snake.node-1;i>0;i--)
if(i=snake.crd[0].x==snake.crd[i].x&&snake.crd[0].y==snake.crd[i].y)
gameover;
}

void judgefood() /*判断蛇是否吃到食物*/
{
if(snake.crd[0].x==food.crd.x&&snake.crd[0].y==food.crd.y)
{
snake.node++;
setcolor(BLACK);
rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);
setcolor(WHITE); food.flag=0;
}
}

void main()
{
init();
while(1){
while(!kbhit())
{
if (!food.flag) setfoodcrd();
showfood();
judgeslod();
judgefood();
snakemove();
Sleep(speed);

}
changeskdir();
}
}

相关文档