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

本篇文章使用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()

Python Pygame 实现宝可梦对战场面相关推荐

  1. c语言精灵宝可梦对战游戏,精灵宝可梦:把游戏中的对战高玩,放到动画的世界里会是什么位置...

    <精灵宝可梦>系列,又名宠物小精灵.神奇宝贝.这可不仅仅是一代人的童年回忆,更是一部无论是游戏还是动漫都真正畅销全世界的作品.特别是游戏系列更是如此,纵观全世界,如果说能有一个游戏让大家有 ...

  2. C++编写的简易宝可梦对战小游戏

    最近想到了用C++写个小时候课间嘴上玩的那种宝可梦游戏,先试写了个demo,只有早期的三个宝可梦和基础招式,感兴趣的朋友可以再自己添加,也没有各种物防特攻数值啥的,等以后会搞图形化界面了再做个复杂的, ...

  3. c语言精灵宝可梦对战游戏,精灵宝可梦究极日月模拟器金手指代码大全

    <精灵宝可梦究极日月>终于迎来了它的发售,相信许多玩家对于这款游戏的素质还是不用怀疑的吧.不过由于游戏的内容实在是太过丰富,许多玩家表示在游戏中许多要素都没法体验尽兴,以下就给大家分享具体 ...

  4. c语言精灵宝可梦对战游戏,精灵宝可梦日月对战攻略推荐大全

    由于雷丘的种族值高于皮卡丘的种族值,所以C的雷丘数值整体都高于皮卡丘,这一点相信各位读到这里就会明白.那么为什么A的皮卡丘和B的皮卡丘种族值相同,在等级相同的时候它们呈现给我们的数值又变得不一样了呢? ...

  5. c语言精灵宝可梦对战游戏,3DS《口袋妖怪XY》对战热门物盾分析

    原标题:3DS<口袋妖怪XY>对战热门物盾分析 在<口袋妖怪xy>中,虽然增加了mega进化,但是在物盾方面来说变化并不是很大,很大精灵依然与口袋妖怪bw世代相似,但是玩法稍有 ...

  6. 把宝可梦搬到终端后,摸鱼也不会被老板发现了,收集对战玩法一应俱全|开源...

    鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 在电脑终端里当上宝可梦大师,是一种怎样的体验? 别说,还真有玩家不满足于在老任家捕捉小精灵,动手把宝可梦游戏搬到了终端里. 玩法那也是像模像样. ...

  7. 宝可梦世界无限极可以玩服务器吗,口袋妖怪世界无极限运行库

    口袋妖怪世界无极限运行库是一款非常好玩的宝可梦游戏,在这里你可以看到各种宝可梦精灵,游戏采用全新的3D引擎打造一个精彩的宝可梦世界,你可以更好的进行自由组队战斗,每一个精灵都有自己独特的能力,还可以在 ...

  8. 个体值0和31差多少攻击_个体值 - 神奇宝贝百科,关于宝可梦的百科全书

    IV重定向至此.如果您在寻找与4有关的信息,请移步004. 个体值(日文︰個体(こたい)値(ち),英文︰Individual values,简称IV)是参与决定每只宝可梦能力的一组数值.个体值与生俱来 ...

  9. 你知道哪个世代的宝可梦最强吗?

    前言 时光荏苒,岁月如梭,宝可梦宝陪伴了我们大多数90后的童年,小编也是比较喜欢宝可梦的,一直到现在出到了第八世代,各种各样的宝可梦让我们大饱眼福. 小编找来了一份宝可梦的数据集,包含了第一世代到第七 ...

最新文章

  1. linux 驱动 内核模式,Linux内核模块和驱动的编写
  2. win10电脑去掉快捷箭头_【搞机作战室】Win10系统电脑 常用快捷方式按键 (快捷键)介绍...
  3. 标准缺失成发展阻碍 智能家居普及之路任重而道远
  4. 问题:linux系统经常出现断网的情况,重启之后系统恢复正常
  5. 内存管理:_CrtDumpMemoryLeaks和_CrtSetBreakAlloc
  6. Moses manual 中Basline System 2.3.4节用IRSTLM创建语言模型的命令有误
  7. 持有至少百万美元钱包本周增至66,540,增长了150%
  8. 前端—每天5道面试题(十)
  9. [BZOJ4811][YNOI2017]由乃的OJ(树链剖分+线段树)
  10. NOIP2018初赛 解题报告
  11. python——字符串
  12. Stream流的方式遍历map,筛选数据
  13. UE4使用MixAmo中的角色与动画
  14. 苹果电脑构建XLua的arm64-v8a、armeabi-v7a、x86等的so库,
  15. 使用HTML5自制视频控件
  16. Entity Framework Fluent API - Relationships
  17. [推荐]php编码规范
  18. 我的小情绪、小失落、小想念
  19. C++三只小猪称体重(比较最大值)
  20. 针对初学者的PID算法教程,以及趣味总结

热门文章

  1. 如何把文件名批量提取出来
  2. js正则验证身份证号码并 根据号码获取生日和性别
  3. android appcompat_v7\res\values-v23错误解决
  4. Neo4j Cypher语言
  5. ipad学习记笔记电子手帐goodnotes和notability教程
  6. 发放2012年4月迅雷vip账号了~!
  7. RichTextbox 操作
  8. 湖北第二师范学院计算机科学与技术排名,2021年湖北第二师范学院专业排行榜,哪个专业就业比较好...
  9. springboot毕设项目电影推荐系统5d97n(java+VUE+Mybatis+Maven+Mysql)
  10. 数据仓库工具之hive(1)