当前位置: 首页 > 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小游戏所必需的基础,也是理解游戏开发流程的关键。

 

http://www.lryc.cn/news/482614.html

相关文章:

  • WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用
  • C++实现用户分组--学习
  • 鸿蒙华为商城APP案例
  • 回首遥望-C++内存对齐的思考
  • 力扣 LeetCode 704. 二分查找(Day1:数组)
  • 【Mode Management】AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解
  • Zabbix基础信息概述
  • SpringBoot(十二)SpringBoot配置redis
  • Pycharm安装
  • OpenAI大改下代大模型方向,scaling law撞墙?AI社区炸锅了
  • 技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元
  • 利用huffman树实现对文件A先编码后解码
  • 第三十九章 基于VueCli自定义创建项目
  • 网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施
  • LLaMA-Factory学习笔记(1)——采用LORA对大模型进行SFT并采用vLLM部署的全流程
  • PHP和Python脚本的性能监测方案
  • C语言实现数据结构之堆
  • 战略共赢 软硬兼备|云途半导体与知从科技达成战略合作
  • python:用 sklearn 构建 K-Means 聚类模型
  • elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案
  • Oracle 聚集因子factor clustering
  • 【大数据学习 | kafka高级部分】kafka的快速读写
  • 云技术基础
  • 字节序(Byte Order)
  • 融云:社交泛娱乐出海机会尚存,跨境电商异军突起
  • django博客项目实现站内搜索功能
  • 蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)
  • Android 延时操作的常用方法
  • AI驱动的轻量级笔记应用Blinko
  • 一文搞懂 UML 类图