利用pygame模块制作RPG游戏(一)

需要用到的第三方库:pygame

一.构造游戏的基本框架

1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等。
图片均用png格式,音乐音效均用ogg格式


2.主函数代码框架
(1)pygame.init() 初始化pygame,为使用硬件做准备
(2)游戏窗口创建:
①窗口屏幕: screen=pygame.display.set_mode((宽,高)) 二维元组 #创建出来的窗口左上角是(0,0)右下角是(宽,高)
②窗口标题:pygame.display.set_caption(“标题”)
(3)载入图像与背景音乐:
backgroud=pygame.image.load(r"图像地址").convert_alpha() 创建一个surface对象,“.convert_alpha()”保留png图片的alpha通道信息
pygame.mixer.music.load(“xx.ogg”) 载入ogg格式音乐
pygame.mixer.music.set_volume(音量) 设置音量 (数值0到1.0)
pygame.mixer.music.play() 播放音乐
(4)创建时钟对象:fps=pygame.time.Clock() 可以控制游戏循环频率
(5)while True框架 : 游戏运行的主循环,每一次循环即为一帧,每一帧的图像移动变换,键盘鼠标事件,屏幕刷新都在此框架中实现
(6)显示图像:screen.blit(surface对象,位置元组):将surface对象的左上角放置在指定位置
(7)刷新屏幕:pygame.display.flip() 将屏幕重新刷新为无图像显示,否则前一帧的图像会和后一帧的图像同时显示
(8)设定帧率:fps.tick(帧数) 设定帧数,设定循环以每秒多少帧运行

import pygame
def main():pygame.init()fps=pygame.time.Clock()screen=pygame.display.set_mode((1240,825))pygame.display.set_caption("RPG游戏")backgroud=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\地形\室内.png").convert_alpha()music=pygame.mixer.music.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\音乐\室内1.ogg")pygame.mixer.music.set_volume(0.3)pygame.mixer.music.play()while True:screen.blit(backgroud,(0,0))pygame.display.flip()fps.tick(60)
main()

程序运行结果如下:

二.事件和人物对象

1.准备人物每一帧动作图片(带有alpha通道)的素材

2.创建人物类
将所有动作图像创建surface对象

class Player():def __init__():self.rd0=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown0.png").convert_alpha()self.rd1=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown1.png").convert_alpha()self.rd2=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown2.png").convert_alpha()self.rd3=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown3.png").convert_alpha()self.rd4=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown4.png").convert_alpha()self.rd5=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_rundown5.png").convert_alpha()self.rl0=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft0.png").convert_alpha()self.rl1=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft1.png").convert_alpha()self.rl2=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft2.png").convert_alpha()self.rl3=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft3.png").convert_alpha()self.rl4=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft4.png").convert_alpha()self.rl5=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runleft5.png").convert_alpha()self.rr0=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright0.png").convert_alpha()self.rr1=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright1.png").convert_alpha()self.rr2=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright2.png").convert_alpha()self.rr3=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright3.png").convert_alpha()self.rr4=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright4.png").convert_alpha()self.rr5=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runright5.png").convert_alpha()self.ru0=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup0.png").convert_alpha()self.ru1=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup1.png").convert_alpha()self.ru2=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup2.png").convert_alpha()self.ru3=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup3.png").convert_alpha()self.ru4=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup4.png").convert_alpha()self.ru5=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_runup5.png").convert_alpha()self.sd=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_standdown.png").convert_alpha()self.sr=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_standright.png").convert_alpha()self.sl=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_standleft.png").convert_alpha()self.su=pygame.image.load(r"H:\Python自制游戏\pygame\14.RPG像素竖屏游戏开发\素材\人物\link_standup.png").convert_alpha()

3.让人物移动
(1)事件:
from pygame.locals import*
pygame可以响应键盘鼠标事件,主要有:
QUIT 按下关闭按钮 参数: none
KEYDOWN 键盘被按下 参数: unicode, key, mod
KEYUP 键盘被放开 参数:key, mod
MOUSEMOTION 鼠标移动 参数: pos, rel, buttons
MOUSEBUTTONDOWN 鼠标按下 参数: pos, button
MOUSEBUTTONUP 鼠标放开 参数 :pos, button
获取事件:for event in pygame.event.get():
事件类型:event.type
获取按键:event.key 如按下 “a ” event.key==K_a
以上事件只能获得按下和放开一瞬间的事件,不能用于移动人物
获取被按住的键盘:kp=pygame.key.get_pressed()
当某个键(如a)被按下时,kp[K_a]==1
利用if条件语句可以实现人物移动

(2)人物移动:
人物移动的方法:在按下某个按键后,人物surface对象的位置±速度,使位置向按键方向变化
定义 move(self,keyup): 方法,使用pygame.key.get_pressed() 获取被按住的按键事件,变化并移动图像.
for event in pygame.event.get() 放入主循环中来获取瞬间按键事件,将key传入 move(self,keyup) 中,用于判断移动完成瞬间人物站立的方向
为了方便在人物移动时载入不同图像,将图像对象装入列表中,move()方法里用self.picnum%6循环访问列表,当访问到最后一个时回到第一个开始重新访问

import pygame
from pygame.locals import*
import sys
class Player():def __init__(self):......#省略......self.rd=[self.rd0,self.rd1,self.rd2,self.rd3,self.rd4,self.rd5]self.ru=[self.ru0,self.ru1,self.ru2,self.ru3,self.ru4,self.ru5]self.rr=[self.rr0,self.rr1,self.rr2,self.rr3,self.rr4,self.rr5]self.rd=[self.rl0,self.rl1,self.rl2,self.rl3,self.rl4,self.rl5]self.pos=[600,400] #初始化人物位置self.speed=5 #初始化人物移动速度self.pic=self.sd #初始化人物图像def move(self,keyup):kp=pygame.key.get_pressed()if kp[K_a]:self.picnum+=1self.picnum=self.picnum%6self.pos[0]=self.pos[0]-self.speedself.pic=self.rl[self.picnum]elif kp[K_d]:self.picnum+=1self.picnum=self.picnum%6self.pos[0]=self.pos[0]+self.speedself.pic=self.rr[self.picnum]elif kp[K_s]:self.picnum+=1self.picnum=self.picnum%6self.pos[1]=self.pos[1]+self.speedself.pic=self.rd[self.picnum]elif kp[K_w]:self.picnum+=1self.picnum=self.picnum%6self.pos[1]=self.pos[1]-self.speedself.pic=self.ru[self.picnum]if keyup:if keyup==K_a:self.picnum=0self.pic=self.slif keyup==K_d:self.picnum=0self.pic=self.srif keyup==K_w:self.picnum=0self.pic=self.suif keyup==K_s:self.picnum=0self.pic=self.sd
def main():
......#省略
......
link=Player() #实例化主角
keydown=""
keyup="" #初始化按键
while True:for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit() #防止程序卡死if event.type==KEYDOWN:keydown=event.keyelse:keydown=Noneif event.type==KEYUP:keyup=event.keyelse:keyup=Nonelink.move(keyup)screen.blit(backgroud,(0,0))screen.blit(link.pic,(link.pos[0],link.pos[1]))pygame.display.flip()fps.tick(60)
main()

》》》注意最后显示图片的顺序,先显示下层图层在显示上层 ,因此先blit背景再blit主角
程序运行如下

人物模型素材太小,解决方法:
pygame.transform.smooth(character,(宽,高) 可以变化surface对象的大小。在screen.blit 前加上:link_rect=link.pic.get_rect() # surface.get_rect() 可以获得surface对象的四个顶点的相对位置(以surface左上点为原点)
然后再将显示主角图像的blit里的link.pic 改为 pygame.transform.smoothscale(link.pic,(int(link_rect[2])*3,int(link_rect[3])*3)) ,将图像放大三倍

     link_rect=link.pic.get_rect()screen.blit(backgroud,(0,0))screen.blit(pygame.transform.smoothscale(link.pic,(int(link_rect[2])*3,int(link_rect[3])*3)),(link.pos[0],link.pos[1]))pygame.display.flip()fps.tick(60)

更正后运行结果为

至此,游戏的基本框架和人物移动已经实现,接下来将在 Python——利用pygame模块制作RPG游戏(二) 中 实现UI界面,场景切换,人物攻击等程序功能。

Python——利用pygame模块制作RPG游戏(一)相关推荐

  1. 用python的pygame模块制作弹球小游戏

    首先那,需要安装pygame模块,大约300行代码就可以做一个小游戏 在命令提示窗口中输入:pip install pygame 如果不安装模块,呵呵, github下载: https://githu ...

  2. pip install pygame_使用 Python 和 Pygame 模块构建一个游戏框架!

    这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...

  3. pygame为游戏添加背景_万能的Python和Pygame模块构建一个游戏框架

    通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示 ...

  4. python pygame模块怎么写游戏_使用 Python 和 Pygame 模块构建一个游戏框架

    这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...

  5. pygame为游戏添加背景_为游戏添加背景使用Python和Pygame模块构建一个游戏框架

    这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...

  6. python游戏脚本实例-Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框――由10*20个空格组成,方块就落在这里面. 盒子――组成方块的其中小方块,是组成方块的基本单元. 方块――从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  7. 【Python游戏】pygame模块制作飞机大战、贪吃蛇(多模式)含源码

    pygame模块制作飞机大战.贪吃蛇(多版本) 本章意在学习pygame模块以及巩固python语法. 若有需请转去个人github:https://github.com/onlyhyl/pyGame

  8. Python零基础快速制作足球游戏

    Python零基础快速制作足球游戏 前言 卡塔尔世界杯正是进行得火热,十六强队伍已经诞生,后面就是越来越紧张的争夺八强的淘汰赛.目前爆冷的赛果让球迷一度情绪失落,比如:日本2-1战胜西班牙,韩国2-1 ...

  9. #用python的pygame写一个大富翁游戏(单机版)# 一 : 初步架构

    用python写一个简易大富翁小游戏 | 一 : 初步架构 系列文章: #用python的pygame写一个大富翁游戏(单机版)# 二:地图初始化 如题,俗话说得好,人生苦短,我用python,在大二 ...

最新文章

  1. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...
  2. 可视化生信分析利器 Galaxy 之 Docker 开发
  3. python爬虫 - Urllib库及cookie的使用
  4. c语言书籍elf文件,扒一扒ELF文件
  5. hibernate多对一单向外键
  6. 收藏:flex/flash
  7. Linux操作系统监视NVIDIA的GPU使用情况
  8. C#开发笔记之09-如何用C#判断社会信用代码是否合法?
  9. VB讲课笔记11:多重窗体与环境应用
  10. 洛谷 P2089 烤鸡
  11. Android 蓝牙音箱开发
  12. Calendar类你可能不知道的坑
  13. 海贼王剧场版:Z 剧情详解(附TS无字幕版地址)
  14. 深信服 SANGFOR 设备密码恢复和配置备份恢复
  15. Linux私房菜--第三章 主机规划和磁盘分区
  16. python经典实例应用_《Python经典实例(图灵出品)》([美]史蒂文·F.洛特)【摘要 书评 试读】- 京东图书...
  17. 前端技巧培训-后台战友快速入门
  18. nodejs中cmd命令大全
  19. 解决Waiting for incoming connection with ide key xdebug错误
  20. 用combobox计算价钱_冷水机组价钱_宏晟博源

热门文章

  1. 大学生数学建模优秀论文发表
  2. 【电子学会】2019年09月图形化三级 -- 猫咪抓老鼠游戏
  3. 国内ip地址 透明代理
  4. C# 中的CTS、ClS、ClR的用途
  5. 数据库管理系统(DBMS)的功能
  6. MindManager思维导图2020中文版免费,IT行业知识思维导图
  7. 暴光史上最强的女生勾引男生的方法
  8. #pragma multi_compile_fwdbase
  9. 基于区块链的数据共享访问控制模型
  10. 何恺明霸榜!近10年里的具有影响力的一作(年轻)AI学者大盘点!谷歌机构排名第一!...