# cpgzhelper **Repository Path**: shanzhig/cpgzhelper ## Basic Information - **Project Name**: cpgzhelper - **Description**: 基于pgzhelper的一个助手工具。 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2021-12-20 - **Last Updated**: 2021-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cpgzh ## 介绍 本作品是基于一个新加坡老师的[pgzhelper](https://www.aposteriori.com.sg/pygame-zero-helper/)的一个助手工具,增加了一些功能方便国内用户使用,可以参考下面的链接: **pgzhelper**官网地址:[https://www.aposteriori.com.sg/pygame-zero-helper/](https://www.aposteriori.com.sg/pygame-zero-helper/) **黄复雄**老师翻译文档地址:[https://zhuanlan.zhihu.com/p/347855713](https://zhuanlan.zhihu.com/p/347855713) ## 当前功能列表 1. 创建延时任务和切换动画 2. 输入框等杂项功能,增加游戏界面的交互功能、数据存储功能 3. 整合绘图命令,接口更加统一 4. 便捷的字体造型,写字不再繁琐,使用微软雅黑字体默认支持中文 5. 导入了pgzero常见的功能,编写游戏时候从cpgzh中导入相关东西即可 ## 软件架构 基于pgzero、pgzhelper和guizero。 ## 安装教程 1. 使用pip安装即可:`pip3 install cpgzh` ## 使用说明 使用方法和pgzero基本相同,多了几个方法而已,下面对我增加的功能进行介绍,其他的移步[官网](https://www.aposteriori.com.sg/pygame-zero-helper/)或者[黄复雄老师的文档](https://zhuanlan.zhihu.com/p/347855713)即可。 ### 一、创建延迟任务和切换动画 这些功能都是封装在`Actor`类当中的。 #### 一)、延时任务 ```python import pgzrun from cpgzh import Actor jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400)) jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]# 绑定造型列表,根据你的素材来吧 jisi.is_animate=0# 关闭自动动画 jisi.create_delay_tasks(jisi.next_image, seconds=1, times=10)# 延迟1秒下一个造型,重复10次 def update(): jisi.run_tasks()# 运行计划任务 def draw(): jisi.draw() pgzrun.go() ``` 1. 使用`from cpgzh import Actor`代替`from pgzero.actor impoty Actor`来导入演员类; 2. 创建演员`jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400))`; 3. `jisi.create_delay_tasks(task, seconds=1, times=1)`方法能够创建一个延迟执行的任务,task为要做的事。seconds为延迟的时间,默认为1s。times是这个任务要执行的次数,默认为1次; 4. 在`update`函数中调用`jisi.run_tasks()`方法; #### 二)、自动切换造型 ```python from cpgzh import Actor jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400)) jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]# 绑定造型列表,根据你的素材来吧 def update(): jisi.run_tasks()# 运行计划任务 def draw(): jisi.draw() ``` 1. 使用`jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]`给`jisi`角色绑定要切换的造型; 2. 在`update`函数中调用`jisi.run_tasks()`方法。默认会将`jisi.animate()`方法在`jisi.run_tasks()`方法中调用,也就是默认是角色切换造型的姿态。当然你也可以在`update`函数中手动调用`jisi.animate()`方法即可自动切换造型; 3. 设置`jisi.animate_fps`可以获取或设置切换造型的速度,默认为每秒钟切换10次,如果要切换100次就设置100即可:`jisi.animate_fps=100`; 4. 如果要停止造型的切换有两种方法: a. 只需要将`jisi.animate_fps`设置为0即可:`jisi.animate_fps=0`; b. 使用`jisi.is_animate`设置为0即可:`jisi.is_animate=0`,这种方法不影响设置好的角色切换造型的fps。 5. 还提供一个方法:`jisi.toggle_animate()`,如果角色在切换造型,这个方法就会停止切换,反之将会开始切换。 ### 二、输入框等杂项功能 增加了一系列功能,包括输入、切换全屏、加载和保存数据等等,他们都封装在`Master`类当中,以键盘按下执行一些功能示例如下: ![](img/1.png) ```python #实例化管家 from cpgzh import Master master=Master()#实例化的时候可以直接传递存档位置作为参数 def on_key_down(key): '当键盘按下' # 设置全屏化 if key == keys.A: master.set_fullscreen() # 设置窗口化 elif key == keys.B: master.set_windowed() # 切换全屏和窗口化 elif key == keys.C: master.toggle_fullscreen() # 隐藏鼠标 elif key == keys.D: master.hide_mouse() # 显示鼠标 elif key == keys.E: master.show_mouse() # 输入文本 elif key == keys.F: text = master.input('请输入一个名字:') print(text) # 选择文件 elif key == keys.G: text = master.select_file('请选择一个文件:') print(text) # 保存文件 elif key == keys.H: text = master.select_file_save('请选择存档保存位置:') print(text) # 选择文件夹 elif key == keys.I: text = master.select_dir('请选择一个文件夹:') print(text) # 是否选择框 elif key == keys.J: text = master.yes_no('是否选择女装?') print(text) # 保存master的数据 elif key == keys.K: master.save_data() # 手动加载存储的数据 elif key == keys.L: #master.data.text = 'test' master.data_path = '测试.dat' master.load_data() # 删除保存的数据 elif key == keys.M: master.del_data() # 设置动画的帧率 elif key == keys.N: fps = master.input('请输入动画切换的速度(每s切换多少次):') jisi.animate_fps = int(fps) # 切换造型是否切换 elif key == keys.O: jisi.toggle_animate() # 提示信息 elif key == keys.P: master.msg('提示:\n你已经换好女装了') # 警告信息 elif key == keys.Q: master.warning('警告:\n今天的女装不太完美') # 错误信息 elif key == keys.R: master.error('错误:\n你还没换好女装') # 游戏开始 elif key == keys.S: master.data.start() # 获取游戏运行时常 elif key == keys.T: print(master.data.get_time()) ``` 需要特殊说明的是,`master`会自带一个数据保存的功能,绑定在`master`的`data`对象上,这个对象可以把绑定在他身上的数据保存到当前的目录,如果不指定`master.dataPath`属性会自动保存在`data.dat`文件中。 默认情况下,`master.data`会有几个默认属性,包括游戏状态、时间、得分,你也可以自行绑定其他属性: ```python class Data: '数据存储类' def __init__(self, data_path) -> None: '数据类' self.status = 0 # 游戏状态\ self.time = 0 # 游戏持续时间 self.score = 0 # 得分 ``` **注意:** 在master类实例化的时候就会自动加载一次存档,所以这里要小心一些,容易出现奇怪的事情。 为了数据的传递方便,`master.data`对象有个`temp`属性,这个属性会自动存放一些数据,比如选择的文件夹,或者输入的数据,也就是说获取输入的内容还可以这样写: ```python master.input('请输入一个名字:') print(master.data.temp) ``` ### 三、整合绘图命令 这些功能都是封装在`Pen`类当中的。 对绘图命令进行了整合,可以更方便快速绘制各种图形。 ![](img/9.png) 使用方法如下: 1、导入并实例化`Pen`类 ```python from cpgzh import Pen pen = Pen() ``` 2、在`draw`函数中绘制想要的图形 ```python def draw(): # 绘制一个点 pen.dot((300, 50), 50, '#ffff00') # 绘制一条线 pen.line((250, 50), (350, 50), '#00ffff', 20) # 绘制圆或者圆环 pen.circle((100, 200), 100, '#ff0000', 20) # 绘制椭圆或者椭圆环 pen.ellipse((300, 200), 200, 100, '#00ff00', 20) # 绘制方块或者方块环 pen.rect((500, 200), 200, 200, '#0000ff', 10, 30) ``` ### 四、便捷的写字和设置字体样式 这些功能都是封装在`Pen`类和`Font`类当中的。 pgzero字体设置比较繁琐,很多时候小伙伴们也不太知道那些个参数都是干啥的,每次写字都要写很多行,太难受了。 所以对字体样式进行了封装,帮大家方便快速写字。 ![](img/10.png) 建议做游戏时候将不同的字体先实例化成不同的对象,到时候用就可以了。 使用方法如下: #### 1、导入和实例化样式 ```python from cpgzh import Font # 导入字体样式类 from cpgzh import pen # 导入画笔 font1 = FontStyle()# 实例化字体样式font1 font1.color='red'# 修改颜色 font2 = FontStyle()# 实例化字体样式font2 font2.color='blue'# 修改颜色 font2.bold=True# 加粗 font2.angle=180# 旋转180度 ``` #### 2、写字 下面的写字代码一定要放在draw函数中。 ```python # 默认样式写字 pen.text('haha', topleft=(200, 400)) # font1样式写字 pen.text('haha', font=font1, center=(200, 450)) # font2样式写字 pen.text('haha', font=font2, center=(200, 500)) ``` `pen`的`text`方法和`textbox`方法功能与pgzero的类似,唯一多了的是多了字体功能,大家如果哪里不明白可以参考pgzero的相关文档。 #### 3、修改样式 我们可以修改font对象的参数,从而改变字体的样子,可以改的字体样式如下(可根据默认值修改): ```python font.bold = None#加粗 font.italic = None# 斜体 font.underline=None# 下划线 font.color = 'black'# 字体颜色 font.gcolor = None# 渐变色 font.ocolor = None# 边框颜色 font.scolor = None# 阴影颜色 font.align = 'left'# 左对齐 font.alpha = 1.0# 不透明度 font.angle = 0# 旋转角度 font.owidth = None# 边框宽度 font.shadow = (0.0,0.0)# 阴影,x方向和y方向 font.fontsize = 30# 字体大小 font.fontname = '宋体'# 字体名字 ``` ### 五、pgzero常用功能从cpgzh中导入即可 如果有些东西从pgzero中导入,有些东西又从cpgzh导入太割裂了,所以进行了修改,下面是一个空白的游戏框架,大家可以参考(会自动加载pgzrun)。 #### 1、最简框架 ```python from cpgzh import * go() ``` 这样就能绘制出一个黑屏。 #### 2、增加绘制角色和更新数据 ```python from cpgzh import * xiaoming=Actor('小明.png') def update(): '更新角色数据' xiaoming.x+=1 def draw(): '把小明绘制在屏幕上' xiaoming.draw() go() ``` 这样我们就能将一个小明绘制在屏幕上。 #### 功能截图: (详见软件仓库,pypi不会显示) ![](img/1.png) ![](img/2.png) ![](img/3.png) ![](img/4.png) ![](img/5.png) ![](img/6.png) ![](img/7.png) ![](img/8.png) ![](img/9.png) ![](img/10.png) **用法详情可以参考`example.py`文件**