当前位置: 首页 > news >正文

Python小游戏25——黄金矿工

 

首先,你需要安装Pygame库。 如果你还没有安装,可以使用以下命令进行安装:

 

【bash】

 pip install pygame

  • 【python】代码展示

 import pygame

import random

 

# 初始化Pygame

pygame.init()

 

# 设置屏幕尺寸

screen_width = 800

screen_height = 600

screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("黄金矿工")

 

# 定义颜色

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GOLD_COLOR = (255, 215, 0)

 

# 定义矿工和黄金的类

class Miner:

    def __init__(self, x, y):

        self.x = x

        self.y = y

        self.image = pygame.image.load("miner.png").convert_alpha()

        self.image = pygame.transform.scale(self.image, (50, 50))

        self.rect = self.image.get_rect()

        self.rect.topleft = (x, y)

 

    def move(self, dx, dy):

        self.x += dx

        self.y += dy

        self.rect.topleft = (self.x, self.y)

 

    def draw(self, screen):

        screen.blit(self.image, self.rect.topleft)

 

class Gold:

    def __init__(self, x, y):

        self.x = x

        self.y = y

        self.image = pygame.image.load("gold.png").convert_alpha()

        self.image = pygame.transform.scale(self.image, (30, 30))

        self.rect = self.image.get_rect()

        self.rect.topleft = (x, y)

 

    def draw(self, screen):

        screen.blit(self.image, self.rect.topleft)

 

# 创建矿工和黄金实例

miner = Miner(screen_width // 2, screen_height - 60)

golds = [Gold(random.randint(0, screen_width - 30), random.randint(0, screen_height - 30)) for _ in range(10)]

 

# 游戏主循环

running = True

clock = pygame.time.Clock()

score = 0

 

while running:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

 

    # 获取按键状态

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:

        miner.move(-10, 0)

    if keys[pygame.K_RIGHT]:

        miner.move(10, 0)

    if keys[pygame.K_UP]:

        miner.move(0, -10)

    if keys[pygame.K_DOWN]:

        miner.move(0, 10)

 

    # 检测矿工是否抓到黄金

    for gold in golds[:]:

        if miner.rect.colliderect(gold.rect):

            score += 10

            golds.remove(gold)

 

    # 绘制屏幕

    screen.fill(WHITE)

    miner.draw(screen)

    for gold in golds:

        gold.draw(screen)

 

    # 显示分数

    font = pygame.font.Font(None, 36)

    text = font.render(f"Score: {score}", True, BLACK)

    screen.blit(text, (10, 10))

 

    # 更新屏幕

    pygame.display.flip()

 

    # 控制帧率

    clock.tick(30)

 

# 退出Pygame

pygame.quit()

 

  • 注意事项

在这个代码示例中,你需要准备两张图片:miner.png(矿工的图片)和gold.png(黄金的图片),并将它们放在与你的Python脚本相同的目录中。

  • 知识点总结

1. 游戏初始化:

 

    • 使用pygame.init()初始化pygame模块,为游戏图形和音效处理做准备。

 

    • 设置游戏窗口大小和标题,如pygame.display.set_mode((551, 401), 0, 32)和pygame.display.set_caption("黄金矿工")。

 

    • 加载游戏所需的图像资源,如背景、金矿、石头、钩子等,使用pygame.image.load()函数并调整图像大小。

 

2. 游戏循环:

 

    • 游戏的主循环是不断更新游戏状态并渲染图像到屏幕上的过程。

 

    • 在主循环中,根据用户输入(键盘、鼠标操作)和游戏逻辑(如时间的流逝、钩子的移动等)来更新游戏状态。

 

    • 使用pygame.display.update()更新整个游戏窗口,使更改可见。

 

3. 事件监听:

 

    • 使用pygame.event.get()监听用户输入事件,如键盘按键、鼠标点击等。

 

    • 根据事件类型(如pygame.QUIT、pygame.KEYDOWN、pygame.MOUSEBUTTONDOWN等)执行相应的操作。

 

4. 钩子控制:

 

    • 实现钩子的投放和收回功能,通过检测用户输入(如空格键或鼠标点击)来控制钩子的动作。

 

    • 使用钩子捕捉金块和宝石,当钩子与金块或宝石碰撞时,触发相应的事件(如增加分数、移除物品等)。

 

5. 碰撞检测:

 

    • 使用pygame的碰撞检测功能,如pygame.sprite.spritecollide(),来检测钩子与金块或宝石是否发生碰撞。

 

    • 碰撞检测是游戏中的关键功能,用于确定钩子是否成功捕捉到目标物品。

 

6. 分数计算和显示:

 

    • 根据玩家捕捉到的金块和宝石的数量来计算分数。

 

    • 在游戏界面中实时显示玩家的得分和目标分数,激励玩家努力获取高分。

 

7. 计时器和关卡切换:

 

    • 在游戏界面中设置倒计时器,用于限制玩家的游戏时间。

 

    • 当时间用尽时,游戏自动结束,并根据玩家的得分判断是否过关。

 

    • 过关后,游戏进入下一关,增加游戏的难度和挑战性。

 

8. 图像渲染:

 

    • 使用pygame的绘图功能,如screen.blit(),将背景、角色、得分和计时等渲染到游戏窗口中。

 

    • 渲染过程是游戏循环的一部分,确保游戏界面的实时更新。

 

9. 游戏结束和重新开始:

 

    • 当游戏结束时,显示游戏结束界面,并提供重新开始的选项。

 

    • 重新开始时,重置游戏状态并重新开始游戏循环。

 

  • 总结

黄金矿工小游戏涉及了pygame模块的初始化、游戏循环、事件监听、钩子控制、碰撞检测、分数计算和显示、计时器和关卡切换、图像渲染以及游戏结束和重新开始等多个知识点。这些知识点是开发pygame小游戏所必需的基础,也是理解游戏开发流程的关键。

 

相关文章:

Python小游戏25——黄金矿工

首先,你需要安装Pygame库。 如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...

WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用

在Prism框架中,IContainerExtension和IRegionManager扮演着重要的角色,具体作用如下: IContainerExtension IContainerExtension接口是Prism 7中引入的,用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...

C++实现用户分组--学习

第一步实现:ETL的设计分三部分:数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类,其中包含转换后的MNIST手写数据。还实现了一个数据处理程序,该数据处理程序将提…...

鸿蒙华为商城APP案例

模拟器运行效果如下: 鸿蒙版APP-华为商城-演示视频...

回首遥望-C++内存对齐的思考

这一章节主要巩固一下学习C/C时内存对齐相关的内容! 文章目录 什么是内存对齐?为什么要有内存对齐?如何进行内存对齐?致谢: 什么是内存对齐? 这里不提及一堆啰嗦概念,就结合实际出发&#xff0…...

力扣 LeetCode 704. 二分查找(Day1:数组)

解题思路: 二分查找主要分为[ left , right ]左闭右闭和[ left , right )左闭右开两种 此处采取[ left , right ]左闭右闭写法 注意: 1. right的初始化取值 2. while中取等 3. right mid -1 ; class Solution {public int search(int[] nums, i…...

【Mode Management】AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解

目录 前言 正文 1.AUTOSAR标准描述 1.1 EcuM_CheckWakeup用来干什么 1.2 EcuM_CheckWakeup在哪里被调用 1.3 EcuM_CheckWakeup的使用场景 1.3.1 GPT中断检测唤醒源 1.3.2 EcuM轮询GPT检测唤醒源 1.3.3 ICU中断检测唤醒源 1.3.4 其他 2.AUTOSR工具相关配置 3.唤醒源…...

Zabbix基础信息概述

1.Zabbix概述 Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix 提供了出色的报告和数据可…...

SpringBoot(十二)SpringBoot配置redis

接下来我要实现的webscoket即时聊天中需要使用到redis,我先在项目中配置一下redis。 我这里再windows中做测试,关于redis的安装请移步《Redis(三)Windows系统安装redis》 一:在pom.xml中添加依赖 <!-- springboot redis start --><dependency><grou…...

Pycharm安装

Pycharm安装 返回主目录Pycharm安装1. Pycharm下载PyCharm官网下载地址下载安装包 2. Pycharm安装第一步&#xff1a;双击安装包第二步&#xff1a;进入安装程序第三步&#xff1a;选择安装路径第四步&#xff1a;选择安装选项第五步&#xff1a;安装第六步&#xff1a;完成安装…...

OpenAI大改下代大模型方向,scaling law撞墙?AI社区炸锅了

有研究预计&#xff0c;如果 LLM 保持现在的发展势头&#xff0c;预计在 2028 年左右&#xff0c;已有的数据储量将被全部利用完。届时&#xff0c;基于大数据的大模型的发展将可能放缓甚至陷入停滞。 来自论文《Will we run out of data? Limits of LLM scaling based on hum…...

技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元

在科技日新月异的今天&#xff0c;自动驾驶技术正逐渐从科幻电影走进现实生活&#xff0c;成为出行服务领域的一股不可忽视的力量。近日&#xff0c;北美网约车巨头Lyft与自动驾驶技术领先者Mobileye宣布联手合作&#xff0c;共同推动自动驾驶汽车出行服务的广泛商业化进程。此…...

利用huffman树实现对文件A先编码后解码

利用huffman树实现对文件A先编码后解码&#xff0c;范围为ASCII码0-255的值&#xff0c;如何解决特殊符号问题是一个难点&#xff0c;注意应使用unsigned char存储数据&#xff0c;否则ASCII码128-255的值可能会出问题&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #includ…...

第三十九章 基于VueCli自定义创建项目

目录 1. 选择创建模式 2. 选择需要的功能 3. 选择历史模式还是哈希模式 ​4.CSS预处理器 5. 选择ESLint规则 6. 开始创建项目 ​7. 自定义项目最终结构 1. 选择创建模式 输入创建的项目名&#xff0c;创建项目&#xff1a; 这里选择自定义模式&#xff1a; 2. 选择需要…...

网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施

在数字媒体时代&#xff0c;视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器&#xff0c;以其强大的功能和易用性受到广泛欢迎。然而&#xff0c;在使用过程中&#xff0c;用户可能会遇到视频地址无法播放的问题&#xff0c;这不仅影响用户…...

LLaMA-Factory学习笔记(1)——采用LORA对大模型进行SFT并采用vLLM部署的全流程

该博客是我根据自己学习过程中的思考与总结来写作的&#xff0c;由于初次学习&#xff0c;可能会有错误或者不足的地方&#xff0c;望批评与指正。 1. 安装 1.1 LLaMA-Factory安装 安装可以参考官方 readme &#xff08;https://github.com/hiyouga/LLaMA-Factory/blob/main/…...

PHP和Python脚本的性能监测方案

目录 1. 说明 2. PHP脚本性能监测方案 2.1 安装xdebug 2.2 配置xdebug.ini 2.3 命令行与VS Code中使用 - 命令行 - VS Code 2.4 QCacheGrind 浏览 3. Python脚本性能监测方案 3.1 命令行 4. 工具 5.参考 1. 说明 获取我们的脚本程序运行时的指标&#xff0c;对分析…...

C语言实现数据结构之堆

文章目录 堆一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三. 二叉树的顺序结构及实现1. 二叉树的顺序结构2.…...

战略共赢 软硬兼备|云途半导体与知从科技达成战略合作

2024年11月5日&#xff0c;江苏云途半导体有限公司&#xff08;以下简称“云途”或“云途半导体”&#xff09;与上海知从科技有限公司&#xff08;以下简称“知从科技”&#xff09;达成战略合作&#xff0c;共同推动智能汽车领域高端汽车电子应用的开发。 云途半导体与知从科…...

python:用 sklearn 构建 K-Means 聚类模型

pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...