贪吃蛇C语言知识学习.docx

上传人:b****6 文档编号:13086208 上传时间:2023-06-10 格式:DOCX 页数:12 大小:16.73KB
下载 相关 举报
贪吃蛇C语言知识学习.docx_第1页
第1页 / 共12页
贪吃蛇C语言知识学习.docx_第2页
第2页 / 共12页
贪吃蛇C语言知识学习.docx_第3页
第3页 / 共12页
贪吃蛇C语言知识学习.docx_第4页
第4页 / 共12页
贪吃蛇C语言知识学习.docx_第5页
第5页 / 共12页
贪吃蛇C语言知识学习.docx_第6页
第6页 / 共12页
贪吃蛇C语言知识学习.docx_第7页
第7页 / 共12页
贪吃蛇C语言知识学习.docx_第8页
第8页 / 共12页
贪吃蛇C语言知识学习.docx_第9页
第9页 / 共12页
贪吃蛇C语言知识学习.docx_第10页
第10页 / 共12页
贪吃蛇C语言知识学习.docx_第11页
第11页 / 共12页
贪吃蛇C语言知识学习.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪吃蛇C语言知识学习.docx

《贪吃蛇C语言知识学习.docx》由会员分享,可在线阅读,更多相关《贪吃蛇C语言知识学习.docx(12页珍藏版)》请在冰点文库上搜索。

贪吃蛇C语言知识学习.docx

贪吃蛇C语言知识学习

#include

#include

#include

#include

#include

//蛇头移动方向

#defineUP1

#defineDOWN2

#defineLEFT3

#defineRIGHT4

//死亡判定(怼墙或怼自己)

#defineKISSASS1

#defineKISSWALL2

//坐标转化

#definePOINT(x,y)((y)*80+(x)+1)//将(x,y)坐标转化为一个int类数值

#defineGETX(x)(((x)-1)%80)//将int类数值提取出原先的x

#defineGETY(y)(((y)-1)/80)//同理,提取出y

HANDLEConsole;

voidPosition(intx,inty);//移动光标到(x,y)//Windows.h

voidDrawMap();//画墙

voidShowText(char*text);//根据字符串的长短智能打印出包围字符串的笑脸

voidResetSnake();//初始化贪吃蛇

intRefreshSnake();//更新蛇的移动

voidCreatFood();//生成食物

voidDraw();//画出蛇身和食物

voidRefreshScreen();//屏幕刷新

voidGameOver(intType);//游戏结束条件

intGaming();//代码跑起来

charplay=0;////值为1则继续游戏,值为0游戏退出

charpause=0;//值为1则暂停,值为0游戏继续

chardirection;//蛇头方向

intsnake[500];//snake[0]为蛇头

intbody;//蛇身体长度

intnewbody;//吃完食物新长的蛇身

intaddHead,deleteTail;//增加蛇头擦去蛇尾,使贪吃蛇动起来

intfood=0;//食物

voidmain()

{

CONSOLE_CURSOR_INFOCurrInfo={sizeof(CONSOLE_CURSOR_INFO),0};

Console=GetStdHandle(STD_OUTPUT_HANDLE);

DrawMap();

ShowText("Copyrightreserveby张博元");

while(Gaming())

{

if(play)

DrawMap();

};

return0;

}

voidPosition(intx,inty)//移动光标到(x,y)//Windows.h

{

COORDcoors={x,y};

SetConsoleCursorPosition(Console,coors);

}

voidDrawMap()//画墙

{

inti;

for(i=3;i<70;i=i+12)

{

Position(i,0);

printf("===我是墙===");

}

for(i=0;i<25;i=i+1)

{

Position(0,i);

printf("||");

}

for(i=3;i<70;i=i+12)

{

Position(i,24);

printf("============");

}

for(i=0;i<25;i=i+1)

{

Position(76,i);

printf("||");

}

}

voidShowText(char*text)//根据字符串的长短智能打印出包围字符串的笑脸

{

inti;

intstrLength=strlen(text);//得到字符串长度

Position(40-(strLength/2)-1,11);

printf("%c",1);

for(i=0;i

{

printf("%c",1);

}

printf("%c",1);

Position(40-(strLength/2)-1,12);

printf("%c",1);

printf(text);

printf("%c",1);

Position(40-(strLength/2)-1,13);

printf("%c",1);

for(i=0;i

{

printf("%c",1);

}

printf("%c",1);

}

voidResetSnake()//初始化贪吃蛇

{

intx,y;

for(x=39,y=0;y<2;y++)

{

snake[y]=POINT(x,7-y);

}

body=2;//设定蛇身初始长度为2

newbody=6;

addHead=0;

deleteTail=0;

direction=LEFT;

}

intRefreshSnake()//更新蛇的移动//返回值为1游戏结束

{

intx,y;

memcpy(snake+1,snake,sizeof(int)*body);

if(!

newbody)

{

deleteTail=snake[body];

snake[body]=0;

}

else

{

body++;

newbody--;

}

x=GETX(snake[0]);

y=GETY(snake[0]);

switch(direction)//控制蛇头移动方向

{

caseUP:

y-=1;//蛇头向上移动一格(对应坐标y-1)

snake[0]=POINT(x,y);

break;

caseDOWN:

y+=1;

snake[0]=POINT(x,y);

break;

caseLEFT:

x-=1;

snake[0]=POINT(x,y);

break;

caseRIGHT:

x+=1;

snake[0]=POINT(x,y);

break;

}

addHead=snake[0];

if(x>75||x<3||y>23||y<1)//检测是否撞墙

{

GameOver(KISSWALL);

return1;

}

inti;

for(i=1;i

if(snake[0]==snake[i])//检测是否撞到自己身体

{

GameOver(KISSASS);

return1;

}

if(snake[0]==food)

{

while

(1)//食物的位置不与蛇身重合

{

food=(rand()%(75*23));

for(i=0;snake[i];i++)

if(food==snake[i])//检测是否吃到食物,吃到则reset食物

food=0;

if(food)//如果food==0则重新建立一个食物坐标

break;

}

CreatFood();//吃了?

再来一个!

newbody=(rand()%6)+1;//吃完食物蛇身增长一节

}

return0;

}

voidCreatFood()//生成食物

{

if(GETX(food)>75||GETX(food)<3||GETY(food)>23||GETY(food)<1)

CreatFood;

else

Position(GETX(food),GETY(food));

printf("%c",4);

}

voidDraw()//画出蛇身和食物

{

system("cls");

inti;

for(i=0;snake[i];i++)

{

Position(GETX(snake[i]),GETY(snake[i]));

printf("%c",1);

}

CreatFood();

}

voidRefreshScreen()//屏幕刷新

{

if(deleteTail)

{

Position(GETX(deleteTail),GETY(deleteTail));

printf("");

}

if(addHead)

{

Position(GETX(addHead),GETY(addHead));

printf("%c",1);

}

addHead=deleteTail=0;

}

voidGameOver(intType)//游戏结束条件

{

switch(Type)

{

caseKISSASS:

//撞到自己身体

ShowText("NOOB!

当你以光速绕着一棵树奔跑就会发现自己在怼自己!

");

break;

caseKISSWALL:

//撞墙

ShowText("NOOB!

你有考虑过墙的感受吗→→");

}

food=0;

play=0;

memset(snake,0,sizeof(int)*500);//内存初始化

}

intGaming()//执行

{

intKeyboardInput;

Sleep(60);//速度

if(kbhit())

{

KeyboardInput=getch();

if(KeyboardInput==0||KeyboardInput==0xE0)

{

KeyboardInput=getch();

switch(KeyboardInput)//方向控制

{

case72:

if(direction!

=DOWN)

direction=UP;

break;

case80:

if(direction!

=UP)

direction=DOWN;

break;

case75:

if(direction!

=RIGHT)

direction=LEFT;

break;

case77:

if(direction!

=LEFT)

direction=RIGHT;

break;

}

}

if(KeyboardInput=='\r')//暂停

{

if(!

play)

{

play=1;

if(pause)

{

Draw();

pause=0;

}

}

else

{

ShowText("不许暂停,继续怼!

");

play=0;

pause=1;

}

}

elseif(KeyboardInput==0x1B)//退出

return0;

}

if(play)

{

if(!

food)

{

srand(clock());

food=(rand()%(75*23));

ResetSnake();

Draw();

}

else

{

if(!

RefreshSnake())

{

RefreshScreen();

}

}

}

return1;

}

 

//Allrightsreserveby博元

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2