游戏中的人工智能1
最近一直在纠结于炒鸡‘过时’的pygame,有些想法想要分享。
‘Festinatione facit vastum’
环境:
Win10(神奇的我给kali装了Nivdia驱动,崩了)
Python2.7 or Python3.6
Pycharm
游戏的智能?
如今凡事都要和人工智能挂上勾,AI(Artificial Intelligence,人工智能,),到底离我们多远或者多近呢?
让我们想一想,从小时候开始(老年90后)我们就有接触了,红白机(山寨)的出现,让我们有了更多的时间不去学习…
扯得远…现在看看我们身边–游戏中的人工智能:
超级玛丽
妈耶,多么经典的游戏,举个例子,走来走去的乌龟们,我们操控着管道工人踩到他们头上就可以轻松KO他们,而平时他们在干嘛?—在两条管子之间走来走去(无聊而惬意的人生),来让我们打开他们的身体,看看他们的产生:
self.move_forward()
if self.hit_wall():
self.change_directon()
真的是惬意无比,走走走,撞墙(妈耶)就回头,然后重复。这其中说明他只能理解一个状态,就是撞墙,而到达这个状态他就会回头(执行回头)。
这时候我们再来看一看会发射子弹的敌人,把他也打开:
if self.state == 'exploring':
self.random_heading()
if self.can_see(player):
self.state == 'seeking'
elif self.state == 'seeking':
self.head_towards('player')
if self.in_range_of(play):
self.fire_at(player)
if not self.can_see(player):
self.state = 'exploring'
我们看到他有两个状态,搜寻和锁定。如果处于搜寻状态则随意走来走去,如果发现目标,就锁定他,然后靠近他,开火(biubiubiu~),而当丢失了目标(1、目标走了 2、目标死了),则重新进入搜寻状态。
这就是一个很简单的例子,但是即将引出我们的重头戏—状态机
什么是状态机?
有限状态机 (finite-state-machine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型(百度百科)。
上面说的很抽象,所以我们来画个图(打开我的Sai):
状态定义了两个内容:
· 当前在做什么
· 转化到下一件事时候的条件
状态同时还可能包含进入(entry)和退出(exit)两种动作,进入时间是指进入某个状态时要做的一次性的事情,比如上面的怪,一旦进入攻击状态,就得开始计算与玩家的距离,或许还得大吼一声“我要杀了你”等等;而退出动作则是与之相反的,离开这个状态要做的事情。
下一篇博客:我们来创建一个更为复杂的场景来阐述这个概念——一个蚁巢世界。我们常常使用昆虫来研究AI,因为昆虫的行为很简单容易建模。在我们这次的环境里,有三个实体(entity)登场:叶子、蜘蛛、蚂蚁。叶子会随机的出现在屏幕的任意地方,并由蚂蚁回收至蚁穴,而蜘蛛在屏幕上随便爬,平时蚂蚁不会在意它,而一旦进入蚁穴,就会遭到蚂蚁的极力驱赶,直至蜘蛛挂了或远离蚁穴。