C语言基于EasyX实现贪吃蛇_第1页
C语言基于EasyX实现贪吃蛇_第2页
C语言基于EasyX实现贪吃蛇_第3页
C语言基于EasyX实现贪吃蛇_第4页
C语言基于EasyX实现贪吃蛇_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C语言基于EasyX实现贪吃蛇setlinecolor(BLACK);//矩形边框线的颜色

setfillcolor(RGB(rand()%255,rand()%255,rand()%255));//内部填充颜色

fillrectangle(snake-xy[i].x,snake-xy[i].y,snake-xy[i].x+10,snake-xy[i].y+10);

}

voidmoveSnake(structSnake*snake)

//除了第一节之外,后面每一节都是前面一节的坐标

for(inti=snake-ii--)

{

snake-xy[i].x=snake-xy[i-1].x;

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

}

//第一节的处理

switch(snake-postion)

{

caseright:

snake-xy[0].x+=10;

break;

caseleft:

snake-xy[0].x-=10;

break;

casedown:

snake-xy[0].y+=10;

break;

caseup:

snake-xy[0].y-=10;

default:

break;

}

voidkeyDown(structSnake*snake)

charuserkey=0;

userkey=_getch();

switch(userkey)

{

caseright:

if(snake-postion!=left)

snake-postion=right;

break;

caseleft:

if(snake-postion!=right)

snake-postion=left;

break;

casedown:

if(snake-postion!=up)

snake-postion=down;

break;

caseup:

if(snake-postion!=down)

snake-postion=up;

break;

}

voidinitFood(structFood*food,structSnake*snake)

food-fdxy.x=rand()%64*10;

food-fdxy.y=rand()%48*10;

food-flag=1;

//如果食物出现在蛇身上,重新产生坐标

for(inti=0;isnake-i++)

{

if(food-fdxy.x==snake-xy[i].xfood-fdxy.y==snake-xy[i].y)

{

food-fdxy.x=rand()%64*10;

food-fdxy.y=rand()%48*10;

}

}

voiddrawFood(structFood*food)

setlinecolor(BLACK);//矩形边框线的颜色

setfillcolor(RGB(rand()%255,rand()%255,rand()%255));

fillrectangle(food-fdxy.x,food-fdxy.y,food-fdxy.x+10,food-fdxy.y+10);

voideatFood(structFood*food,structSnake*snake)

//蛇边长

//食物重新生成

//分数增加

if(snake-xy[0].x==food-fdxy.xsnake-xy[0].y==food-fdxy.y)

{

snake-num++;

food-eatgrade+=10;

food-flag=0;

}

//蛇死亡,游戏结束

intsnakeDie(structSnake*snake)

if(snake-xy[0].x640||snake-xy[0].x0||snake-xy[0].y480||snake-xy[0].y0||(snake-xy[0].x+10)640||(snake-xy[0].x+10)0||(snake-xy[0].y+10)480||(snake-xy[0].y+10)0)

{

outtextxy(200,200,"撞墙");

//MessageBox(hwnd,"游戏结束,点击确定重新开始","撞墙",MB_OKCANCEL);

return1;//返回1,游戏结束

}

for(inti=1;isnake-i++)

{

if(snake-xy[0].x==snake-xy[i].xsnake-xy[0].y==snake-xy[i].y)

{

outtextxy(200,200,"自杀");

//MessageBox(hwnd,"游戏结束,点击确定重新开始","自杀",MB_OKCANCEL);

return1;

}

}

return0;

intwinGame(structSnake*snake)

if(snake-num==length)

{

outtextxy(200,200,"胜利,恭喜通关");

//MessageBox(hwnd,"游戏结束,点击确定重新开始","恭喜通关",MB_OKCANCEL);

return1;//返回1,游戏结束

}

else

{

return0;

}

voidshowGrade(structFood*food)

chargrade[100]="";

sprintf(grade,"%d",food-eatgrade);

setbkmode(TRANSPARENT);

settextcolor(LIGHTBLUE);

outtextxy(560,20,"分数");

outtextxy(610,20,grade);

voidpauseMoment()

if(_getch()==32)

{

while(_getch()!=32);

}

}

test.cpp

#include"game.h"

intmain()

mciSendString(L"open1.mp3aliasbkmusic",NULL,0,NULL);//打开音乐文件

mciSendString(L"playbkmusicrepeat",NULL,0,NULL);

//循环播放音乐

srand((unsignedint)time(NULL));//随机数种子

structSnakesnake;//创建蛇

structFoodfood;//创建食物

hwnd=initgraph(640,480);//初始化窗口

setbkcolor(WHITE);//设置窗口为白色

intkey=0;//接收最终的弹窗指令,判断是否继续游戏

do

{

initSnakeFood(snake,food);//初始化蛇和食物的分数

key=0;

while(1)

{

BeginBatchDraw();缓冲区打印,防止闪屏

cleardevice();//刷新

if(food.flag==0)

{

initFood(food,snake);

}

drawFood(food);//画食物

eatFood(food,snake);//是否吃食物

showGrade(food);//打印食物

drawSnake(snake);//画蛇

EndBatchDraw();//缓冲区打印

if(snakeDie(snake))//判断是否四方

{

break;

}

if(winGame(snake))//判断是否胜利

{

break;

}

while(_kbhit())//如果有按键则进入,否则不进入循环

{

pauseMoment();//暂停

keyDown(snake);

}

moveSnake(snake);//移动蛇

Sleep(100);

}

key=MessageBox(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论