C语言控制台版贪吃蛇文档格式.docx

上传人:b****5 文档编号:17281443 上传时间:2022-11-30 格式:DOCX 页数:19 大小:18.64KB
下载 相关 举报
C语言控制台版贪吃蛇文档格式.docx_第1页
第1页 / 共19页
C语言控制台版贪吃蛇文档格式.docx_第2页
第2页 / 共19页
C语言控制台版贪吃蛇文档格式.docx_第3页
第3页 / 共19页
C语言控制台版贪吃蛇文档格式.docx_第4页
第4页 / 共19页
C语言控制台版贪吃蛇文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言控制台版贪吃蛇文档格式.docx

《C语言控制台版贪吃蛇文档格式.docx》由会员分享,可在线阅读,更多相关《C语言控制台版贪吃蛇文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

C语言控制台版贪吃蛇文档格式.docx

#defineJ_RIGHT0xE04D

#defineJ_UP0xE048

#defineJ_DOWN0xE050

#defineJ_PGUP0xE049

#defineJ_DELETE0xE053

#defineJ_END0xE04F

#defineJ_PGDW0xE051

#defineS_TIME230

#defineCALTIME(x)(S_TIME-(x)*22)

/*---------------------------------------------------------------------------*/

/*LOCALFUNCTIONDECLARE*/

voidShowBye(void);

voidShowPause(void);

voidprint_explian(void);

voidgotoxy(intx,inty);

voiddraw_map(Psnake*head);

voiddraw_snake(Psnake*head);

voidEmptySnake(Psnake*head);

voiddraw_food(Coordinate*food);

voidHasKey(Dir*direction,int*pause);

voidIniHead(Psnake*head,Psnake*tail);

voidIniCoord(Psnake*head,intx,inty);

voidIniSnake(Psnake*head,Psnake*tail,intn);

voidDelTail(Psnake*head,Psnake*tail,intx,inty);

intMenu();

intSetDifficulty(int*diff);

intjkGetKey(void);

intsetCursorVisible(intb);

intIniFood(Psnake*head,Coordinate*food);

intInSnake(Psnake*head,intx,inty);

intMoveSnake(Psnake*head,Psnake*tail,Dir*direction,Coordinate*food,int*leng);

intIsOver(Psnake*head,intx,inty);

intHitSelf(Psnake*head,intx,inty);

intShowOver(int*score);

函数接口实现

#include<

stdio.h>

stdlib.h>

windows.h>

conio.h>

assert.h>

time.h>

#include"

snake.h"

//直接移动光标到X,Y坐标上。

windowsapi实现

voidgotoxy(intx,inty)

COORDpos;

pos.X=x;

pos.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

//获取按键信息

intjkGetKey(void)

intrk=0;

intk=getch();

if(k==J_FUNC_KEY)

{

k=getch();

rk=0xFF00|k;

returnrk;

}

if(k==J_CTRL_KEY)

rk=0xE000|k;

rk=0x0000|k;

//绘制地图

voiddraw_map(Psnake*head)

inti;

system("

cls"

);

for(i=min_x;

i<

max_x;

i++)

gotoxy(i,min_y);

printf("

*"

gotoxy(i,max_y);

for(i=min_y;

max_y;

i++)

gotoxy(min_x,i);

gotoxy(max_x-1,i);

print_explian();

draw_snake(head);

//绘制蛇

voiddraw_snake(Psnake*head)

Snake*pnode=*head;

while(pnode!

=NULL)

gotoxy(pnode->

coord.x,pnode->

coord.y);

#"

pnode=pnode->

next;

//绘制食物

voiddraw_food(Coordinate*food)

gotoxy(food->

x,food->

y);

printf("

%c"

3);

intMenu()//这里是菜单选择的界面

intchoose=1,ischoose=1;

intdiff=1,i;

//displaymenuinterface

system("

//clearscreen首先清屏

printf("

************************************************\n"

Startgame.\n"

ChooseDifficulty.\n"

Quit.\n"

\nWarning:

PleaseselectEnglishinputmethod."

\n\n"

do{

for(i=1;

i<

=3;

i++){

gotoxy(2,i);

//光标移到(2,i)处

if(i==choose)

printf("

16);

//这里显示的是选择的三角

else

"

}

//getkeydown

switch(jkGetKey()){

//获取键盘按键,方向键只能通过扫描码获取

caseJ_UP:

if(choose>

1)

choose--;

break;

caseJ_DOWN:

if(choose<

3)

choose++;

caseJ_ENTER:

ischoose=0;

default:

;

}while(ischoose);

switch(choose){

case2:

SetDifficulty(&

diff);

//选择难度的界面

case1:

returndiff;

case3:

returnQUIT;

return0;

intSetDifficulty(int*diff)//显示选择难度的界面

assert(NULL!

=diff);

//toshowsetdifficultylevelinterface

gotoxy(0,max_y/2-9);

%c\n\n"

30);

//显示正三角

%c\n"

31);

//显示倒三角

\nPleasepressUPorDOWNtochoosedifficultylevel."

while

(1)

gotoxy(0,max_y/2-8);

printf("

Difficultylevel:

%d"

*diff);

//获取按键信息并选择难度

if(*diff>

1)

(*diff)--;

if(*diff<

9)

(*diff)++;

return0;

//初始化蛇

voidIniSnake(Psnake*head,Psnake*tail,intn)

inti=0;

assert(head!

=NULL);

++i;

for(;

n;

Snake*newsnake;

newsnake=(Snake*)malloc(sizeof(Snake));

if(newsnake==NULL)

{

fprintf(stderr,"

memoryerror!

"

exit

(1);

newsnake->

next=NULL;

pnode->

next=newsnake;

pnode=newsnake;

*tail=pnode;

//初始化坐标地址

voidIniCoord(Psnake*head,intx,inty)

coord.x=x--;

coord.y=y;

//初始化食物

intIniFood(Psnake*head,Coordinate*food)

srand((unsigned)time(NULL));

food->

x=rand()%(max_x-2)+1;

y=rand()%(max_y-2)+1;

}while(InSnake(head,food->

y));

returnTRUE;

//判断食物是否生成在蛇身体上

intInSnake(Psnake*head,intx,inty)

if(pnode->

coord.x==x&

&

pnode->

coord.y==y)

returnTRUE;

returnFALSE;

//移动蛇

intMoveSnake(Psnake*head,Psnake*tail,Dir*direction,Coordinate*food,int*leng)

Snake*pnode=*head;

intx=pnode->

coord.x;

inty=pnode->

coord.y;

intbeing_food=TRUE;

switch(*direction){

caseU:

y--;

caseD:

y++;

caseL:

x--;

caseR:

x++;

default:

if(food->

x==x&

food->

y==y)//判断是否是食物

newsnake=(Snake*)malloc(sizeof(Snake));

assert(newsnake!

next=*head;

coord.x=x;

*head=newsnake;

being_food=FALSE;

(*leng)++;

if(IsOver(head,x,y))//判断是否死亡

returnOVER;

if(being_food)

DelTail(head,tail,x,y);

//未吃到食物时

returnbeing_food;

//跟新尾部坐标擦除尾部,移到下一坐标造成视觉移动

voidDelTail(Psnake*head,Psnake*tail,intx,inty)

gotoxy((*tail)->

coord.x,(*tail)->

while(pnode->

next!

=*tail)

(*tail)->

*head=*tail;

*tail=pnode;

//判断游戏结束

intIsOver(Psnake*head,intx,inty)

if(x==min_x||x==max_x||y==min_y

||y==max_y||HitSelf(head,x,y)==1)

returnTRUE;

//判断是否吃到自己,返回结果

intHitSelf(Psnake*head,intx,inty)

Snake*pnode=(*head)->

//打印说明

voidprint_explian(void)//说明

gotoxy(61,5);

Level:

gotoxy(61,8);

Score:

gotoxy(61,15);

欢迎来到贪吃蛇游戏!

gotoxy(61,16);

按空格键暂停!

gotoxy(61,17);

祝你好运!

//释放内存

voidEmptySnake(Psnake*head)

Snake*psave;

while(*head)

psave=(*head)->

free(*head);

*head=psave;

voidShowPause()//显示暂停的界面

charkey;

gotoxy(0,max_y/2-6);

****************\n"

********\n"

*******************\n"

*******\n"

***************\n"

\n\nPleasepressSPACEtocontinue."

while(key=jkGetKey()){

//只当按下回车键时退出循环返回游戏

if(key==J_SPACE)

break;

//消除光标,直接COPY的

intsetCursorVisible(intb)

HANDLEhd=GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFOccInfo;

GetConsoleCursorInfo(hd,&

ccInfo);

ccInfo.bVisible=!

!

b;

returnSetConsoleCursorInfo(hd,&

//判断是否按键

voidHasKey(Dir*direction,int*pause)

if(kbhit())

switch(jkGetKey())

{

caseJ_UP:

if(*direction!

=D)

*direction=U;

break;

=U)

*direction=D;

caseJ_RIGHT:

if(*direction!

=L)

*direction=R;

caseJ_LEFT:

=R)

*direction=L;

caseJ_SPACE:

*pause=1;

;

}

//初始化head,tail

voidIniHead(Psnake*head,Psnake*tail)

*head=(Snake*)malloc(sizeof(Snake));

assert(*head!

(*head)->

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

assert(*tail!

//显示结果

intShowOver(int*score)

intkey;

gotoxy(16,max_y/2-3);

================================"

gotoxy(16,max_y/2-2);

GAMEOVER"

gotoxy(16,max_y/2-1);

gotoxy(16,max_y/2+1);

YOUGOTSCORE:

%u"

*score);

Sleep(2000);

gotoxy(16,max_y/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1