AI贪吃蛇制作

from pygame import *
from sys import *
from random import *


init()
font.init()
screen=display.set_mode((600,400))
screen.fill((20,139,69))
display.set_caption("贪吃蛇")


c = []
right=True
left=False
up=False
down=False
n=-3
l=True
s=0
width=30
height=30
x=240
y=240
speed=6


while True:


    draw.rect(screen,(0,139,69),(0,0,130,90))
    screen.blit(font.SysFont("simhei",30).render("得分:"+str(s),True,(0,0,0)),(0,0))
    screen.blit(font.SysFont("simhei",30).render("速度:"+str(speed),True,(0,0,0)),(0,30))


    for a in event.get():
        if a.type==QUIT:
            quit()
            exit()



    speed=randint(6,12)



    if y>400:
        y=0
    if y<0:
        y=400
    if x<0:
        x=600
    if x>600:
        x=0


    c.append((x,y))
    draw.rect(screen,(0,255,255),(x,y,width,height))
    time.Clock().tick(speed)


    if n>-1:
        draw.rect(screen,(20,139,69),(c[n][0],c[n][1],width,height))

    if l:
        p=(randint(1,9)*width,randint(1,9)*height)
        draw.rect(screen,(255,246,143),(p[0],p[1],width,height))
        l=False

    if x==p[0] and y==p[1]:
        s+=1
        draw.rect(screen,(0,255,255),(x,y,width,height),0)
        c.append((x,y))
        l=True
    n+=1

    if p[0]>x:
        right=True
        left=False
        up=False
        down=False
    if p[0]<x:
        right=False
        left=True
        up=False
        down=False
    if p[1]<y:
        right=False
        left=False
        up=True
        down=False
    if p[1]>y:
        right=False
        left=False
        up=False
        down=True

    if right:
        x+=width
    if down:
        y+=height
    if up:
        y-=height
    if left:
        x-=width


    display.flip()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Snake-AI,这是一个用 C/C 语言编写的贪吃蛇游戏的人工智能。AI 的目的是让蛇尽可能的吃更多的食物,直到吃满整个地图。想参与这个项目,请查看todos。Demo使用方法编译与运行:$ make $ make run为了解详细使用方法, 请查看主函数main()算法介绍函数Snake.decideNext(): 计算蛇S1的下一个移动方向D计算从蛇S1的头部到达食物的最短路径P1。派一条与蛇S1完全一样的虚拟蛇S2沿路径P1吃掉食物。计算从蛇S2的头部到其尾部的最长路径P2。如果路径P2存在,将移动方向D设置为路径P1的第一个方向,否则进行步骤4。计算从蛇S1的头部到达其尾部的最长路径P3。如果P3存在,将移动方向D设置为路径P3的第一个方向,否则进行步骤5。将移动方向D设置为离食物最远的方向。函数Map.findMinPath(): 计算两个位置间的最短路径算法建立在BFS的基础上。为了使路径尽可能直,每次遍历邻接点时,在当前移动方向上的位置会被优先遍历。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最短路径,每个位置上的数字表示了从起始位置开始到该位置的最短距离)函数Map.findMaxPath(): 计算两个位置间的最长路径算法建立在DFS与贪心算法的基础上。每次遍历邻接点时,离目标位置最远(使用曼哈顿距离估计)的位置将会被优先遍历到。另外,为了使路径尽可能直,如果两个位置到目标位置的距离相等,在当前移动方向上的位置将被优先遍历到。这个问题是一个NP完全问题,此算法得出的结果路径只是一个近似最长路径。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最长路径,每个位置上的数字表示了从该位置开始到目标位置的估计距离) 标签:Snake

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值