Python Pygame 实现宝可梦对战场面

news/2024/11/15 4:29:37/

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

        本篇文章使用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 = 320while 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 = 270while 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 + 5for _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()


http://www.ppmy.cn/news/679658.html

相关文章

学python兼职赚钱是真的吗,学python做兼职赚钱吗....

学好Python可以做什么兼职 学会python可以做的兼职: 1、爬虫 首先,除了Python的语法基础的之外的必修课就是web开发和爬虫的内容了。如果是想依靠这两个方向来赚钱的话,就必须要清楚的知道开发什么或者爬什么数据才能赚钱。 如果你都不知…

CSDN如何赚积分及C币

下载积分攻略: 1. 个人设置里进行手机绑定CSDN账户 奖励50分 (右上角设置-账户安全-手机绑定) 2. 完成任务送若干分积分 http://task.csdn.net/ 3. 上传有效资源获取积分(上传非法,广告资源用户,将被扣…

【python实战】用pygame做个贪吃蛇游戏

嗨,大家好,我是一条。 告诉大家一个好消息,一条IT访问量突破20w,达到申请博客专家的条件。感谢大家的支持,一条会创作更多的优质内容。 为了让更多的人看到一条的分享,一条准备报名原力计划,报…

QT翻金币小游戏 总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 遇到问题 遇到问题 Qt中控件中文不能显示的问题 添加 #pragma execution_character_set(“utf-8”) ,重新编译执行,即可解决 有的金币按钮…

CSDN 赚积分C币方法

于2022-12-25补充 下载积分规则(2022-12-25) 项目名称获得细则积分数量普通资源被下载100分封顶,下载自己资源无积分资源分*下载量 C币使用规则(2022-12-25) 1. 官方赠送的C币有效期为一年(到账后一年内…

【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】

Python制作坤坤打篮球小游戏 序言准备工作开发环境 效果预览开始界面游戏规则结束游戏 代码实现 序言 话说在前面,我不是小黑子~ 我是超级大黑子😏 表弟大周末的跑来我家,没事干天天骚扰我,搞得我都不能跟小姐姐好好聊天了&…

Q妹带你赚外快:改bug赚赏金,日入百元小意思

哈喽,大家好,我是你们的 必问 福利菌Q妹 经常有小哥哥问Q妹,除了写代码,程序员还有哪些副业可以做呢? 每每这个时候,我都会推荐他去必问平台,随时随地答题就能赚点小费!话不多说&am…

python真的能赚钱吗,学python可以赚钱吗

Python都可以做哪些副业? 1、兼职处理数据Excel整理数据功能虽然很强大,但在Python面前,曾经统治职场的它也的败下阵来。因为Python在搜集数据整理分析数据的过程中更加便捷,通过几行代码还可以实现自动化操作。 如果你学会Pyth…