Python——利用pygame模块制作RPG游戏(一)
利用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游戏(一)相关推荐
- 用python的pygame模块制作弹球小游戏
首先那,需要安装pygame模块,大约300行代码就可以做一个小游戏 在命令提示窗口中输入:pip install pygame 如果不安装模块,呵呵, github下载: https://githu ...
- pip install pygame_使用 Python 和 Pygame 模块构建一个游戏框架!
这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...
- pygame为游戏添加背景_万能的Python和Pygame模块构建一个游戏框架
通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示 ...
- python pygame模块怎么写游戏_使用 Python 和 Pygame 模块构建一个游戏框架
这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...
- pygame为游戏添加背景_为游戏添加背景使用Python和Pygame模块构建一个游戏框架
这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...
- python游戏脚本实例-Python使用pygame模块编写俄罗斯方块游戏的代码实例
文章先介绍了关于俄罗斯方块游戏的几个术语. 边框――由10*20个空格组成,方块就落在这里面. 盒子――组成方块的其中小方块,是组成方块的基本单元. 方块――从边框顶掉下的东西,游戏者可以翻转和改变位 ...
- 【Python游戏】pygame模块制作飞机大战、贪吃蛇(多模式)含源码
pygame模块制作飞机大战.贪吃蛇(多版本) 本章意在学习pygame模块以及巩固python语法. 若有需请转去个人github:https://github.com/onlyhyl/pyGame
- Python零基础快速制作足球游戏
Python零基础快速制作足球游戏 前言 卡塔尔世界杯正是进行得火热,十六强队伍已经诞生,后面就是越来越紧张的争夺八强的淘汰赛.目前爆冷的赛果让球迷一度情绪失落,比如:日本2-1战胜西班牙,韩国2-1 ...
- #用python的pygame写一个大富翁游戏(单机版)# 一 : 初步架构
用python写一个简易大富翁小游戏 | 一 : 初步架构 系列文章: #用python的pygame写一个大富翁游戏(单机版)# 二:地图初始化 如题,俗话说得好,人生苦短,我用python,在大二 ...
最新文章
- 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...
- 可视化生信分析利器 Galaxy 之 Docker 开发
- python爬虫 - Urllib库及cookie的使用
- c语言书籍elf文件,扒一扒ELF文件
- hibernate多对一单向外键
- 收藏:flex/flash
- Linux操作系统监视NVIDIA的GPU使用情况
- C#开发笔记之09-如何用C#判断社会信用代码是否合法?
- VB讲课笔记11:多重窗体与环境应用
- 洛谷 P2089 烤鸡
- Android 蓝牙音箱开发
- Calendar类你可能不知道的坑
- 海贼王剧场版:Z 剧情详解(附TS无字幕版地址)
- 深信服 SANGFOR 设备密码恢复和配置备份恢复
- Linux私房菜--第三章 主机规划和磁盘分区
- python经典实例应用_《Python经典实例(图灵出品)》([美]史蒂文·F.洛特)【摘要 书评 试读】- 京东图书...
- 前端技巧培训-后台战友快速入门
- nodejs中cmd命令大全
- 解决Waiting for incoming connection with ide key xdebug错误
- 用combobox计算价钱_冷水机组价钱_宏晟博源