




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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
提交評論