【py小游戏系列】贪吃蛇,儿时的回忆

在这里插入图片描述

hello大家好,今天我又发现了个有趣的小玩意。我是专写有趣小玩意的老诗。

老规矩,先上效果图

image.png

这是一个贪吃蛇的小游戏。我们8090后这一代人肯定会碰到过。蛇会随着吃到的食物变得越来越长。然后碰到墙壁或者碰到自己的身体都会输掉游戏。这个是简陋版的贪吃蛇,但是最基本的游戏逻辑都已经全部实现了。

首先先定义游戏中的物体:

food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)

这里面有食物和蛇,还有方向。

上下左右对蛇进行控制。

onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')

这里面的onkey就是对键盘进行检测。然后chang进行改变蛇移动的方向。当然我们可以可以使用其他键盘按键进行操作的,例如wsad,也是可以控制上下左右的。

移动与更新逻辑

def move():
    "Move snake forward one segment."
    head = snake[-1].copy()
    head.move(aim)

    if not inside(head) or head in snake:
        square(head.x, head.y, 9, 'red')
        update()
        return

    snake.append(head)

    if head == food:
        print('Snake:', len(snake))
        food.x = randrange(-15, 15) * 10
        food.y = randrange(-15, 15) * 10
    else:
        snake.pop(0)

    clear()

    for body in snake:
        square(body.x, body.y, 9, 'black')

    square(food.x, food.y, 9, 'green')
    update()
    ontimer(move, 100)

上面代码是贪吃蛇的核心逻辑代码。写的是蛇的移动与逻辑更新。

1整条蛇是由head.move(aim)更新方向移动的。

2if not inside(head) or head in snake: 这一条一句就是输掉比赛的意思,然后蛇身会变成红色。这里面有return,也就是退出逻辑

3if head == food:如果吃掉了食物,那就打印一下蛇的长度,并且更新食物的位置。square(food.x, food.y, 9, ‘green’)是把食物变成绿色。

4整个游戏也就是一个递归,ontimer控制时间帧数,最后退出机制就是return。

整体而言,游戏并不是太难,也很容易就可以学会。上面的思想还是说的比较清楚的。有需要拿完整源码的话,请移步到公众号:诗一样的代码。既然进来了,原创不易。小伙伴点个赞再走呗

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值