吃金子游戏

#includegraphics.h

#includestdlib.h

#includedos.h

#includebios.h

#defineLEFT0x4b00

#defineRIGHT0x4d00

#defineDOWN0x5000

#defineUP0x4800

#defineESC0x011b

#defineENTER0x1c0d

/*0-豆子,1-空地,2-墙壁,3-玩家,4-敌人*/

intbeannum=0;/*这个数字不要人工输入,由Statistics函数完成统计地图信息得到*/

inta[15][20]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,

2,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2,

2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2,

2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2,

2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2,

2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2,

2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2,

2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2,

2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2,

2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2,

2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2,

2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2,

2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2,

2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2,

2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/

/*你这里定义的地图有点问题就是0

的个数没有达到50,所以即使全部吃完系统也不会判赢,为此,我加入了一个全局变量beannum表示地图

里豆子的总数,这个数字由Statistics函数完成统计地图信息得到*/

structplay/*游戏中人物的结构体*/

{

intx;/*x坐标*/

inty;/*y坐标*/

};

structplayyou,them[5];/*定义玩家×1,敌人×5*/

intsum=0;/*统计吃的豆子个数,吃满beannum颗就算胜利*/

intxx[5][2];/*判断敌人移动方向用的数组*/

intlose=0;/*判断是否失败的变量1为失败*/

/*-------------以下为新加入的函数------------*/

longchoose_speed();/*选择游戏速度*/

voidprintsum();/*显示当前吃的豆子数*/

voidStatistics();/*统计地图中豆子数目*/

/*-------------以上为新加入的函数------------*/

voidTimeDelay(unsignedlongmicrosec)/*延时函数传入微秒数*/

{

delay(microsec);

}

drawblackdou(intx,inty)/*吃到豆子的函数*/

{

setcolor(0);/*将豆子消除*/

circle(100+y*20,100+x*20,3);

sum++;/*豆子个数加一*/

printsum();/*显示当前吃的豆子数*/

a[x][y]=1;/*将豆子改为空地*/

}

begain()/*开始函数,画出地图*/

{

inti,j;

sleep(1);

for(i=0;i<15;i++)

for(j=0;j<20;j++)/*在地图上扫描*/

{

if(a[i][j]==2)/*代表墙壁*/

{

setfillstyle(SOLID_FILL,BLUE);

bar(100+j*20-10,100+i*20+10,

100+j*20+10,100+i*20-10);

}

elseif(a[i][j]==3)/*代表玩家*/

{

setcolor(RED);

circle(100+j*20,100+i*20,9);

}

elseif(a[i][j]==4)/*代表敌人*/

{

setcolor(GREEN);

circle(100+j*20,100+i*20,9);

}

elseif(a[i][j]==0)/*代表豆子*/

{

setcolor(YELLOW);

circle(100+j*20,100+i*20,3);

}

}

you.x=5;/*设定玩家开始坐标*/

you.y=9;

them[0].x=2;/*以下设定敌人开始坐标*/

them[0].y=15;

them[1].x=4;

them[1].y=1;

them[2].x=8;

them[2].y=16;

them[3].x=12;

them[3].y=13;

them[4].x=13;

them[4].y=7;

}

voidmovethem(structplay*them)/*敌人判断和移动的过程*/

{

inti,loop;

randomize();

for(i=0;i<5;i++)/*循环判断五个敌人,

只要玩家在附近就靠上去*/

{

if(them[i].x==you.x&&(them[i].y+1)==you.y)

them[i].y++;

elseif(them[i].x==you.x&&(them[i].y-1)==you.y)

them[i].y--;

elseif(them[i].y==you.y&&(them[i].x+1)==you.x)

them[i].x++;

elseif(them[i].y==you.y&&(them[i].x-1)==you.x)

them[i].x--;

else

{

loop:

xx[i][0]=rand()%4+1;/*这里的方向采取随机赋值,

原则是新的方向不可以和

原来的方向相反*/

if(xx[i][0]==1&&xx[i][1]==2||

xx[i][0]==2&&xx[i][1]==1)

gotoloop;

if(xx[i][0]==3&&xx[i][1]==4||

xx[i][0]==4&&xx[i][1]==3)

gotoloop;

xx[i][1]=xx[i][0];

if(xx[i][0]==1)/*1,2,3,4四种可能*/

{

them[i].x--;

if(a[them[i].x][them[i].y]==2)/*如果碰墙壁的话

就回到原来的地方

等待随机的方向(下同)*/

{

them[i].x++;

gotoloop;

}

}

elseif(xx[i][0]==2)

{

them[i].x++;

if(a[them[i].x][them[i].y]==2)

{

them[i].x--;

gotoloop;

}

}

elseif(xx[i][0]==3)

{

them[i].y++;

if(a[them[i].x][them[i].y]==2)

{

them[i].y--;

gotoloop;

}

}

elseif(xx[i][0]==4)

{

them[i].y--;

if(a[them[i].x][them[i].y]==2)

{

them[i].y++;

gotoloop;

}

}

}

}

}

fun(structplay*them)/*敌人的移动*/

{

inti;

setcolor(0);/*把敌人的老位置删除*/

for(i=0;i<5;i++)

circle(them[i].y*20+100,them[i].x*20+100,9);

movethem(them);/*判断玩家位置,并向其移动*/

}

win()/*玩家胜利*/

{

cleardevice();

settextstyle(0,0,4);

while(!kbhit())

{

setcolor(rand()%13+1);

outtextxy(200,200,YOUWIN!);

delay(1000);

}

getch();/*加上它对程序界面可见性有帮助*/

}

false1()/*玩家失败*/

{

cleardevice();

settextstyle(0,0,4);

while(!kbhit())

{

setcolor(rand()%13+1);

outtextxy(180,200,GAMEOVER!);

delay(1000);

}

getch();/*加上它对程序界面可见性有帮助*/

}

loseyes()/*判断是否失败*/

{

inti;

for(i=0;i<5;i++)/*循环判断五个敌人,

如果抓住玩家则玩家失败*/

if(them[i].x==you.x&&them[i].y==you.y)

lose=1;

}

main()

{

intgd=DETECT,gm;

intkey,i;

longtime;

initgraph(&gd,&gm,c:\\tc);

cleardevice();

Statistics();/*统计地图中豆子数目*/

time=choose_speed();/*选择速度*/

cleardevice();/*清除屏幕*/

begain();/*开始画面*/

while(1)

{

while(!kbhit())

{

setcolor(GREEN);/*重画敌人*/

for(i=0;i<5;i++)

circle(them[i].y*20+100,them[i].x*20+100,9);

TimeDelay(time);

fun(them);/*处理敌人*/

for(i=0;i<5;i++)

if(them[i].x==you.x&&them[i].y==you.y)

lose=1;/*失败*/

loseyes();/*判断是否失败*/

if(lose)

break;

}

if(lose)

break;

key=bioskey(0);

setcolor(0);/*把玩家原来位置的消除*/

circle(100+you.y*20,100+you.x*20,9);

if(key==ESC)/*退出*/

break;

elseif(key==UP)/*这里开始的判断主要是

是否吃到豆子和碰到墙壁

遇到墙则退回原位*/

{

you.x--;

if(a[you.x][you.y]==2)

you.x++;

elseif(a[you.x][you.y]==0)

drawblackdou(you.x,you.y);

}

elseif(key==DOWN)

{

you.x++;

if(a[you.x][you.y]==2)

you.x--;

elseif(a[you.x][you.y]==0)

drawblackdou(you.x,you.y);

}

elseif(key==RIGHT)

{

you.y++;

if(a[you.x][you.y]==2)

you.y--;

elseif(a[you.x][you.y]==0)

drawblackdou(you.x,you.y);

}

elseif(key==LEFT)

{

you.y--;

if(a[you.x][you.y]==2)

you.y++;

elseif(a[you.x][you.y]==0)

drawblackdou(you.x,you.y);

}

if(sum==beannum)/*吃够豆子退出,胜利*/

break;

setcolor(RED);/*执行了一次键盘后再画出自己的位置*/

circle(100+you.y*20,100+you.x*20,9);

loseyes();/*玩家移动后碰到敌人的可能*/

if(lose)

break;

}

if(sum==beannum)/*吃满豆子了*/

{

win();

getch();

}

if(lose)

{

false1();

getch();

}

closegraph();

}

/*---------新增加的函数-------------------*/

longchoose_speed()/*选择游戏速度*/

{

longi;

do

{

gotoxy(20,15);

printf();

gotoxy(20,15);

printf(INPUTTHESPEED(1-3):);

scanf(%ld,&i);

}while(i3);/*1-3级*/

return(4-i)*1000000;

}

voidprintsum()/*显示当前吃的豆子数*/

{/*itoa

【功能】将一个整数转换为字符串。

【原型】char*itoa(intvalue,char*string,intradix)

【位置】stdlib.h

【说明】返回一个指针,指向目的字符串。

*/

inti;

charc[10];

itoa(sum,c,10);

bar(493,100,635,180);

setcolor(11);

outtextxy(500,120,>>EATBEANGAME<<);

outtextxy(500,140,EATBEANSNUMBER:);

outtextxy(550,160,c);

}

voidStatistics()/*统计地图中豆子数目*/

{

inti,j;

for(i=0;i<15;i++)

for(j=0;j<20;j++)

if(a[i][j]==0)

beannum++;

}

免责声明:本站发布的游戏攻略(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!