分享
 
 
 

趣味游戏程序设计杂谈---1

王朝other·作者佚名  2006-04-22
窄屏简体版  字體: |||超大  

河海编程讨论小组演讲讲稿

活动第二期

by EmilMatthew 06/04/21

1 碰砖块小游戏的实现思路

1.1综述:

碰砖块是一个长见的非常好玩又不难编制的小游戏。从结构主义看来,这个游戏的实现关键是要处理好以下几部分:

a)横杆的移动。

b)球与矩形的碰撞检测。

c)输赢的检测。

d)碰撞后球体的运行方式。

对于砖块部分,在考虑选用的数据对象时,用一个二维的BOOL型数组arrBricks即可。用True表示砖块存在,用False表示砖块不存在(被碰掉或该关不需要)

其中a)和c)都相对容易:

a)的实现方式比较灵活,有监听器模型,循环及事件驱动等,具体要视语言及开发环境所视。

c) 赢的条件:看一下BOOL矩阵arrBricks是否全为空即可。

输的条件:小球飞出底线没有被挡板接到。

重点谈一下b)和d) 的实现思路

1.2球与矩形的碰撞检测

谈一下一个我实现时的简单想法:

可以用一个圆球沿矩形块外围运动一周的方法来划定碰撞区域,如下图所示:

这样,在碰撞检测时,实际上可以通过小球的圆心是否落在这个类似跑道的图形中来做。具体在写相应的判定语句时,可以采用一定的技巧来加速判定:

If(r0x>=xBoundLeft&&r0x<=xBoundRight)

{

If(r0x<secLeft)

{

If(r0y>=yTop&&r0y<=yButtom)

{

If(distance(r0Point,leftTopPoint)<=r)

//左上区域

Else if(distance(r0Point,leftButtomPoint)<=r)

//左下区域

Else

//最左区域

}

}

Else if(r0x<secRight)

//略,相信你应该已想出这里的代码了

Else

//略

}

1.3碰撞后球体的运行方式

这里碰撞后球体的运行方式根本没有必要用动能守恒定律,只需要做如下的简单处理即可:

碰前小球速度:vx,vy,碰后小球速度:vx’,vy’

各个角相碰: vx’=-vx ,vy’=-vy

水平线相碰: vx’=vx ,vy’=-vy

垂直线相碰: vx=-vx ,vy=vy

2 RPG游戏中人物的行走思路(Title Based Game)

RPG游戏中的人物的行走是个非常关键的要素,但是,实现它并不是很困难,基本原理简述如下:

注意到在如上图这样的RPG游戏场景,它的背景图实际上是有许多的小方格所组成的。这样,采用对象的形式,则每个方格可以定义成下面的形式:

Class Block

{

Int PicId;

Int PicProperty;

//…

}

比方说,PicId可以做为其加载游戏图片库中的图像的索引号,而PicProperty则可以做为标识该小方格属性的特征值,可以采用下面的形式进行定义:

Int normal=0;//可行走区

Int blocked=1;//非可行走区

Int gate=2 ;//场景切换点,如山洞口等处.

在程序中就可以对应人的行走采用这样的代码来进行控制:

If(Key.isDown(UP))

{

If(mapMatrix[currentRow-1][currentCol]==normal)

{ curretnRow--;

Hero.pos=(currentRow,currentRol,mapMatrix);

}

Else if((mapMatrix[currentRow-1][currentCol]== gate)

{

//other code

}

}

If(Key.isDown(LEFT))

{

//略

}

…….

3一种RTS游戏的中敌人进攻策略的模型

这里简单介绍一种我所知道相对好懂的判定模形,这个模型主要是帮助电脑进行进攻或逃避时的判定的,可以说是一个小小的AI,主要采用的方式是一种简单的效益函数。

假定我们现在关注一个行动单位,不妨设它为hero。

这个hero的基本状态应为不行走或者是由某个positionA到另一个poisitonB,无论它处于何种状态,都可以在其四周框定一个范围,可以是圆形的,或者是方形的。

这时,如果有敌人进来时,那么hero到底是打,还是逃,还是在多个敌人中选择一个较为好打的敌人进攻,都需要做出快速而有效的判定。

如下图所呈现的那样:

实际上,说到底,这个问题可以表述成:当hero遇到敌人时,它选择什么样的策略获得的效益最好。在数学上,这应该是属于一个规划类的问题,不过,游戏中基本不可能对每一个游戏单位都在行动时都进行一次规划求解型的计算,所以,求得一个相对比较好的结果应该就可以满足游戏所需要的要求的。

这里,我们可以简单的采用一种因根据各种素影响权重的大小列出一个线性表达式的形式来处理.

影响的因素有哪些呢:

比如说:双方各自的HP,MP;行动速度;各个被选择对象距离hero的路径的长短。

按照各自的权重,列出类似下面这样的效益函数.

F=a*(myHp-enemy[i].Hp)+b*(myMp-enemy[i].Mp)+c*distance+……

只要在我方对可视范围内的各个敌人的效益函数中选出一个最大的值,如enemy[k],即可对采取进攻姿态。

当然,F函数用myHp/enemy[i].Hp来处理也是可以的,关键就在于是否与用人的直观判定相一致,这时,需要下点力气的是各个系数上,用拟合,回归分析等数学工具可以得到比较好的结果。

显然,这个判定模型是十分粗糙的,比如,没有考虑敌人攻入本方基地时的状况,不过,作为一个有启发意义的思路还是值得一试的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有