学习Python开发小游戏(四)----- 贪吃蛇

前提条件:

        需要安装pygame,pgzero,numpy(windows:1.19.3)

功能:

       1.初始化界面显示小蛇和食物

       2.键盘控制角色的上下左右(wasd或者上下左右)移动,当小蛇吃掉食物后蛇身长度加1同时重置食物位置

       3.统计小蛇吃掉食物的个数,每吃掉一个食物分数加1,同时在界面显示分数

       5.游戏失败,界面显示对应信息,同时停止游戏

附:

       代码中涉及到的素材来自异步社区:《Python游戏趣味编程》一书中提供的素材:https://www.epubit.com/bookDetails?id=UB72096d97d6149

以下是代码:

import pgzrun, time, random

TILE_SIZE = 20
TITLE = '贪吃蛇'
WIDTH = 40 * TILE_SIZE
HEIGHT = 30 * TILE_SIZE

# 存储蛇头和蛇身
snake_list = []
snake_head = Actor('snake1')  # 导入蛇头
snake_head.x = WIDTH / 2  # 蛇头的x坐标
snake_head.y = HEIGHT / 2  # 蛇头的y坐标
snake_list.append(snake_head)
# 添加蛇身
for i in range(4):  # 再为蛇添加4段蛇身
    snake_body = Actor('snake1')  # 导入蛇身
    snake_body.x = snake_list[i].x - TILE_SIZE  # 蛇身的x坐标
    snake_body.y = snake_list[i].y  # 蛇身的y坐标
    snake_list.append(snake_body)  # 把蛇身加入到列表中
# 导入食物
cookie = Actor('cookie')
cookie.x = random.randint(10, 30) * TILE_SIZE  # 食物的x坐标
cookie.y = random.randint(10, 30) * TILE_SIZE  # 食物的y坐标
# 初始化蛇的移动方向,控制蛇的移动方向
direction = 'right'
# 游戏是否失败
isLoose = False
# 游戏得分
score = 0


def draw():
    screen.clear()  # 清除屏幕
    for snake in snake_list:  # 绘制蛇
        snake.draw()
    cookie.draw()  # 绘制食物
    screen.draw.text("得分:" + str(score), (350, 550), fontsize=30, fontname='s', color='green')
    if isLoose:  # 显示游戏失败信息
        screen.draw.text("Game Over !", (250, 250), fontsize=80, color='red')


def update():
    global direction
    # 改变蛇身的颜色
    # 游戏结束直接返回
    if isLoose:
        return
    # 蛇的移动方向
    if keyboard.left or keyboard.a:
        direction = 'left'
    if keyboard.right or keyboard.d:
        direction = 'right'
    if keyboard.up or keyboard.w:
        direction = 'up'
    if keyboard.down or keyboard.s:
        direction = 'down'


def move_snake():
    global direction, isLoose, score
    # 游戏结束直接返回
    if isLoose:
        return
    new_snake = Actor('snake1')  # 创建新蛇头

    # 根据蛇的移动方向确定蛇身的坐标
    if direction == 'right':  # 向右移动
        new_snake.x = snake_list[0].x + TILE_SIZE
        new_snake.y = snake_list[0].y
    if direction == 'left':  # 向左移动
        new_snake.x = snake_list[0].x - TILE_SIZE
        new_snake.y = snake_list[0].y
    if direction == 'up':  # 向上移动
        new_snake.x = snake_list[0].x
        new_snake.y = snake_list[0].y - TILE_SIZE
    if direction == 'down':  # 向下移动
        new_snake.x = snake_list[0].x
        new_snake.y = snake_list[0].y + TILE_SIZE
    # 当蛇头超出边框时游戏失败
    if new_snake.y < 0 or new_snake.y > HEIGHT or new_snake.x < 0 or new_snake.x > WIDTH:
        isLoose = True

    # 当蛇头碰到自身时,游戏失败
    for snake in snake_list:  # 对所有蛇身循环,判断是否和蛇头坐标一致
        if new_snake.x == snake.x and new_snake.y == snake.y:
            isLoose = True
            break

    # 当蛇头碰到食物时,蛇身加1,也就是不删除蛇尾,同时重置饼干位置
    if new_snake.x == cookie.x and new_snake.y == cookie.y:
        cookie.x = random.randint(5, 35) * TILE_SIZE
        cookie.y = random.randint(5, 25) * TILE_SIZE
        score = score + 1  # 得分加1
    else:  # 否则,删除掉旧蛇尾
        del snake_list[len(snake_list) - 1]

    snake_list.insert(0, new_snake)  # 把新蛇头加到列表的最前面
    # 下一次隔0.2秒调用
    clock.schedule_unique(move_snake, 0.2)


move_snake()

pgzrun.go()  # 开始执行游戏

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Pygame的游戏设计是使用Python编程语言和Pygame模块来进行游戏开发的一种方式。Pygame是一个专为电子游戏设计的Python模块,它提供了丰富的功能和工具,可以帮助开发者轻松地创建2D游戏。通过Pygame,开发者可以处理图形、音效、输入设备和游戏逻辑等方面的功能。 在Python游戏设计中,使用Pygame可以轻松创建各种类型的游戏,包括贪吃蛇、飞机大战等。通过Pygame提供的功能,开发者可以实现游戏的界面设计、用户交互、游戏逻辑和音效等方面的功能。同时,Pygame还提供了一些实用的工具和函数,方便开发者进行游戏开发和调试。 如果你对Python游戏设计感兴趣,可以参考以下步骤: 1. 安装Pygame模块:在官方网站https://www.pygame.org/上下载Pygame模块,并按照官方文档的说明进行安装。 2. 导入Pygame模块:在Python代码中导入Pygame模块,以便可以使用它提供的功能和工具。 3. 创建游戏窗口:使用Pygame创建一个游戏窗口,设置窗口的大小和标题等属性。 4. 处理用户输入:使用Pygame监听用户的键盘和鼠标输入,并根据用户的操作进行相应的响应和处理。 5. 绘制游戏元素:使用Pygame提供的绘图函数和工具,在游戏窗口中绘制游戏元素,如精灵、背景和特效等。 6. 更新游戏逻辑:在游戏循环中,根据游戏的逻辑进行状态更新和处理,包括碰撞检测、计分和游戏结束等。 7. 播放音效和音乐:使用Pygame提供的音效和音乐功能,为游戏添加声音效果和背景音乐。 8. 调试和优化:在开发过程中,通过调试和优化,确保游戏的正常运行和流畅性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值