【Python游戏】编程开发贪吃蛇游戏(第三期)

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢!

一、前言

本文介绍Python编程开发贪吃蛇游戏实战的第三期内容。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年代初设计的一门编程语言,应用领域非常广泛,尤其在数据分析、人工智能、游戏开发等领域,已经成为最受欢迎的程序设计语言之一,比较适合新手学习。

    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/

  • 什么是Pygame?

    Pygame 是一个专门用来开发游戏的 Python 模块,是一个免费、开源的第三方软件包,主要为开发、设计 2D 电子游戏而生,比如扫雷、纸牌游戏、贪吃蛇、超级马里奥、飞机大战等等。

    Pygame官网地址:https://www.pygame.org/tags/all

二、贪吃蛇游戏开发简介

2.1 贪吃蛇游戏规则

游戏用户可以使用键盘控制贪吃蛇去吃食物,每次成功吃掉一个食物后,游戏得分增加50分,蛇身体变长一节;同时,食物消失,随机又出现新的食物,不断重复,看谁的游戏得分最高;

如果贪吃蛇撞到了墙(游戏窗口边框),则游戏结束,显示最终游戏得分;之后,可以按空格,重新开始游戏;

2.2 贪吃蛇游戏开发步骤

贪吃蛇游戏开发包括四个步骤,这里对应分四期博客文章进行介绍。

  • 步骤1、编程开发贪吃蛇游戏界面,即创建一个游戏主窗口,设置一张图片作为游戏的背景图片(这里使用蜡笔小新图片),同时在窗口左上角显示游戏得分Score;
    在这里插入图片描述

  • 步骤2、编程开发贪吃蛇,即在游戏主窗口中,画一条粉色的贪吃蛇,并且可以使用键盘控制贪吃蛇进行上下左右的移动;
    在这里插入图片描述

  • 步骤3、编程开发贪吃蛇吃食物和游戏规则,即在游戏主窗口中,画一个黑色的食物,并且当食物被贪吃蛇吃掉后,又会出现新的食物。同时,蛇身体变长一节,游戏得分增加50分;
    在这里插入图片描述

  • 步骤4、编程开发游戏结束规则,即当贪吃蛇撞到了墙(游戏窗口边框),提示“Game Over”游戏结束,显示最终游戏得分;之后,可以提示可以按空格,重新开始游戏;
    在这里插入图片描述

三、贪吃蛇游戏开发实战

这里介绍贪吃蛇游戏开发实战第三期,编程开发贪吃蛇吃食物和游戏规则,即在游戏主窗口中,画一个黑色的食物,并且当食物被贪吃蛇吃掉后,又会出现新的食物。同时,蛇身体变长一节,游戏得分增加50分。

对应的Python代码如下:

import pygame
import sys
import random

"""
贪吃蛇游戏
@author 姑苏老陈
@date 2024-07-19
"""

# 定义游戏窗口大小
game_width = 800
game_height = 800


# 定义蛇类,点以25为单位
class Snake(object):
    # 初始化, 开始时默认向右/身体块x5
    def __init__(self):
        self.direction = pygame.K_RIGHT
        self.body = []
        for x in range(5):
            self.addNode()

    # 在头部添加一个蛇块
    def addNode(self):
        left, top = (0, 0)
        if self.body:
            left, top = (self.body[0].left, self.body[0].top)
        # 创建一个指定位置和大小的矩形区域,即蛇块
        node = pygame.Rect(left, top, 25, 25)
        if self.direction == pygame.K_LEFT:
            node.left -= 25
        elif self.direction == pygame.K_RIGHT:
            node.left += 25
        elif self.direction == pygame.K_UP:
            node.top -= 25
        elif self.direction == pygame.K_DOWN:
            node.top += 25
        self.body.insert(0, node)  # insert在列表的指定位置插入一个元素

    # 删除尾部最后一个蛇块
    def delNode(self):
        self.body.pop()  # pop移除列表中的最后一个元素

    # 蛇移动
    def move(self):
        self.addNode()
        self.delNode()

    # 改变蛇的方向,左右、上下不能被逆向改变
    def changeDirection(self, curkey):
        LR = [pygame.K_LEFT, pygame.K_RIGHT]
        UD = [pygame.K_UP, pygame.K_DOWN]
        if curkey in LR + UD:
            if (curkey in LR) and (self.direction in LR):
                return
            if (curkey in UD) and (self.direction in UD):
                return
            self.direction = curkey


# 定义食物类
class Food:
    # 初始化
    def __init__(self):
        self.rect = pygame.Rect(-25, 0, 25, 25)

    # # 吃掉后,移除食物
    def remove(self):
        self.rect.x = -25

    # 放置新的食物
    def set(self):
        if self.rect.x == -25:
            allpos = []
            # 不靠墙太近 25 ~ game_width-25 之间
            for pos in range(25, game_width - 25, 25):
                allpos.append(pos)
            self.rect.left = random.choice(allpos)
            self.rect.top = random.choice(allpos)


# 定义界面文案显示
def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):
    # 获取系统字体,并设置文字大小
    cur_font = pygame.font.SysFont("宋体", font_size)
    # 设置是否加粗属性
    cur_font.set_bold(font_bold)
    # 设置是否斜体属性
    cur_font.set_italic(font_italic)
    # 设置文字内容,创建字体surface对象
    text_fmt = cur_font.render(text, 1, color)
    # 绘制文字,放置在screen主窗口上
    screen.blit(text_fmt, pos)


# 定义main方法
def main():
    # 初始化设置,创建游戏主窗口等等
    pygame.init()
    screen_size = (game_width, game_height)
    screen = pygame.display.set_mode(screen_size)
    pygame.display.set_caption('贪吃蛇-蜡笔小新版')
    image = pygame.image.load("../../assets/xiaoxin.jpeg")  # 加载图像,创建图像surface对象
    img = pygame.transform.scale(image, (game_width, game_width))   # 调整图像大小,并返回一个新的图像surface对

    clock = pygame.time.Clock()  # 创建一个时钟对象来帮我们确定游戏要以多大的帧数运行
    scores = 0  # 游戏得分
    isDead = False

    # 创建蛇类
    snake = Snake()
    # 创建食物类
    food = Food()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                snake.changeDirection(event.key)

        screen.fill((255, 255, 255))
        screen.blit(img, (0, 0))

        # 画蛇身,画一个不停移动的矩形队列
        if not isDead:
            snake.move()
        for rect in snake.body:
            pygame.draw.rect(screen, "pink", rect, 0)  # 绘制矩形蛇块

        # 食物处理 / 吃到+50分
        # 当食物rect与蛇头重合,吃掉 -> 蛇身增加一个Node,食物移除
        if food.rect == snake.body[0]:
            scores += 50
            food.remove()
            snake.addNode()

        # 之后,新食物投递
        food.set()
        pygame.draw.rect(screen, "black", food.rect, 0)

        # 显示当前分数
        show_text(screen, (44, 44), 'Scores: ' + str(scores), "black")

        pygame.display.update()

        # 设置游戏的帧数率(FPS),即通过时钟对象,指定循环频率,每秒循环10次
        clock.tick(10)


# 入口
if __name__ == '__main__':
    main()

代码运行效果图如下:
在这里插入图片描述

四、总结

以上介绍了如何使用Python编程开发贪吃蛇游戏,并提供了对应的代码以及运行效果图。希望对大家有帮助,谢谢。

PS:代码中使用到的图片等资源下载地址:https://pan.baidu.com/s/11F7CtbdEojYTNvZkUzWhBA?pwd=7vf0
提取码:7vf0

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑苏老陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值