游戏开发论坛

 找回密码
 立即注册
搜索
查看: 25983|回复: 18

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

[复制链接]

5

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2008-9-26 15:10:00 | 显示全部楼层 |阅读模式
     先从程序员的思想定位开始.程序员是什么,其实我们不是什么高深摸测的数学家,能使用多少种算法,能把计算机玩得那么厉害,其实程序的本质就是一个翻译者,是一个将人类的行为描述成计算机语言的翻译者.在这个解释里面,有一个根本的定位,就是计算机从属于人类思想!而现在的程序员,大部分习惯使用计算机思想去思考一个问题,当这些程序员看到需求的时候,他们脑子里面第一反映出来的是各种算法,比如说一看到寻路,脑子里面就出现A*两个字,然后就是"可靠" "消耗资源巨大"等一系列字眼,然后就会在这些字眼里面苦苦最求最完美的方案.
     
     但是,第一,我们只是人类的行为的计算机翻译者;第二,从以上观点出发,计算机的算法首先来自于人类的思想;所以,在我们面对需求的时候,为什么不先把自己代入实际环境中,问问人是怎么完成的,当你在各种算法之中苦苦追求完美的时候,为什么不问问自己,如果你在当时的环境下,是否能做到如此完美,如果连人都做不到,为什么要求计算机能完成呢?

    罗嗦的话说完,我说说现实中的两个例子:
   1、洗牌
      要用程序实现洗牌功能, 而且每次洗牌以后扑克牌的顺序不能一样。我想一搬程序员刚开始看到这个题目,基本上会这样想,建立一个数组,然后逐个给数组的成员赋一随即值,这个值是52个扑克牌之一,而且不与之前数组成员的值相同了,还要考虑花啊、大王小王等情况,于是大家的头都开始痛了
      但是在现实里面洗牌,我们好象不会头痛吧。那我们现实中是怎么洗牌的?首先我们要有一副牌!然后用各种手段将扑克牌的位置打乱,所谓打乱其实就是改变了牌之间的位置,那么我们程序中只要老老实实地翻译这个行为就可以了,首先建立一个定长数组,然后将扑克牌按照顺序逐个赋值到数组里面去,然后使用随机数抽取两个下标,将两个下标下的数据成员的值调换,多调换几次就完成洗牌了,是不是很简单?
   2、怪物寻路追踪
      一般的想法,如果要可靠地让怪物可以饶过所有障碍,不断地追踪玩家,就要不断地使用A*算法,如果一台服务器上的怪都这样做的话,我想这个服务器起码要使用100年后的超前技术才行
      如果你去追一个人,你怎么追的?首先,你要看到你的目标,然后你向着目标冲过去,如果目标躲起来了,你是不是会先跑到目标消失前一刻的位置?如果在那里你找不到目标,你就只好作罢了,如果看见目标,那你可以继续追,所以我的怪物AI可以表示成下面
      traget curTraget , lastTraget ;
      if( lenth( monsterPos - playerPos ) < accackRadius )
      {
           if( isBlock( monsterPos ,playerPos  ) ) //玩家与怪物之间的直线上存在障碍
           {
               monster.curTraget = lastTraget ;
           }else
           {
               lastTraget = curTraget ;
               monster.curTraget = playPos ;
           }
      }
       一段不仑不类的伪代码,希望大家能看懂,而且这个东西暂时只是个大方向,还有很多要改善的地方,也有很多条件没有考虑,希望大家多给意见

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2008-9-26 15:43:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

其实程序的本质就是一个翻译者

那是coder,不是程序员

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2008-9-26 22:11:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

LZ说的有道理 我很喜欢哦,能多发表一点此类文章就好啦

10

主题

173

帖子

178

积分

注册会员

Rank: 2

积分
178
发表于 2008-9-27 00:57:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

思路很好。解决了很头疼的问题。

问:
如果角色站在2楼射击楼下的一个战士型NPC,不寻路怎么办?
回答:
让这个NPC战士学会轻功的法术,如果不可以有这样的法术,那么就学会使用类似飞虎爪等攀岩的技能。

于是问题迎刃而解。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2008-9-27 07:49:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

接楼上,于是乎game designer就闲菜了。于是乎整个游戏就成了你一个人的伟大思想结晶了

5

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2008-9-27 15:55:00 | 显示全部楼层

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

    一个游戏的形成,并不是程序员一个人的事情,游戏业的一句话,策划是灵魂,程序是骨干,美术是灵魂,缺一不可,同样,一个游戏开发过程中出现的问题,可以通过程序解决,可以通过策划解决,甚至可以通过运营方面解决.
    但是,现在的游戏公司基本上都是一门专政,要么策划说了算,要么程序说了算,主要是看项目经理是什么职位出身.如果是策划出身,程序说不能实现他也要实现,如果是程序出身,即使需求再简单,程序说不干它就不能实现.这样的业内人就有个问题,他们讨论的时候是为输赢而分,所以出口就要攻击对方,讨论的重点是行跟不行,而不是这个问题要怎么解决.而在回应者的话里我闻到了这样的味道.
    再,我的这个东西只是一个思想,然后是两个例子,或许后面还有许多如果,但是这些如果跟我现实的问题有什么关系?只要需要,我让他学轻功也行,让他不能寻路也行,让怪物当看不见也行,在判断高度层面后让他启动A*也行,这些问题是不是真的大到了要把整个思想推翻?而且这些问题你自己提出来,就会用自己的办法去解决,各有各法,我并没有觉得你有什么错,我也没有觉得我有什么错?
    最后,我打个赌,那些只会火拼的人从来只会叫"美工",而不会叫"美术",其实程序也是人而已,不管他是coder,还是叫程序员,或许你对游戏有很大贡献,或许你在公司里面很说得上话,也就是一个人而已,而且我们应该骄傲地说,我们是个人,支配电脑的人!我只是提出要首先用人的思想去模拟实现方法而已,难道现在电脑要比人要聪明?所以要先考虑电脑的想法?那你是个人还是个计算机的奴隶?
  

12

主题

128

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2008-9-28 11:53:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

寻路ai有很多种
你说的只是其中一种很简单的视线追踪
什么寻路都用a*只能说明设计的人一不怎么懂人工智能的各种算法二不懂算法代价

额, 然后, 我觉得你的论据和你的论点没有太大的关系.
光说寻路, 自然是策划提出希望怪物达到的智能
然后程序考虑是否能够使用以及能够实现

程序不就是个把策划想法尽量实现出来的职位么
有什么好争的

4

主题

220

帖子

220

积分

中级会员

Rank: 3Rank: 3

积分
220
发表于 2008-9-28 13:52:00 | 显示全部楼层

Re: 程序员自己的定位以及怪物追踪寻路AI

赞成asuna,条条大路通北京,不一顶非要用A*. 效率,实现难度都是该考虑的

3

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2008-10-14 19:34:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

引用某人的话:没有程序不能实现的,只是时间早晚的问题!

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-10-15 14:44:00 | 显示全部楼层

Re:程序员自己的定位以及怪物追踪寻路AI

楼主说的也不完全无道理,本意很好,是不想让一些算法公式化,能把想法说出来就很好
但不料引来的却是“臭鸡蛋”,各位高人也别贬人家,就接他的话题,比如服务器端寻路径,有什么更好的策略也放出来共享共享啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 08:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表