python 80行实现贪吃蛇(非pygame) 摸鱼好帮手

python 实现贪吃蛇

使用键盘上下左右进行控制

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib.colors import ListedColormap
import sys,argparse
import keyboard
cmap = ListedColormap(('purple','yellow'))
fig, ax = plt.subplots()

nmap = np.array(np.zeros([100,100]))
nmap[1,1]=1
img = ax.imshow(nmap,cmap=cmap,interpolation='nearest')

id = [2,[1,2],[2,2],[3,2]] #蛇 1左2右3上4下

nfood = 3
food = [] #食物

for i in range(nfood):
    while True:
        a = [np.random.randint(0,100),np.random.randint(0,100)]
        if a in id:
            continue
        else:
            food.append(a)
            break

def up():
    id[0] = 3
def down():
    id[0] = 4
def left():
    id[0] = 1
def right():
    id[0] = 2

def move(id):
    keyboard.add_hotkey('up', up)
    keyboard.add_hotkey('down', down)
    keyboard.add_hotkey('left', left)
    keyboard.add_hotkey('right', right)
    if id[len(id)-1] in food:
        food.remove(id[len(id)-1])
        while True:
            a = [np.random.randint(0, 100), np.random.randint(0, 100)]
            if a in id:
                continue
            else:
                food.append(a)
                break
    else:
        del id[1]
    if id[0] == 1:
        new = [id[len(id)-1][0],id[len(id)-1][1]-1]
        id.append(new)
    if id[0] == 2:
        new = [id[len(id)-1][0],id[len(id)-1][1]+1]
        id.append(new)
    if id[0] == 3:
        new = [id[len(id)-1][0]-1,id[len(id)-1][1]]
        id.append(new)
    if id[0] == 4:
        new = [id[len(id)-1][0]+1,id[len(id)-1][1]]
        id.append(new)
    return id

def updata(frame,img,nmap,id):
    print(id)
    id = move(id)
    nmap = np.zeros([100,100])
    for i in id[1::]:
        nmap[i[0],i[1]] = 1
    for i in food:
        nmap[i[0],i[1]] = 1
    img.set_array(nmap)
    return img,

ani = FuncAnimation(fig=fig,func=updata,fargs=(img,nmap,id),frames=10,blit=True)

plt.show()
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值