Python小游戏22——吃豆豆小游戏

  • 运行效果图

 

caddf223cecc4874ae52cf16a25cb27e.png

299b26aabd9d4a1eb0a078d43381031d.png 

 

  • 【python】代码展示

 import pygame

import random

 

# 初始化Pygame

pygame.init()

 

# 屏幕尺寸

WIDTH, HEIGHT = 800, 600

WIN = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption("吃豆豆小游戏")

 

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GREEN = (0, 255, 0)

RED = (255, 0, 0)

 

# 玩家类

class Player(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface([50, 50])

        self.image.fill(GREEN)

        self.rect = self.image.get_rect()

        self.rect.center = (WIDTH // 2, HEIGHT // 2)

        self.speed = 5

 

    def update(self):

        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:

            self.rect.x -= self.speed

        if keys[pygame.K_RIGHT]:

            self.rect.x += self.speed

        if keys[pygame.K_UP]:

            self.rect.y -= self.speed

        if keys[pygame.K_DOWN]:

            self.rect.y += self.speed

 

        # 边界碰撞检测

        if self.rect.left < 0:

            self.rect.left = 0

        if self.rect.right > WIDTH:

            self.rect.right = WIDTH

        if self.rect.top < 0:

            self.rect.top = 0

        if self.rect.bottom > HEIGHT:

            self.rect.bottom = HEIGHT

 

# 豆豆类

class Dot(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface([10, 10])

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.x = random.randint(0, WIDTH - self.rect.width)

        self.rect.y = random.randint(0, HEIGHT - self.rect.height)

 

# 创建精灵组

all_sprites = pygame.sprite.Group()

dots = pygame.sprite.Group()

 

player = Player()

all_sprites.add(player)

 

for i in range(50):

    dot = Dot()

    all_sprites.add(dot)

    dots.add(dot)

 

# 游戏时钟

clock = pygame.time.Clock()

 

# 游戏主循环

running = True

score = 0

 

while running:

    clock.tick(60)

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

 

    # 更新精灵

    all_sprites.update()

 

    # 检测碰撞

    hits = pygame.sprite.spritecollide(player, dots, True)

    if hits:

        score += 1

        print(f"Score: {score}")

 

    # 绘制

    WIN.fill(WHITE)

    all_sprites.draw(WIN)

 

    # 刷新屏幕

    pygame.display.flip()

 

pygame.quit()

 

  • 代码说明:

 

  1. 初始化Pygame:设置屏幕尺寸、标题和颜色。

 

  2. 玩家类(Player):表示玩家(吃豆豆的人),可以移动并检测边界碰撞。

 

  3. 豆豆类(Dot):表示豆豆,随机生成在屏幕上。

 

  4. 创建精灵组:管理玩家和豆豆的精灵组。

 

  5. 游戏主循环:处理事件(如退出游戏)、更新精灵、检测玩家与豆豆的碰撞、绘制精灵并刷新屏幕。

 

  • 如何运行:

 

  1. 将上述代码保存到一个Python文件中,例如eat_dots.py。

 

  2. 在命令行或终端中运行pythoneat_dots.py。

 

  3. 使用箭头键移动玩家吃豆豆,每吃一个豆豆,分数会增加。

  • Python吃豆豆小游戏涉及代码知识点总结

1. 游戏初始化与环境设置:

 

• 使用pygame等图形库初始化游戏窗口和设置屏幕尺寸。

 

• 加载游戏所需的图像和声音素材。

 

2. 玩家与敌人的属性定义:

 

• 定义玩家的初始位置、大小和移动速度。

 

• 定义敌人的属性,如位置、大小和移动速度,并可能使用随机数生成敌人的初始位置。

 

3. 游戏主循环与事件处理:

 

• 使用游戏主循环不断更新游戏状态。

 

• 处理键盘事件,如方向键的按下,以控制玩家的移动。

 

• 检测游戏结束事件,如玩家与敌人的碰撞或达到特定条件。

 

4. 碰撞检测与响应:

 

• 使用pygame的碰撞检测功能来判断玩家与敌人或食物是否发生碰撞。

 

• 根据碰撞结果更新游戏状态,如玩家得分、敌人消失等。

 

5. 图形绘制与更新:

 

• 在游戏窗口中绘制玩家、敌人和食物等游戏元素。

 

• 使用定时器或帧率控制来更新屏幕上的图形,以保持游戏的流畅性。

 

6. 分数与游戏状态管理:

 

• 定义并更新玩家的分数,可能包括吃到食物时的加分逻辑。

 

• 管理游戏状态,如游戏进行中、暂停、结束等,并相应地更新游戏界面。

 

7. 额外功能(可选):

 

• 添加背景音乐和音效以增强游戏体验。

 

• 实现游戏暂停和继续功能。

 

• 设计游戏关卡和难度递增机制。

 

8. 代码组织与模块化:

 

• 将游戏代码分为多个模块或类,如玩家类、敌人类、食物类等,以提高代码的可读性和可维护性。

 

• 使用配置文件或常量来管理游戏中的各种参数和设置。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用

本篇将带你实现一个番茄钟倒计时应用&#xff0c;用户可以设置专注时间和休息时间的时长&#xff0c;点击“开始专注”或“开始休息”按钮启动计时&#xff0c;应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助&#xff0c;并且还会加入猫咪图片…

2024 网鼎杯 - 青龙组 Web WP

2024 网鼎杯 - 青龙组 WEB - 02 打开容器一个登录界面&#xff0c;随便输入账号密码可以进到漏洞界面 这里有一个发送给boss的功能&#xff0c;一眼xss 有三个接口&#xff1a;/flag 、/update 、/submit /flag &#xff1a;要求boss才能访问&#xff0c;/update &#xf…

【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程

文章目录 0. 前言1. 部分观测的马尔可夫决策过程1.1 POMDP的思想以及与MDP的联系1.1.1 MDP的过程回顾1.1.2 POMDP定义1.1.3 与MDP的联系及区别POMDP 视角MDP 视角决策次数对最优解的影响 1.2 POMDP的3种常规解法1.2.1 连续状态的“Belief MDP”方法1. 信念状态的定义2. Belief …

ffmpeg 视频滤镜:屏蔽边框杂色- fillborders

滤镜描述 fillborders 官网链接 > FFmpeg Filters Documentation fillborders滤镜有几种方式帮你屏蔽边框的杂色、不好的图案。 滤镜使用 参数 left <int> ..FV.....T. set the left fill border (from 0 to INT_MAX) (default 0)right …

Java基础——类和对象的定义链表的创建,输出

目录 什么是类&#xff1f; 什么是对象? 如何创建链表&#xff1f; 尾插法&#xff1a; 头插法&#xff1a; 输出链表的长度 输出链表的值 什么是类&#xff1f; 创建Java程序必须创建一个类class. .java程序需要经过javac指令将文件翻译为.class字节码文件&#xff0c…

简单的 docker 部署ELK

简单的 docker 部署ELK 这是我的运维同事部署ELK的文档&#xff0c;我这里记录转载一下 服务规划 架构: Filebeat->kafka->logstash->ES kafka集群部署参照: kafka集群部署 部署服务程序路径/数据目录端口配置文件elasticsearch/data/elasticsearch9200/data/elas…

【初阶数据结构篇】二叉树OJ题

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?

AI网关的功能及其定义 AI网关位于企业应用与内外部大模型调用的交汇点&#xff0c;能够灵活地将请求转发给内部自建模型或外部大模型服务提供商&#xff0c;甚至海外的服务商。它管理着企业所有的AI出口流量&#xff0c;为企业内的不同团队提供了多方面的优势。 对于开发团队…

Ansys Zemax | 手机镜头设计 - 第 4 部分:用LS-DYNA进行冲击性能分析

该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分&#xff0c;它涵盖了相机镜头的显式动态模拟&#xff0c;以及对光学性能的影响。使用Ansys Mechanical和LS-DYNA对相机在地板上的一系列冲击和弹跳过程…

凸优化理论,凸二次规划问题,对偶问题及KKT条件

凸优化理论 ​ 研究凸优化之前我们不妨提出几个小问题&#xff1a; 什么是优化问题&#xff1f;优化问题的解是什么&#xff1f;什么是凸优化问题&#xff1f;凸优化问题的解决方案是什么&#xff1f; 1.1 优化问题 ​ 理解优化问题其实很简单&#xff0c;我们其实从高中事…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …

3DGS与NeRF的区别

0 论文链接 nerf&#xff1a;https://arxiv.org/abs/2003.08934 3dgs&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf 1 简要 1.1 nerf neural radiance fields神经辐射场 作者提出了一种优化来自一组输入图像的场景…

关于python的复习

Python的基础 自动声明: 在 Python 中&#xff0c;不需要显式声明变量类型&#xff0c;变量的类型是在赋值时根据值自动推断的。 动态类型: Python 是动态类型语言&#xff0c;变量的类型可以在运行时改变。 x 10 # 整数 x "hello" # 现在是字符串 变量…

HBuilderX运行微信小程序,编译的文件在哪,怎么运行

1. 点击HBuilderX顶部的运行-运行到小程序模拟器-微信开发者工具&#xff0c;就会开始编译 2. 编译完成后的文件在根目录找到 unpackage -- dist -- dev -- mp-weixin, 这里面就是编译后的文件&#xff0c;如果未跳转到开发者工具&#xff0c;那可能是没设置启动路径&#xff0…

自然语言处理在客户服务中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 自然语言处理在客户服务中的应用 自然语言处理在客户服务中的应用 自然语言处理在客户服务中的应用 引言 自然语言处理概述 定义…

【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识4——设备设置

提示&#xff1a;学习麒麟Kylin-Desktop-V10-SP1系统设备设置相关知识&#xff0c;包含设备设置进入方法、配置打印机、设置鼠标、键盘相关参数&#xff08;包含输入法的配置&#xff09;、以及管理快捷键组合、和多屏协同相关配置 一、前期准备 成功安装麒麟系统&#xff08…

Gen-RecSys——一个通过生成和大规模语言模型发展起来的推荐系统

概述 生成模型的进步对推荐系统的发展产生了重大影响。传统的推荐系统是 “狭隘的专家”&#xff0c;只能捕捉特定领域内的用户偏好和项目特征&#xff0c;而现在生成模型增强了这些系统的功能&#xff0c;据报道&#xff0c;其性能优于传统方法。这些模型为推荐的概念和实施带…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入&#xff0c;一批国产中间件厂商破土而出&#xff0c;并在短时间内迅速发展&#xff0c;我国中间件市场迎来洗牌&#xff0c;根据市占率&#xff0c;当前我国中间件厂商排名依次为&#xff1a;东方通、宝兰德、中创股份、金蝶天燕、普元…

PVE纵览-备份与快照指南

PVE纵览-备份与快照指南 文章目录 PVE纵览-备份与快照指南摘要1 备份与快照概述定义与区别备份与快照在PVE中的应用场景 2 PVE 备份功能详解备份类型与策略配置备份任务自动化备份管理 3 PVE 快照功能详解快照的工作原理快照的创建与恢复机制快照对系统性能的影响快照的使用场景…

解非线性方程组

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握解非线性方程组牛顿迭代算法&#xff0c;提高编程能力和解算非线性方程组问题的实践技能。 实验内容&#xff1a; 设有非线性方程组(此方程组是非标准型) 实验说明&#xff1…