共有回帖数 0 个
-
#include "graphics.h"
#include "stdlib.h"
#include "dos.h"
#include "bios.h"
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define ENTER 0x1c0d
/*2墙壁,1可以移动地方,3自己,4敌人*/
int a[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};/*数组就是地图*/
struct play /*游戏中人物的结构体*/
{
int x;
int y;
};
struct play you,them[5];
int sum=0;/*统计吃的豆子个数,吃满50颗就算胜利*/
int xx[5][2];/*判断敌人方向用的结构体*/
int false=0;
void TimeDelay(unsigned long microsec) /*延时函数 传入微秒数*/
{
union REGS r;
r.h.ah=0x86;
r.x.cx=microsec16;
r.x.dx=microsec;
int86(0x15,&r,&r);
}
drawblackdou(int x,int y)/*吃豆子的函数*/
{
setcolor(0);
circle(100+y*20,100+x*20,3);
sum++;/*吃到豆子后就加一*/
a[x][y]=1;/*吃到后这里就成为普通平地*/
}
begain()/*开始函数*/
{int i,j;
sleep(1);
for(i=0;i15;i++)
for(j=0;j20;j++)
if(a[j]==2)/*代表墙壁*/
{
setfillstyle(SOLID_FILL,BLUE);
bar(100+j*20-10,100+i*20+10,100+j*20+10,100+i*20-10);
}
else if(a[j]==3)/*代表自己*/
{
setcolor(RED);
circle(100+j*20,100+i*20,9);
}
else if(a[j]==4)/*代表敌人*/
{
setcolor(GREEN);
circle(100+j*20,100+i*20,9);
}
else if(a[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;
}
void movethem(struct play *them)/*敌人移动的过程*/
{int i,loop;
randomize();
for(i=0;i5;i++)
{
if(you.x==them.x&&(them.y+1)==you.y)
them.y++;
else if(you.x==them.x&&(them.y-1)==you.y)
them.y--;
else if(you.y==them.y&&(them.x+1)==you.x)
them.x++;
else if(you.y==them.y&&(them.x-1)==you.x)/*只要控制者在身边就立即靠上去*/
them.x--;
else
{
loop:
xx[0]=rand()%4+1;/*这里的方向采取随机赋值,原则是新的方向不可以和原来的方向相反*/
if(xx[0]==1&&xx[1]==2||xx[0]==2&&xx[1]==1)
goto loop;
if(xx[0]==3&&xx[1]==4||xx[0]==4&&xx[1]==3)
goto loop;
xx[1]=xx[0];
if(xx[0]==1)/*四个方向*/
{them.x--;
if(a[them.x][them.y]==2)/*如果碰墙壁的话就回到原来的地方等待随机的方向*/
{them.x++;goto loop;}
}
else if(xx[0]==2)
{them.x++;
if(a[them.x][them.y]==2)
{them.x--;goto loop;}
}
else if(xx[0]==3)
{them.y++;
if(a[them.x][them.y]==2)
{them.y--;goto loop;}
}
else if(xx[0]==4)
{them.y--;
if(a[them.x][them.y]==2)
{them.y++;goto loop;}
}
}
}
}
fun(struct play *them)/*移动中的判断*/
{
int i;
setcolor(0);/*把敌人的老位置删除*/
for(i=0;i5;i++)
circle(them.y*20+100,them.x*20+100,9);
movethem(them);/*根据控制者的位置来决定敌人的移动方向*/
}
win()/*胜利的话*/
{
cleardevice();
settextstyle(0,0,4);
while(!kbhit())
{
setcolor(rand()%13+1);
outtextxy(200,200,"YOU WIN!");
delay(1000);
}
}
false1()/*失败画面*/
{
cleardevice();
settextstyle(0,0,4);
while(!kbhit())
{
setcolor(rand()%13+1);
outtextxy(180,200,"GAME OVER!");
delay(1000);
}
}
loseyes()/*判断是否失败*/
{int i;
for(i=0;i5;i++)
if(them.x==you.x&&them.y==you.y)
false=1;/*如果失败的话*/
}
main()
{int gd=DETECT,gm;
int key,i;
initgraph(&gd,&gm,"c:\tc");
cleardevice();
begain();/*开始画面*/
while(1)
{
while(!kbhit())
{
setcolor(GREEN);/*重画敌人*/
for(i=0;i5;i++)
circle(them.y*20+100,them.x*20+100,9);
TimeDelay(280000);
fun(them);/*处理敌人*/
for(i=0;i5;i++)
if(them.x==you.x&&them.y==you.y)
false=1;/*如果失败的话*/
loseyes();/*判断是否失败*/
if(false)
break;
}
if(false)
break;
key=bioskey(0);
setcolor(0);/*把自己原来位置的人给删除掉*/
circle(100+you.y*20,100+you.x*20,9);
if(key==ESC)
break;
else if(key==UP)/*这里开始的判断主要是是否吃到豆子和碰到墙壁*/
{you.x--;
if(a[you.x][you.y]==2) you.x++;
else if(a[you.x][you.y]==0)
drawblackdou(you.x,you.y);}
else if(key==DOWN)
{you.x++;if(a[you.x][you.y]==2) you.x--;
else if(a[you.x][you.y]==0)
drawblackdou(you.x,you.y);}
else if(key==RIGHT)
{you.y++;if(a[you.x][you.y]==2) you.y--;
else if(a[you.x][you.y]==0)
drawblackdou(you.x,you.y);}
else if(key==LEFT)
{you.y--;if(a[you.x][you.y]==2) you.y++;
else if(a[you.x][you.y]==0)
drawblackdou(you.x,you.y);}
if(sum==50)
break;
setcolor(RED);/*执行了一次键盘后再画出自己的位置*/
circle(100+you.y*20,100+you.x*20,9);
loseyes();/*自己走上去碰到敌人的可能*/
if(false)
break;
}
if(sum==50)/*吃满豆子了*/
{win();getch();}
if(false)
{false1();getch();}
closegraph();
}
楼主 2016-02-12 15:38 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知