jerryxjr1220 发表于 2017-2-9 15:02:48

python小练习(072):简单游戏AI设计之四(带AI的贪食蛇)

上一节已经做出了个可以自动找食物的贪食蛇,但是这条“笨蛇”既贪心又不够智能,所以往往自己把自己“嫩”死。

后面两节就要让这条蛇聪明一点,并且不要这么“贪心”,俗话讲“心急吃不了热豆腐”嘛。

由于贪食蛇的最优路径决策是依据board的最优路径决策表来选择的,所以记录每一步的最优路径决策表就至关重要了。

在上次的代码上加上以下代码,记录每一步的决策表。

f = open('snake.log','w')
init()
board_reset()
show()
board_refresh()
while not isdead():
    time.sleep(0.3)
    choose_shortest()
    move()
    eatfood()
    if len(food) == 0:
      putfood()
    board_reset()
    show()
    board_refresh()
    for i in range(len(board)):
      f.write(str(board)+'\n')
    f.write('='*50 + '\n')
f.close()
print('Game Over!')

这样,我们就能翻看每次贪食蛇是怎么死的了。

来看其中某一次的决策表:
==================================================








[-1, -1, -1, 6, 7, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

==================================================








[-1, -1, -1, 6, 7, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[-1, 0, -1, -1, -1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 19]
==================================================








[-1, -1, -1, 6, 7, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[-1, -1, -1, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 19]
==================================================

其中-1代表蛇身,0代表此处空格与食物之间没有路径,除0和-1以外的数字代表每个空格到食物的最短路径。
但是由于0比其他数字要小,当蛇头附近有0存在时,笨蛇就会走进死胡同而自杀了。
知道了,问题点就很好办了,把0排除在最优选择范围以外。

修改半成品代码:
**** Hidden Message *****

修改完的贪食蛇已经不会自杀了,看如下的决策表。
==================================================










==================================================








[-1, -1, -1, 4, 5, 6, 7, 8, 9, 8, -1, -1, 23, 22, 21, 22, 23, 24, 25, 26]

==================================================







[-1, 3, 2, 3, 4, 5, 6, 7, 8, 9, 8, -1, 22, 21, 20, 21, 22, 23, 24, 25]
[-1, -1, -1, 4, 5, 6, 7, 8, 9, 8, -1, -1, 23, 22, 21, 22, 23, 24, 25, 26]

==================================================







[-1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, 22, 21, 20, 21, 22, 23, 24, 25]
[-1, -1, -1, 4, 5, 6, 7, 8, 9, 8, -1, -1, 23, 22, 21, 22, 23, 24, 25, 26]

==================================================

下面再来看一种更极端的情况,蛇头与食物之间没有路径,如下决策表:
==================================================










==================================================










==================================================










==================================================










==================================================










==================================================










==================================================










==================================================

可以看到蛇身把地图分成了两半,当食物出现在蛇身的另一边时,贪食蛇已经找不到方向了。
当遇到这种情况下,我们就需要引入一个新的决策机制,这个我们在下一节中讨论,敬请期待。

Eooming 发表于 2017-5-26 21:11:01

试试

P先生 发表于 2017-6-26 09:48:06

zzm00 发表于 2017-12-6 22:25:17

厉害

yyf900524 发表于 2017-12-11 15:58:15

顶起来

kyza90123 发表于 2018-3-4 23:26:51

谢谢大佬

红霉素 发表于 2018-3-27 10:09:29

ABC23 发表于 2018-4-22 01:12:03

huuifu

小cp 发表于 2019-3-1 23:43:08

1

橘喵喵 发表于 2019-5-16 19:19:13

加油

吴笑 发表于 2019-5-16 20:40:26

xiexie看看

diracle 发表于 2019-7-15 21:47:33

顶顶顶顶顶

qaz123765 发表于 2019-7-16 08:31:50

看看

jzcg001 发表于 2020-3-28 19:26:26

学习!

wujiwuhui 发表于 2020-3-28 21:34:32

认真看看,学习一下。

cupbbboom 发表于 2020-3-31 15:54:15

这些逻辑怎么坚持想下去的啊,大佬

页: [1]
查看完整版本: python小练习(072):简单游戏AI设计之四(带AI的贪食蛇)