Python Pygame 实现宝可梦对战场面

2023-10-31

        宝可梦游戏是小时候最喜欢的掌机游戏之一,印象最深刻的是宝可梦(黄)、宝可梦(金、银)还有红蓝宝石。游戏的设计很出色,画面精致,可以说是是掌机时代的代表了。

        本篇文章使用Pygame实现宝可梦的战斗场景,重温经典。


目录

一、游戏效果展示

二、使用Pygame画矩形

三、制作矩形移动动画

四、使用Pygame显示游戏文本

五、使用Pygame加载图片

六、完整源码


一、游戏效果展示

二、使用Pygame画矩形

        战斗画面需要用到三个矩形,分别用于显示战斗选择面板、敌方精灵状态面板(等级、血量)、我方精灵状态面板(等级、血量)。我们可以先使用Pygamepygame.Rect(260,220,220,95)创建一个矩形,并设置矩形的top,left,长,款四个参数。然后使用pygame.draw.rect(_display_surf,BLACK,_select_rect,1)显示在画板中。

画矩形的代码如下:

import pygame, sys
from pygame.locals import *

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
FPS = 30
_fps_Clock = pygame.time.Clock()


def pygame_run():
    # 初始化游戏
    pygame.init()
    # 设置游戏画面长、宽
    _display_surf = pygame.display.set_mode((480, 320))
    pygame.display.set_caption('py梦')
    # 对战面板,显示设置
    _select_rect = pygame.Rect(260, 220, 220, 95)
    while True:
        # 填充背景为白色
        _display_surf.fill(WHITE)
        # 画矩形
        pygame.draw.rect(_display_surf, BLACK, _select_rect, 1)
        # 退出游戏条件
        for _event in pygame.event.get():
            if _event.type == QUIT:
                pygame.quit()
                sys.exit()
        pygame.display.update()
        # 让游戏按FPS帧率运行,FPS默认为30帧
        _fps_Clock.tick(FPS)


if __name__ == '__main__':
    pygame_run()

效果如下:

三、制作矩形移动动画

        好了,矩形画出来了,但矩形现在还是静止的,怎么才能动起来了?这就需要在Pygame的循环当中不断的改变矩形的位置,也就是矩形对象的top,left值。

        不断改变矩形位置的代码如下,其中pygame.Rect(260,220,220,95)改成pygame.Rect(480

220,220,95)让矩形一开始处于右侧画面之外,接着在循环中加入if _select_rect.left != 260判断语句,当向左移动至left=260像素处跳出循环停止移动。还没到260就执行_select_rect.left =

_select_rect.left - 5每帧向左移动5个像素点。

# 对战面板,显示设置
_select_rect = pygame.Rect(480, 220, 220, 95)
while True:
    # 填充背景为白色
    _display_surf.fill(WHITE)
    # 画矩形
    pygame.draw.rect(_display_surf, BLACK, _select_rect, 1)
    #控制矩形向左移动
    if _select_rect.left != 260:
        _select_rect.left = _select_rect.left - 5

        效果如下:

四、使用Pygame显示游戏文本

        有了矩形,我们还需要在矩形上面显示文字,比如选择面板就需要显示战斗、背包、精灵、逃跑四组文件。这里使用Pygame的font类,设置字体类型、字体大小、字体显示位置,最后显示在面板中。

        Pygame显示文本的代码如下,其中

import pygame, sys
from pygame.locals import *

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)

# 战斗,文字显示设置
_font_type = pygame.font.match_font('Microsoft YaHei')
_select_font_1 = pygame.font.Font(_font_type, 30)
_select_font_1_surf_obj = _select_font_1.render("战斗", True, BLACK, None)
_select_font_1_rect = _select_font_1_surf_obj.get_rect()
_select_font_1_rect.left = 260
_select_font_1_rect.top = 220
while True:
    # 填充背景为白色
    _display_surf.fill(WHITE)
    #
    _display_surf.blit(_select_font_1_surf_obj, _select_font_1_rect)
    #
    pygame.display.update()

效果如下:

        

五、使用Pygame加载图片

        选择面板和状态面板效果做好了,现在就差精灵的贴图了,战斗画面有两个地方需要图片,确定好位置和图片大小后我们就可以使用Pygame的...加载图片,显示图片

        Pygame加载图片、显示图片的代码如下

import pygame, sys
from pygame.locals import *

WHITE = (255, 255, 255)


# 敌方精灵贴图显示设置
_ord_pym_img = pygame.image.load('dog1.png')
_ord_pym_img_top = 20
_ord_pym_img_left = 320

while True:
    # 填充背景为白色
    _display_surf.fill(WHITE)
    # 
    _display_surf.blit(_ord_pym_img, (_ord_pym_img_left, _ord_pym_img_top))
    #
    pygame.display.update()

        效果如下:

六、完整源码

        好了最后补上血条和动画就OK了,下一篇尝试制作攻击动画,有兴趣的可以一起研究一下。

源码下载↓↓↓

PythonPygame实现宝可梦对战场面-Python文档类资源-CSDN下载宝可梦游戏是小时候最喜欢的掌机游戏之一,印象最深刻的是宝可梦(黄)、宝可梦(金、银)还有红蓝宝石。游更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq616491978/86404819

import pygame, sys
from pygame.locals import *

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
FPS = 1
_fps_Clock = pygame.time.Clock()


def pygame_run():
    pygame.init()
    _display_surf = pygame.display.set_mode((480, 320))
    pygame.display.set_caption('py梦')
    _font_type = pygame.font.match_font('Microsoft YaHei')

    # 敌方精灵状态,文字显示
    _ord_pym_rect = pygame.Rect(-260, 0, 220, 50)
    # 敌方精灵名字,文字显示设置
    _ord_pym_name = pygame.font.Font(_font_type, 16)
    _ord_pym_name_surf_obj = _ord_pym_name.render("lv10:它狗", True, BLACK, None)
    _ord_pym_name_rect = _ord_pym_name_surf_obj.get_rect()
    _ord_pym_name_rect.left = -200
    _ord_pym_name_rect.top = 0
    # 敌方精灵血量,文字显示设置
    _ord_pym_blood = pygame.font.Font(_font_type, 16)
    _ord_pym_blood_surf_obj = _ord_pym_blood.render("血量:----------[69/69]", True, BLACK, None)
    _ord_pym_blood_rect = _ord_pym_blood_surf_obj.get_rect()
    _ord_pym_blood_rect.left = -200
    _ord_pym_blood_rect.top = 20
    # 敌方精灵贴图显示设置
    _ord_pym_img = pygame.image.load('dog1.png')
    _ord_pym_img_top = 20
    _ord_pym_img_left = 320+220

    # 我方精灵状态,文字显示设置
    _my_pym_rect = pygame.Rect(260, 170, 220, 50)
    # 我方精灵名字,文字显示设置
    _my_pym_name = pygame.font.Font(_font_type, 16)
    _my_pym_name_surf_obj = _my_pym_name.render("lv18:我狗", True, BLACK, None)
    _my_pym_name_rect = _my_pym_name_surf_obj.get_rect()
    _my_pym_name_rect.left = 480
    _my_pym_name_rect.top = 170
    # 我方精灵血量,文字显示设置
    _my_pym_blood = pygame.font.Font(_font_type, 16)
    _my_pym_blood_surf_obj = _my_pym_blood.render("血量:----------[99/99]", True, BLACK, None)
    _my_pym_blood_rect = _my_pym_blood_surf_obj.get_rect()
    _my_pym_blood_rect.left = 480
    _my_pym_blood_rect.top = 190
    # 我方精灵贴图显示设置
    _my_pym_img = pygame.image.load('dog2.png')
    _my_pym_img_top = 80
    _my_pym_img_left = 20-220

    # 对战面板,显示设置
    _select_rect = pygame.Rect(480, 220, 220, 95)
    # 战斗,文字显示设置
    _select_font_1 = pygame.font.Font(_font_type, 30)
    _select_font_1_surf_obj = _select_font_1.render("战斗", True, BLACK, None)
    _select_font_1_rect = _select_font_1_surf_obj.get_rect()
    _select_font_1_rect.left = 480
    _select_font_1_rect.top = 220
    # 道具,文字显示设置
    _select_font_2 = pygame.font.Font(_font_type, 30)
    _select_font_2_surf_obj = _select_font_2.render("道具", True, BLACK, None)
    _select_font_2_rect = _select_font_2_surf_obj.get_rect()
    _select_font_2_rect.left = 580
    _select_font_2_rect.top = 220
    # 精灵,文字显示设置
    _select_font_3 = pygame.font.Font(_font_type, 30)
    _select_font_3_surf_obj = _select_font_3.render("精灵", True, BLACK, None)
    _select_font_3_rect = _select_font_3_surf_obj.get_rect()
    _select_font_3_rect.left = 480
    _select_font_3_rect.top = 270
    # 逃跑,文字显示设置
    _select_font_4 = pygame.font.Font(_font_type, 30)
    _select_font_4_surf_obj = _select_font_4.render("逃跑", True, BLACK, None)
    _select_font_4_rect = _select_font_4_surf_obj.get_rect()
    _select_font_4_rect.left = 580
    _select_font_4_rect.top = 270
    while True:
        _display_surf.fill(WHITE)
        pygame.draw.rect(_display_surf, BLACK, _select_rect, 1)
        pygame.draw.rect(_display_surf, WHITE, _my_pym_rect, 0)
        _display_surf.blit(_ord_pym_img, (_ord_pym_img_left, _ord_pym_img_top))
        _display_surf.blit(_my_pym_img, (_my_pym_img_left, _my_pym_img_top))
        _display_surf.blit(_ord_pym_name_surf_obj, _ord_pym_name_rect)
        _display_surf.blit(_ord_pym_blood_surf_obj, _ord_pym_blood_rect)
        _display_surf.blit(_my_pym_name_surf_obj, _my_pym_name_rect)
        _display_surf.blit(_my_pym_blood_surf_obj, _my_pym_blood_rect)
        _display_surf.blit(_select_font_1_surf_obj, _select_font_1_rect)
        _display_surf.blit(_select_font_2_surf_obj, _select_font_2_rect)
        _display_surf.blit(_select_font_3_surf_obj, _select_font_3_rect)
        _display_surf.blit(_select_font_4_surf_obj, _select_font_4_rect)
        if _select_rect.left != 260:
            _select_rect.left = _select_rect.left - 5
            _select_font_1_rect.left = _select_font_1_rect.left - 5
            _select_font_2_rect.left = _select_font_2_rect.left - 5
            _select_font_3_rect.left = _select_font_3_rect.left - 5
            _select_font_4_rect.left = _select_font_4_rect.left - 5
            _my_pym_name_rect.left = _my_pym_name_rect.left - 5
            _my_pym_blood_rect.left = _my_pym_blood_rect.left - 5

            _ord_pym_name_rect.left = _ord_pym_name_rect.left + 5
            _ord_pym_blood_rect.left = _ord_pym_blood_rect.left + 5

            _ord_pym_img_left = _ord_pym_img_left - 5
            _my_pym_img_left = _my_pym_img_left + 5
        for _event in pygame.event.get():
            if _event.type == QUIT:
                pygame.quit()
                sys.exit()
        pygame.display.update()
        _fps_Clock.tick(FPS)


if __name__ == '__main__':
    pygame_run()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pygame 实现宝可梦对战场面 的相关文章

随机推荐

  • shell 脚本中wait命令以及多进程库wait()原语的使用

    一 脚本源码 compute it 1 gt compute it 1 out compute it 2 gt compute it 2 out wait cat compute it 1 out cat compute it 2 out
  • 解决Spyder无法自动补全某些代码的问题

    今天在Spyder发现按tab代码无法自动补全 网上的方法全部试过了 如在ipython里面勾选greedy completion 和autocall选full 删除enum34 我根本就没有这个包 安装rope 安装正确版本的jedi和p
  • JAVA this关键字的使用(JacKing)

    1 对当前对象的引用 public class Leaf int i 0 Leaf increment i return this void print System out println i i public static void m
  • Unity3d trial version 水印

    使用个人免费版发布安卓手机版包 屏幕右下角显示 trial version 水印 解决办法 1 免费版Unity Hub 使用国外网络刷新证书 2 使用付费版Unity Hub
  • 美团笔试-回转寿司

    小美请小团吃回转寿司 转盘上有N盘寿司围成一圈 第1盘与第2盘相邻 第2盘与第3盘相邻 第N 1盘与第N盘相邻 第N盘与第1盘相邻 小团认为第i盘寿司的美味值为A i 可能是负值 如果小团讨厌这盘寿司 现在 小团要在转盘上选出连续的若干盘寿
  • Qt网络编程之实例一GET方式

    看了两天的Qt网络编程 其实主要就是看了看QNetworkAccessManager QNetworkRequest和QNetworkReply这三个类的主要内容 在之前 Qt网络编程主要是使用QHttp等类 但是现在在帮助手册中这些类已经
  • 2022年2月6日--2月12日(ue智慧城市3,4周,本周10小时,合计1929小时,剩余8071小时)

    目前 ue视频教程进行到了智 慧 城 市 3 11 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 socket 2 57 Opengl 5 9 GLSL 2 1
  • 汇编ret ,retf ,iret ,int指令详解

    ret指令 执行过程 ret指令用栈中的数据 修改IP的值 从而实现近转移 CPU执行ret指令时 进行下面两步操作 IP SS 16 SP SP SP 2 另一种用法 ret n n为整数 等效于 IP SS 16 SP SP SP 2
  • mysql索引的使用和讲解

    索引概述 索引是一个数据结构 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就
  • 大数据毕设项目 基于python 爬虫 flask的疫情数据可视化系统

    文章目录 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3 2 Dja
  • 谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架

    文章目录 商品上架 ES数据模型 上架流程 mybatis之foreach用法 TypeReference Feign调用流程 商品上架 后台管理员对spu审核进行操作 点击上架 只有当商品上架才应该被检索 即需要导入商品数据到ES中 请求
  • 神经网络是算法还是模型,神经网络 图像相似度

    神经网络的准确率是怎么计算的 其实神经网络的准确率的标准是自己定义的 我把你的例子赋予某种意义讲解 1 期望输出 1 0 0 1 每个元素代表一个属性是否存在 像着4个元素分别表示 是否肺炎 是否肝炎 是否肾炎 是否胆炎 1表示是 0表示不
  • 知乎:1.03亿月活用户,获得感战略下的内容质量和商业化布局难平衡

    点击上方蓝字关注我们 分析知乎财报 聊聊以下几点问题 知乎主要靠什么赚钱 知乎的收入来源 知乎在商业化方面做了那些探索 知乎的产品规划 玩过知乎的朋友 一定看到过以下短句 谢邀 人在美国 刚下飞机 圈内熟人太多 利益相关 匿了 在知乎回答中
  • 计算机防火墙不能更改,win7无法更改防火墙设置提示系统报错怎么办

    防火墙也称防护墙 是一种位于内部网络与外部网络之间的网络安全系统 可以防止病毒入侵 有位 Win7系统 用户想更改防火墙某些设置 出现无法更改的情况 系统报错 0x80074200 怎么办呢 下面小编告诉大家两种解决win7无法更改防火墙设
  • Qt实现单击或双击QTableWidge/View表头进行排序

    先看效果图 点击一次对应列进行降序 再点击一次进行升序 分别对应图1 图2 实现代码 构造函数中设置了一个sign以及关联对应的信号 双击表头的信号为sectionDoubleClickClicked m sign true 设置一个标志位
  • cpu中的MMU的作用

    虚拟内存与物理内存之间的映射 用户空间映射到物理内存是独立的 提高安全性 修改内存访问级别 0是最高级
  • 通过python控制GDB进行调试

    最近需要对自己开发RISC V Server调试器进行稳定性测试 所以需要通过使用自动化脚本进行测试 这里想通过Python编写脚本来控制GDB进行稳定性测试 Python中有一个库pygdbmi 代码如下 from pygdbmi gdb
  • crypto-js 前端DES加密/解密、生成秘钥 详解

    DES概述 DES全称为Data Encryption Standard 即数据加密标准 是一种使用密钥加密的块算法 1977年被美国联邦政府的国家标准局确定为联邦资料处理标准 FIPS 并授权在非密级政府通信中使用 随后该算法在国际上广泛
  • ts250服务器开启虚拟,ts250服务器恢复系统

    ts250服务器恢复系统 内容精选 换一换 数据分布问题简述分布式产生的根源是 规模 规模可理解为计算和存储的需求 当单机能力无法承载日益增长的计算存储需求时 就要寻求对系统的扩展方法 通常有两种扩展方式 提升单机能力 scale up 增
  • Python Pygame 实现宝可梦对战场面

    宝可梦游戏是小时候最喜欢的掌机游戏之一 印象最深刻的是宝可梦 黄 宝可梦 金 银 还有红蓝宝石 游戏的设计很出色 画面精致 可以说是是掌机时代的代表了 本篇文章使用Pygame实现宝可梦的战斗场景 重温经典 目录 一 游戏效果展示 二 使用