程序员自己的定位以及怪物追踪寻路AI (转)

先从程序员的思想定位开始.程序员是什么,其实我们不是什么高深摸测的数学家,能使用多少种算法,能把计算机玩得那么厉害,其实程序的本质就是一个翻译者,是一个将人类的行为描述成计算机语言的翻译者.在这个解释里面,有一个根本的定位,就是计算机从属于人类思想!而现在的程序员,大部分习惯使用计算机思想去思考一个问题,当这些程序员看到需求的时候,他们脑子里面第一反映出来的是各种算法,比如说一看到寻路,脑子里面就出现A*两个字,然后就是"可靠" "消耗资源巨大"等一系列字眼,然后就会在这些字眼里面苦苦最求最完美的方案.

但是,第一,我们只是人类的行为的计算机翻译者;第二,从以上观点出发,计算机的算法首先来自于人类的思想;所以,在我们面对需求的时候,为什么不先把自己代入实际环境中,问问人是怎么完成的,当你在各种算法之中苦苦追求完美的时候,为什么不问问自己,如果你在当时的环境下,是否能做到如此完美,如果连人都做不到,为什么要求计算机能完成呢?

罗嗦的话说完,我说说现实中的两个例子

洗牌

要 用程序实现洗牌功能,而且每次洗牌以后扑克牌的顺序不能一样。我想一搬程序员刚开始看到这个题目,基本上会这样想,建立一个数组,然后逐个给数组的成员赋一随即值,这个值是 52个扑克牌之一,而且不与之前数组成员的值相同了,还要考虑花啊、大王小王等情况,于是大家的头都开始痛了

但是在现实里面洗牌,我们好象不会头痛吧。那我们现实中是怎么洗牌的?首先我们要有一副牌!然后用各种手段将扑克牌的位置打乱,所谓打乱其实就是改变了牌之间的位置,那么我们程序中只要老老实实地翻译这个行为就可以了,首先建立一个定长数组,然后将扑克牌按照顺序逐个赋值到数组里面去,然后使用随机数抽取两个下标,将两个下标下的数据成员的值调换,多调换几次就完成洗牌了,是不是很简单?

怪物寻路追踪

一般的想法,如果要可靠地让怪物可以饶过所有障碍,不断地追踪玩家,就要不断地使用A*算法,如果一台服务器上的怪都这样做的话,我想这个服务器起码要使用100年后的超前技术才行

如果你去追一个人,你怎么追的?首先,你要看到你的目标,然后你向着目标冲过去,如果目标躲起来了,你是不是会先跑到目标消失前一刻的位置?如果在那里你找不到目标,你就只好作罢了,如果看见目标,那你可以继续追,所以我的怪物AI可以表示成下面

traget curTraget , lastTraget ;
if( lenth( monsterPos - playerPos ) < accackRadius )
{
           if( isBlock( monsterPos ,playerPos  ) ) //玩家与怪物之间的直线上存在障碍
           {
               monster.curTraget = lastTraget ;
           }else
           {
               lastTraget = curTraget ;
               monster.curTraget = playPos ;
           }
}

一段不仑不类的伪代码,希望大家能看懂,而且这个东西暂时只是个大方向,还有很多要改善的地方,也有很多条件没有考虑,希望大家多给意见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值