我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于python pygame实现的兔子吃月饼小游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于python pygame实现的兔子吃月饼小游戏

中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整。

小游戏规则简介

玩家通过"wsad"或者"↑↓←→"键控制兔子移动,使得兔子可以吃到更多的月饼,月饼一旦生成之后位置不会变,也不会消失,就等着兔子去吃,就是这么简单。但是吃了月饼会变重,重到一定程度会有想不到的效果。

实现

使用Python的pygame模块开发,pygame是用来开发游戏软件的Python第三方库,基于SDL库的基础上开发。可以创建功能丰富的游戏和多媒体程序,用它来开发小游戏非常适合。

初始化游戏窗口


import sys
import pygame

width = 800
height = 800
#  初始化所有pygame模块
pygame.init()
# 创建游戏主窗口 width * height
windows = pygame.display.set_mode((width, height))
pygame.display.set_caption('兔子吃月饼!!')
# 游戏循环
while True:
    # 给屏幕填充颜色
    windows.fill((204, 204, 255))
    for event in pygame.event.get():
        # 判断事件是否是退出事件,是则退出
        if event.type == pygame.QUIT:
            # 先退出pygame窗口,再退出程序
            pygame.quit()
            sys.exit()
    pygame.display.flip()

游戏逻辑

实现玩家类

玩家应该包括以下属性:位置、角色大小、分数等,还应该有移动位置move的方法,由于在此玩家控制的是一只兔子,玩法是吃月饼,所以把分数换为重量。


class Rabbit:
    """
    玩家兔子类
    """

    def __init__(self, top, left, height, width):
        # 初始位置及大小
        self.top = top
        self.left = left
        self.height = height
        self.width = width
        # 游戏人物的初始位置
        self.rect = pygame.Rect(self.left, self.top, self.width, self.height)

        self.player_image = pygame.image.load('兔子.png')
        self.player_stretched_image = pygame.transform.scale(self.player_image, (height, width))

        # 控制移动变量
        self.move_left = False
        self.move_right = False
        self.move_up = False
        self.move_down = False
        # 每次移动的大小
        self.MOVESPEED = 5
        # 重量
        self.weight = 5

    def move(self):
        """
        控制移动
        :return:
        """
        if self.move_down and self.rect.bottom < height:
            self.rect.top += self.MOVESPEED
            self.rect.bottom += self.MOVESPEED
        if self.move_up and self.rect.top > 0:
            self.rect.top -= self.MOVESPEED
            self.rect.bottom -= self.MOVESPEED
        if self.move_left and self.rect.left > 0:
            self.rect.left -= self.MOVESPEED
            self.rect.right -= self.MOVESPEED
        if self.move_right and self.rect.right < width:
            self.rect.left += self.MOVESPEED
            self.rect.right += self.MOVESPEED

实现月饼类

月饼包括月饼的位置大小,及月饼的图像,月饼的图像在已有的图像中随机选择。


class MoonCake:
    """
    月饼类
    """

    def __init__(self):
        # 位置及大小
        self.rect = pygame.Rect(random.randint(0, 750), random.randint(0, 750), 20, 20)
        # 图像
        self.moon_cake_image = pygame.image.load("./月饼/月饼{}.png".format(random.randint(1, 8)))

交互逻辑

主要在游戏窗口内生成并显示玩家兔子和月饼,然后监听键盘事件,监听"wsad"或者"↑↓←→"键,来控制兔子上下左右的进行移动,再实现碰撞检测来验证兔子是否吃到月饼,吃到月饼则重量增加。运行过程中也会不断判断月饼的数量,并不断增加。


def game_run():
    global width
    global height
    # 是否结束
    end = False
    # 创建时钟对象 (可以控制游戏循环频率)
    clock = pygame.time.Clock()
    # 月饼计数器
    moon_cake_limit = 20

    player = None
    if not player:
        player = Rabbit(300, 100, 64, 64)
    moon_cakes = []
    for i in range(20):
        moon_cake = MoonCake()
        moon_cakes.append(moon_cake)

    # 游戏循环
    while True and not end:
        # 给屏幕填充颜色
        windows.fill((204, 204, 255))
        # 监听键盘事件
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
            player.move_right = False
            player.move_left = True
        if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
            player.move_left = False
            player.move_right = True
        if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:
            player.move_down = False
            player.move_up = True
        if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:
            player.move_up = False
            player.move_down = True
        player.move()
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYUP:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                if event.key == K_LEFT or event.key == K_a:
                    player.move_left = False
                if event.key == K_RIGHT or event.key == K_d:
                    player.move_right = False
                if event.key == K_UP or event.key == K_w:
                    player.move_up = False
                if event.key == K_DOWN or event.key == K_s:
                    player.move_down = False

        # 月饼不足20时生成新的月饼
        if len(moon_cakes) < moon_cake_limit:
            # 生成新的月饼
            moon_cakes.append(MoonCake())

        # 画兔子
        windows.blit(player.player_stretched_image, player.rect)
        # 显示兔子的重量
        text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 30)
        text_fmt = text.render("重量:{}斤!".format(player.weight), True, (255, 255, 255))
        windows.blit(text_fmt, (0, 0))
        # 画月饼
        for moon_cake in moon_cakes:
            windows.blit(moon_cake.moon_cake_image, moon_cake.rect)
        # 碰撞检测
        for moon_cake in moon_cakes:
            if player.rect.colliderect(moon_cake.rect):
                moon_cakes.remove(moon_cake)
                # 吃到月饼兔子会变重
                player.weight += 2

        pygame.display.flip()
        pygame.display.update()
        # 通过时钟对象指定循环频率
        clock.tick(40)

运行如下:

突然发现,这样的话这个游戏永远不会结束,可以一直玩下去,上面我们说了,兔子吃到月饼重量会增加,那我们增加一个机制:等兔子的重量大于100斤的时候,游戏结束,对!你没有看错!,就是这么草率!!!

在碰撞检测循环里加入以下逻辑:


if player.weight > 10:
    end = True
    while end:
        # 游戏结束
        windows.fill((204, 204, 255))
        text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 50)
        text_fmt1 = text.render("你的兔子撑死了!!".format(player.weight), True, (255, 255, 255))
        text_fmt2 = text.render("game over!".format(player.weight), True, (255, 255, 255))
        windows.blit(text_fmt1, (200, 200))
        windows.blit(text_fmt2, (260, 300))
        clock.tick(40)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
                # 按任意键继续
            if event.type == pygame.KEYDOWN:
                end = False
                # 重新生成玩家兔子及月饼
                player = Rabbit(random.randint(0, 750), random.randint(0, 750), 64, 64)
                moon_cakes.clear()
                for i in range(20):
                    moon_cake = MoonCake()
                    moon_cakes.append(moon_cake)

        pygame.display.flip()
        pygame.display.update()

为了方便调试,改成了兔子重量大于10斤,即结束。

运行如下:

完成!感谢阅读,提前祝大家中秋快乐!!!

总结

到此这篇关于基于python pygame实现的兔子吃月饼小游戏的文章就介绍到这了,更多相关pygame兔子吃月饼小游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于python pygame实现的兔子吃月饼小游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于Python实现骰子小游戏

骰子,是现在娱乐场所最常见的一种玩乐项目。一般骰子分两人和两人以上玩,而玩法有很多。本文就来用Python实现个骰子小游戏,感兴趣的可以了解一下
2023-02-28

基于Pygame如何实现简单的贪吃蛇游戏

这篇文章主要为大家展示了“基于Pygame如何实现简单的贪吃蛇游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Pygame如何实现简单的贪吃蛇游戏”这篇文章吧。导入相关的包import p
2023-06-21

基于Python如何实现骰子小游戏

这篇文章主要讲解了“基于Python如何实现骰子小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Python如何实现骰子小游戏”吧!一、环境准备 1)运行环境 开发环境:Pytho
2023-07-05

Python基于pygame实现的font游戏字体(附源码)

本文实例讲述了Python基于pygame实现的font游戏字体。分享给大家供大家参考,具体如下: 在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中字体的一些介绍说明 首先我们得判断一下我
2022-06-04

python+pygame实现简易五子棋小游戏的三种方式

这篇文章主要介绍了使用python实现简易五子棋小游戏,文中提供了三种实现方式,解决思路和部分实现代码,感兴趣的朋友可以参考下
2023-03-23

基于Python实现格斗小游戏的示例代码

格斗游戏,曾经是街机厅里最火爆的游戏之一,甚至可以把“之一”去掉,那个年代的格斗游戏就是街机游戏的王。本文就来用Python实现一个简单的格斗游戏,感兴趣的可以了解一下
2023-03-02

python基于pygame实现响应游戏中事件的方法(附源码)

本文实例讲述了python基于pygame实现响应游戏中事件的方法。分享给大家供大家参考,具体如下: 先看一下我做的demo效果:当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动 这是客观上面存在
2022-06-04

基于Python实现牛牛套圈小游戏的示例代码

“幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战!这篇文章小编主要为大家介绍一款基于Python实现牛牛套圈小游戏,感兴趣的小伙伴可以了解一下
2023-02-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录