贪吃蛇C实现
来源:互联网 发布:拼长图软件哪个好 编辑:程序博客网 时间:2024/04/28 22:42
给自己的生日礼物
#include "stdlib.h"
#include "graphics.h"
#define UP 1
#define LEFT 2
#define DOWN 3
#define RIGHT 4
#define KEY_UP 0x4800
#define KEY_LEFT 0x4b00
#define KEY_DOWN 0x5000
#define KEY_RIGHT 0x4d00
#define KEY_SPACE 0x3920
struct node {
unsigned int x;
unsigned int y;
struct node *next;
};
struct apple {
unsigned int x;
unsigned int y;
};
struct snake {
struct node *head;
struct node *rear;
int direct;
int length;
};
struct snake greedy;
struct apple akiss;
void init()
{
int i;
struct node *p;
setfillstyle(SOLID_FILL,2);
for(i=1;i<6;i++)
{
p=(struct node *)malloc(sizeof(struct node));
if(p==NULL)
{
printf("Memory alloc faild!/n");
return ;
}
p->x=20*i;
p->y=20;
p->next=NULL;
if(greedy.head==NULL)
{
greedy.head=p;
greedy.rear=p;
}
else
{
greedy.head->next=p;
greedy.head=greedy.head->next;
}
bar(p->x+1,p->y+1,p->x+19,p->y+19);
}
greedy.direct=4;
greedy.length=5;
setcolor(2);
line(20,20,620,20);
line(20,460,620,460);
line(20,20,20,460);
line(620,20,620,460);
}
void delsnake()
{
struct node *p;
for(p=greedy.rear;p!=NULL;p=greedy.rear)
{
greedy.rear=greedy.rear->next;
free(p);
}
}
void putapple()
{
struct node *p=greedy.rear;
AGAIN:
srand(time(NULL));
akiss.x=random(30)*20+20;
akiss.y=random(20)*20+20;
for(;;p=p->next)
{
if(p->x==akiss.x && p->y==akiss.y)
goto AGAIN;
if(p==greedy.head)
break;
}
setcolor(4);
bar(akiss.x+2,akiss.y+2,akiss.x+18,akiss.y+18);
}
void moveandeat()
{
struct node *p=NULL;
if(greedy.head->x!=akiss.x || greedy.head->y!=akiss.y)
{
setfillstyle(SOLID_FILL,BLACK);
bar(greedy.rear->x+1,greedy.rear->y+1,greedy.rear->x+19,greedy.rear->y+19);
setfillstyle(SOLID_FILL,2);
bar(greedy.head->x+1,greedy.head->y+1,greedy.head->x+19,greedy.head->y+19);
for(p=greedy.rear;p!=greedy.head;p=p->next)
{
p->x=p->next->x;
p->y=p->next->y;
}
}
else
{
p=(struct node *)malloc(sizeof(struct node));
if(p==NULL)
return ;
p->x=greedy.head->x;
p->y=greedy.head->y;
p->next=NULL;
greedy.head->next=p;
setfillstyle(SOLID_FILL,2);
bar(greedy.head->x+1,greedy.head->y+1,greedy.head->x+19,greedy.head->y+19);
greedy.head=p;
putapple();
greedy.length++;
}
if(greedy.direct==1)
greedy.head->y-=20;
if(greedy.direct==2)
greedy.head->x-=20;
if(greedy.direct==3)
greedy.head->y+=20;
if(greedy.direct==4)
greedy.head->x+=20;
setfillstyle(SOLID_FILL,14);
bar(greedy.head->x+1,greedy.head->y+1,greedy.head->x+19,greedy.head->y+19);
}
int check() /*normal--0 ortherwise--1*/
{
struct node *p=greedy.rear;
if(greedy.head->x>600 || greedy.head->x<20 || greedy.head->y>440 || greedy.head->y<20)
return 1;
for(;p!=greedy.head;p=p->next)
if(p->x==greedy.head->x && p->y==greedy.head->y)
return 1;
return 0;
}
void play(long speed)
{
int key;
for(putapple();;)
{
if(kbhit()!=0)
{
key=bioskey(0);
switch (key)
{
case KEY_UP:
if(greedy.direct!=3)
greedy.direct=1;
break;
case KEY_LEFT:
if(greedy.direct!=4)
greedy.direct=2;
break;
case KEY_DOWN:
if(greedy.direct!=1)
greedy.direct=3;
break;
case KEY_RIGHT:
if(greedy.direct!=2)
greedy.direct=4;
}
if(key==KEY_SPACE)
while(getch()!=' ');
}
moveandeat();
if(check()==1)
break;
delay(speed);
}
}
main()
{
int gdrive=DETECT,mode,speed;
char *str=NULL;
clrscr();
gotoxy(30,10);
printf("Input level(1-10):");
scanf("%d",&speed);
registerbgidriver(EGAVGA_driver);
initgraph(&gdrive,&mode,"d://tc");
init();
while(getch()!=' ');
play(speed*2000);
setcolor(15);
outtext("GAME OVER! SCORE:");
outtext(itoa(greedy.length-5,str,10));
while(getch()!=' ');
delsnake();
closegraph();
}
- 贪吃蛇C实现
- 贪吃蛇----C语言实现
- C语言实现贪吃蛇
- [C++]C++实现贪吃蛇
- 贪吃蛇游戏(c实现)
- C + SDL 贪吃蛇的基础实现
- 【LB】C语言实现贪吃蛇
- 30行C代码实现贪吃蛇
- c语言实现,图形化贪吃蛇
- 贪吃蛇游戏的C语言实现
- c语言实现贪吃蛇小游戏
- C语言之实现贪吃蛇
- 贪吃蛇C语言实现(简易版)
- C语言用数组实现贪吃蛇
- C语言 贪吃蛇实现(不闪屏)
- 用C语言实现贪吃蛇
- 贪吃蛇——C语言实现
- C语言-贪吃蛇具体实现
- No.1 Blog 建立
- Autodesk官方最新的.NET教程(一)(C#版)
- 操作Excel中的问题
- Autodesk官方最新的.NET教程(四)(C#版)
- 用C#实现生成PDF文档(原码)
- 贪吃蛇C实现
- datagrid的连接问题求代码 在线等
- 为什么有人现在知识更新的速度不快?
- 实习见闻(七)
- 请各位朋友赐教!!!!!
- 将GEF图形另存为图像文件(转)
- Jdom
- 有用的国外开源项目网址
- Velocity用户手册