如何用C语言写贪吃蛇

Python017

如何用C语言写贪吃蛇,第1张

#include<conio.h>#include<graphics.h>#include<time.h>#include<string.h>#include<malloc.h>#include<stdio.h>int grade=5,point=0,life=3void set(),menu(),move_head(),move_body(),move(),init_insect(),left(),upon(),right(),down(),init_graph(),food_f(),ahead(),crate()struct bug { int xint ystruct bug *laststruct bug *next}struct fd { int xint yint judge}food={0,0,0}struct bug *head_f=NULL,*head_l,*p1=NULL,*p2=NULLvoid main() { char chinitgraph(800,600)set()init_insect()while(1) { food_f()Sleep(grade*10)setcolor(BLACK)circle(head_l->x,head_l->y,2)setcolor(WHITE)move_body()if(kbhit()) { ch=getch()if(ch==27) { ahead()set()} else if(ch==-32) { switch(getch()) { case 72:upon()breakcase 80:down()breakcase 75:left()breakcase 77:right()break} } else ahead()} else { ahead()} if(head_f->x==food.x&&head_f->y==food.y) { Sleep(100)crate()food.judge=0point=point+(6-grade)*10if(food.x<30||food.y<30||food.x>570||food.y>570) life++menu()} if(head_f->x<5||head_f->x>595||head_f->y<5||head_f->y>595) { Sleep(1000)life--food.judge=0init_graph()init_insect()menu()} for(p1=head_f->nextp1!=NULLp1=p1->next) { if(head_f->x==p1->x&&head_f->y==p1->y) { Sleep(1000)life--food.judge=0init_graph()init_insect()menu()break} } if(life==0) { outtextxy(280,300,"游戏结束!")getch()return} move()}} void init_graph() { clearviewport()setlinestyle(PS_SOLID,1,5)rectangle(2,2,600,598)setlinestyle(PS_SOLID,1,1)} void set() { init_graph()outtextxy(640,50,"1、开始 / 返回")outtextxy(640,70,"2、退出")outtextxy(640,90,"3、难度")outtextxy(640,110,"4、重新开始")switch(getch()) { case '1': menu()setcolor(GREEN)circle(food.x,food.y,2)setcolor(WHITE)returncase '2': exit(0)breakcase '3': outtextxy(700,90,":1 2 3 4 5")grade=getch()-48set()breakcase '4': food.judge=0,grade=5point=0life=3init_insect()menu()breakdefault: outtextxy(250,300,"输入错误!")set()break} } void menu() { char str[20],str1[]={"分数:"},str2[]={"难度:"},str3[]={"生命值:"}init_graph()sprintf(str,"%d",point)strcat(str1,str)outtextxy(640,50,str1)sprintf(str,"%d",grade)strcat(str2,str)outtextxy(640,70,str2)sprintf(str,"%d",life)strcat(str3,str)outtextxy(640,90,str3)outtextxy(640,110,"设置:ESC")} void init_insect() { head_f=(struct bug *)malloc(sizeof(struct bug))head_f->last=NULLhead_f->x=300head_f->y=300p2=head_f->next=p1=(struct bug *)malloc(sizeof(struct bug))p1->last=head_fp1->x=295p1->y=300p1=p1->next=(struct bug *)malloc(sizeof(struct bug))p1->next=NULLp1->x=290p1->y=300p1->last=p2head_l=p1} void move() { for(p1=head_fp1!=NULLp1=p1->next) { circle(p1->x,p1->y,2)} } void move_head() { } void move_body() { for(p1=head_l,p2=p1->lastp2!=NULLp1=p2,p2=p2->last) { p1->x=p2->xp1->y=p2->y} } void ahead() { p1=head_fp2=p1->nextp2=p2->nextif(p1->x==p2->x) { if(p1->y>p2->y) head_f->y+=5else head_f->y-=5} else { if(p1->x>p2->x) { head_f->x+=5} else head_f->x-=5} } void upon() { p1=head_f->nextp1=p1->nexthead_f->y-=5if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->y+=5ahead()} } void down() { p1=head_f->nextp1=p1->nexthead_f->y+=5if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->y-=5ahead()} } void left() { p1=head_f->nextp1=p1->nexthead_f->x-=5if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->x+=5ahead()} } void right() { p1=head_f->nextp1=p1->nexthead_f->x+=5if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->x-=5ahead()} } void food_f() { if(!food.judge) { food.x=(rand()%117+1)*5food.y=(rand()%117+1)*5food.judge=1if(food.x<30||food.y<30||food.x>570||food.y>570) { setcolor(RED)circle(f

回答:Mr.emily

大师

6月3日 16:45 #define N 200

#include<graphics.h>

#include<stdlib.h>

#include<dos.h>

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define Esc 0x011b

int i,key

int score=0

int gamespeed=50000

struct Food

{int x

int y

int yes

}food

struct Snake

{int x[N]

int y[N]

int node

int direction

int life

}snake

void Init()

void Close()

void DrawK()

void GamePlay()

void GameOver()

void PrScore()

void main()

{ Init()

DrawK()

GamePlay()

Close()

}

void Init()

{int gd=DETECT,gm

initgraph(&gd,&gm,"F:\\tuoboc2")/*此处为turboc的路径,读者可以根据自己的电脑而改*/

cleardevice()

}

void DrawK()

{setbkcolor(LIGHTGREEN)

setcolor(11)

setlinestyle(SOLID_LINE,0,THICK_WIDTH)

for(i=50i<=600i+=10)

{rectangle(i,40,i+10,49)

rectangle(i,451,i+10,460)

}

for(i=40i<=450i+=10)

{rectangle(50,i,59,i+10)

rectangle(601,i,610,i+10)

}

}

void GamePlay()

{randomize()

food.yes=1

snake.life=0

snake.direction=1

snake.x[0]=100snake.y[0]=100

snake.x[1]=110snake.y[1]=100

snake.node=2

PrScore()

while(1)

{while(!kbhit())

{ if(food.yes==1)

{food.x=rand()%400+60

food.y=rand()%350+60

while(food.x%10!=0)

food.x++

while(food.y%10!=0)

food.y++

food.yes=0

}

if(food.yes==0)

{setcolor(GREEN)

rectangle(food.x,food.y,food.x+10,food.y-10)

}

for(i=snake.node-1i>0i--)

{snake.x[i]=snake.x[i-1]

snake.y[i]=snake.y[i-1]

}

switch(snake.direction)

{case 1:

snake.x[0]+=10break

case 2:

snake.x[0]-=10break

case 3:

snake.y[0]-=10break

case 4:

snake.y[0]+=10break

}

for(i=3i<snake.nodei++)

{

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

{ GameOver()

snake.life=1

break

}

}

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)

{GameOver()

snake.life=1

}

if(snake.life==1)

break

if(snake.x[0]==food.x&&snake.y[0]==food.y)

{setcolor(0)

rectangle(food.x,food.y,food.x+10,food.y-10)

snake.x[snake.node]=-20

snake.y[snake.node]=-20

snake.node++

food.yes=1

score+=10

PrScore()

}

setcolor(4)

for(i=0i<snake.nodei++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10)

delay(gamespeed)

setcolor(0)

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10)

}

if(snake.life==1)

break

key=bioskey(0)

if(key==Esc)

break

else if(key==UP&&snake.direction!=4)

snake.direction=3

else if(key==RIGHT&&snake.direction!=2)

snake.direction=1

else if(key==LEFT&&snake.direction!=1)

snake.direction=2

else if(key==DOWN&&snake.direction!=3)

snake.direction=4

}

}

void GameOver()

{

cleardevice()

PrScore()

setcolor(RED)

settextstyle(3,0,4)

outtextxy(100,100,"Mengmeng,i love you!")

getch()

}

void PrScore()

{char str[10]

setfillstyle(SOLID_FILL,YELLOW)

bar(50,15,220,35)

setcolor(6)

settextstyle(0,0,2)

sprintf(str,"score:%d",score)

outtextxy(55,20,str)

}

void Close()

{ getch()

closegraph()

}

Mr.emily