當前位置:編程學習大全網 - 編程語言 - 求在VC++6.0中運行的貪吃蛇代碼

求在VC++6.0中運行的貪吃蛇代碼

#包括< stdio, h >

#包括< process。H >

#包括< Windows。H >

#包括< conio。H >

#包括<時間。H >

#包括< stdlib。H >

#defineWIDTH40

#defineHEIGH12

枚舉方向{//方向

離開了,

對的,

向上

};

StructFood{//食品

Intx;

Inty;

};

{//繪制蛇體

intx;

inty;

structNode*next;

};

structSnake{//蛇屬性du

intlenth;//長度

enumdirectiondir;//方向

};

structFood*food;//食物

structSnake*snake;//蛇屬性

structNode*snode,*tail;//蛇身

intSPEECH=200;

intscore=0;//分數

intsmark=0;//吃食物標zhi記

inttimes=0;

intSTOP=0;

voidInitfood();//產生食物

voidInitsnake();//構造snake

voidEatfood();//頭部前進

voidAddnode(intx,inty);//增加蛇身

voiddisplay(structNode*shead);//顯示蛇身坐dao標

voidmove();//蛇移動

voiddraw();//畫蛇

voidHomepage();//主頁

voidkeybordhit();//監控鍵盤按鍵

voidAddtail();//吃到食物

voidgotoxy(intx,inty)//定位光標

COORDpos;

pos.X=x-1;

pos.Y=y-1;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

voidInitsnake()//構造snake

inti;

snake=(structSnake*)malloc(sizeof(structSnake));

tail=(structNode*)malloc(sizeof(structNode));

food=(structFood*)malloc(sizeof(structFood));

snake->lenth=5;//初始長度 5

snake->dir=RIGHT;//初始蛇頭方向 右

for(i=2;i<=snake->lenth+2;i++)//增加 5 個結點

Addnode(i,2);

voidInitfood()//產生食物

structNode*p=snode;

intmark=1;

srand((unsigned)time(NULL));//以時間為種子產生隨機數

while(1)

food->x=rand()%(WIDTH-2)+2;//食物X坐標

food->y=rand()%(HEIGH-2)+2;//食物Y坐標

while(p!=NULL)

if((food->x==p->x)&&(food->y==p->y))//如果食物產生在蛇身上

{//則重新生成食物

mark=0;//食物生成無效

break;

p=p->next;

if(mark==1)//如果食物不在蛇身上,生成食物,否則重新生成食物

gotoxy(food->x,food->y);

printf("%c",3);

break;

mark=1;

p=snode;

voidmove()//移動

structNode*q,*p=snode;

if(snake->dir==RIGHT)

Addnode(p->x+1,p->y);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==LEFT)

Addnode(p->x-1,p->y);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==UP)

Addnode(p->x,p->y-1);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==DOWN)

Addnode(p->x,p->y+1);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

voidAddnode(intx,inty)//增加蛇身

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

newnode->next=snode;

newnode->x=x;

newnode->y=y;

snode=newnode;//結點加到蛇頭

if(x<2||x>=WIDTH||y<2||y>=HEIGH)//碰到邊界

STOP=1;

gotoxy(10,19);

printf("撞墻,遊戲結束,任意鍵退出!\n");//失敗

_getch();

free(snode);//釋放內存

free(snake);

exit(0);

while(p!=NULL)//碰到自身

if(p->next!=NULL)

if((p->x==x)&&(p->y==y))

STOP=1;

gotoxy(10,19);

printf("撞到自身,遊戲結束,任意鍵退出!\n");//失敗

_getch();

free(snode);//釋放內存

free(snake);

exit(0);

p=p->next;

voidEatfood()//吃到食物

Addtail();

score++;

voidAddtail()//增加蛇尾

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

tail->next=newnode;

newnode->x=50;

newnode->y=20;

newnode->next=NULL;//結點加到蛇頭

tail=newnode;//新的蛇尾

voiddraw()//畫蛇

structNode*p=snode;

inti,j;

while(p!=NULL)

gotoxy(p->x,p->y);

printf("%c",2);

tail=p;

p=p->next;

if(snode->x==food->x&&snode->y==food->y)//蛇頭坐標等於食物坐標

smark=1;

Eatfood();//增加結點

Initfood();//產生食物

if(smark==0)

gotoxy(tail->x,tail->y);//沒吃到食物清除之前的尾結點

printf("%c",'');//如果吃到食物,不清楚尾結點

else

times=1;

if((smark==1)&&(times==1))

gotoxy(tail->x,tail->y);//沒吃到食物清除之前的尾結點

printf("%c",'');//如果吃到食物,不清楚尾結點

smark=0;

gotoxy(50,12);

printf("食物: %d,%d",food->x,food->y);

gotoxy(50,5);

printf("分數:%d",score);

gotoxy(50,7);

printf("速度:%d",SPEECH);

gotoxy(15,14);

printf("按o鍵加速");

gotoxy(15,15);

printf("按p鍵減速");

gotoxy(15,16);

printf("按空格鍵暫停");

voidHideCursor()//隱藏光標

CONSOLE_CURSOR_INFOcursor_info={1,0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

voidHomepage()//繪主頁

intx,y;

HideCursor();//隱藏光標

printf("----------------------------------------\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("----------------------------------------\n");

gotoxy(5,13);

printf("任意鍵開始遊戲!按W.A.S.D控制方向");

_getch();

Initsnake();

Initfood();

gotoxy(5,13);

printf("");

voidkeybordhit()//監控鍵盤

charch;

if(_kbhit())

ch=getch();

switch(ch)

case'W':

case 'w':if(snake->dir==DOWN)//如果本來方向是下,而按相反方向無效

break;

else

snake->dir=UP;break;

case'A':

case 'a':if(snake->dir==RIGHT)//如果本來方向是右,而按相反方向無效

break;

else

snake->dir=LEFT;break;

case'S':

case 's':if(snake->dir==UP)//如果本來方向是上,而按相反方向無效

break;

else

snake->dir=DOWN;break;

case'D':

case 'd':if(snake->dir==LEFT)//如果本來方向是左,而按相反方向無效

break;

else

snake->dir=RIGHT;break;

case'O':

case'o':

if(SPEECH>=150)//速度加快

SPEECH=SPEECH-50;

break;

case'P':

case'p':

if(SPEECH<=400)//速度減慢

SPEECH=SPEECH+50;

break;

case''://暫停

gotoxy(15,18);

printf("遊戲已暫停,按任意鍵恢復遊戲");

system("pause>nul");

gotoxy(15,18);

printf("");

break;

default:break;

intmain(void)//程序入口

Homepage();

while(!STOP)

keybordhit();//監控鍵盤按鍵

move();//蛇的坐標變化

draw();//蛇的重繪

Sleep(SPEECH);//暫時掛起線程

return0;

擴展資料:

註意事項:

1.代碼將源信息轉換為易於通信或存儲的符號。譯碼(譯碼)是還原和譯碼的過程,它將代碼符號轉換為接受者能夠理解的形式。

2.編碼的原因之壹是為了在普通語言(口頭或書面)難以實現的情況下進行交流。例如,壹面旗幟可以用壹個特定的標記來表達壹個特定的信息,而站在遠處的另壹個人可以解釋標記來重現該信息。

  • 上一篇:Cc高級編程24種控件
  • 下一篇:五星級酒店智能化系統工程設計要點?
  • copyright 2024編程學習大全網