分享
 
 
 

简单图形模拟吃豆游戏

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

这个程序主要是想了下怎么样让游戏中的敌人自己行走,但是又不会固定在两点往返徘徊,我用的方法是随机方向,而且走的一步不可以和前一部的方向相反,希望高手们多多指点.也希望高手们可以指教下编写简单游戏的一些技术.

/*上海工程技术大学 02211031 朱昀, email: milo_zy@sohu.com*/

#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=microsec>>16;

r.x.dx=microsec;

int86(0x15,&r,&r);

}

drawblackdou(int x,int y)/*吃豆子的函数*/

begain()/*开始函数*/

{int i,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);

}

else if(a[i][j]==3)/*代表自己*/

{

setcolor(RED);

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

}

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

{

setcolor(GREEN);

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

}

else if(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;

}

void movethem(struct play *them)/*敌人移动的过程*/

{int i,loop;

randomize();

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

{

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

them[i].y++;

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

them[i].y--;

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

them[i].x++;

else if(you.y==them[i].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]==2xx[i][0]==2&&xx[i][1]==1)

goto loop;

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

goto loop;

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

if(xx[i][0]==1)/*四个方向*/

{them[i].x--;

if(a[them[i].x][them[i].y]==2)/*假如碰墙壁的话就回到原来的地方等待随机的方向*/

{them[i].x++;goto loop;}

}

else if(xx[i][0]==2)

{them[i].x++;

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

{them[i].x--;goto loop;}

}

else if(xx[i][0]==3)

{them[i].y++;

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

{them[i].y--;goto loop;}

}

else if(xx[i][0]==4)

{them[i].y--;

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

{them[i].y++;goto loop;}

}

}

}

}

fun(struct play *them)/*移动中的判定*/

{

int i;

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,"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;i<5;i++)

if(them[i].x==you.x&&them[i].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;i<5;i++)

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

TimeDelay(280000);

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

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

if(them[i].x==you.x&&them[i].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)/*吃满豆子了*/

if(false)

closegraph();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有