环境

  • easygame需要python3.6及以上的python版本,最好的使用版本为python3.8。
  • easygame不需要联网。
  • easygame需要pygame2.0.1及以上的pygame版本,最好的使用版本为pygame2.0.1。
  • easygame适用于Windows、MacOS、Linux。不同的操作系统,窗口样式会不同。非Windows系统下剪贴板功能可能有误。

下载

使用pip下载:

pip install easygame -i https://pypi.org/project

使用easy-install下载:

easy-install easygame -i https://pypi.org/project

示例

easygame使用pygame为基础类。
对比:

pygame中显示hello world:

import pygame as pg
import sysdef destroy():pg.quit()sys.exit(0)pg.init()
pg.font.init()
screen = pg.display.set_mode((800, 800))
pg.display.set_caption('hello world')
font = pg.font.Font(None, 50)
clock = pg.time.Clock()
fps = 60
while True:clock.tick(fps)text_surface = font.render('hello world', True, (0, 0, 0))screen.blit(text_surface, screen.get_rect().center)for event in pg.event.get():if event.type == pg.QUIT:destroy()elif event.type == pg.KEYDOWN:if event.key == pg.K_ESCAPE:destroy()pg.display.update()

而使用easygame:

import easygame as eg
window = eg.window()
text = eg.Text(window, 'Hello World!', size=50,position=window.rectangle.center)
text.pack()
window.mainloop()

easygame的另一个优点是与tkinter很相似。
easygame对于学习过Scratch的小朋友很适用。

文档

素材安装

使用如下命令安装mblock的图片素材(需要在WIFI环境下,并要等待):

python -m easygame.installer install

使用如下命令卸载mblock的图片素材:

python -m easygame.installer uninstall

安装后使用如下代码获取一个资源:

import easygame as eg
path = eg.get_downloaded_image('Airplane15.svg')
# path = "downloads/Airplane15.svg"

窗口

使用easygame.window创建一个窗口对象:

import easygame as eg
window = eg.window()

eg.window的参数:

window(title='easygame.screen',  # 窗口标题, strsize=(800, 800),   # 窗口大小, Tuple[int, int]full_screen=False,   # 是否全屏, boolfps=70,  # 每秒帧率, intdepth=0,   # 位深, intdisplay=0,   # 媒体, intvsync=0,   # 同步, inticon=None,   # 窗口图标路径,支持png、jpg等等,stricon_title='game',  # 图标标题, strbgcolor=(255, 255, 255)  # 背景色, Tuple[int, int, int]
)

(easygame是白色主题的)

由于easygame使用pygame编写,它对pygame有很好的兼容性。

import easygame as eg
window = eg.window()
surface = window.get_surface()  # 通过get_surface方法获得pygame.Surface的窗口对象

window有一个组件队列window.widgets,在前面的Widget可能被后面的遮挡(Background类永远置于底层)
在0项的组件置于底层,在最后一项的组件置于顶层。

import easygame as eg
window = eg.window()
widget = eg.Widget(window)
widgets = window.widgets  # 获取组件队列(list)
widgets_deque = window.widget_queue  # 获取组件队列(collections.deque)
window.add_widget(widget)  # 添加一个组件,必须为easygame.Widget类或其子类
window.delete_widget(widget)  # 删除一个组件,必须为easygame.Widget类或其子类,从底层开始匹配
window.random_widget()  # 获取随机组件
window.move_widget_to(widget, 0)  # 改变组件图层关系,将组件移动至某层

window有如下标题方法:

import easygame as eg
window = eg.window()
title = window.get_title()  # 获取窗口标题
window.set_title('new title', 'new icon-title')  # 重设窗口标题

window有如下pygame方法:

import easygame as eg
window = eg.window()
window.init()  # 初始化pygame,多次调用安全。在环境变量中"EASY_GAME_INIT"不为空的情况下将自动初始化
window.quit(0)  # 退出pygame和python程序,0为退出状态码。

window有如下Getter属性:

import easygame as eg
window = eg.window()
rect = window.rectangle  # 获取窗口的pygame.Rect对象
center = rect.center  # 获取窗口中心
pos = window.mouse_position  # 获取鼠标位置

使用stop关闭window:

import easygame as eg
window = eg.window()
window.stop(a=1)  # 关闭window,调用over_function,传入的是over_function的参数。

使用mainloop显示窗口:

import easygame as eg
window = eg.window()
window.mainloop(status=0,  # 退出状态码esc_quit=True,  # 按下ESC键是否退出event_handler=eg.do_something,  # 处理pygame事件的函数,要有一个入参。up_func=eg.do_something,  # 事件处理前调用的函数,用于绘制组件。down_func=eg.do_something,  # 事件处理后调用的函数,用于判断并反馈。over_function=eg.do_something,  # 退出后调用的函数
)

Tips: window.mainloop方法会返回Game Over的字符。

异常

easygame中可能抛出EasyGameError:

import easygame as eg
try:window = eg.window()
except eg.EasyGameError:pass

颜色

easygame收录了一些颜色的RGB元组:

import easygame as eg
eg.red = (255, 0, 0)
eg.green = (0, 255, 0)
eg.blue = (0, 0, 255)
eg.black = (0, 0, 0)
eg.white = (255, 255, 255)
eg.brown = (142, 88, 60)
eg.yellow = (255, 255, 0)
eg.pink = (255, 174, 201)
eg.purple = (128, 0, 255)
eg.orange = (255, 128, 0)
eg.grey = (128, 128, 128)
eg.rose = (255, 0, 128)
eg.banana = (255, 255, 50)
eg.sea = (0, 255, 255)

组件

secret-key

get_secret_key可以保证安全性。

import easygame as eg
if eg.get_secret_key() != eg.SECRET_KEY:raise SystemExit('secret-key is wrong')

Widget

Widget为组件基类,参数:

Widget(screen,  # easygame.window对象*images,  # 造型图片size=(40, 40),   # 图片大小position=(0, 0),  # 初始位置
)

使用pack方法添加到组件队列:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget.pack()  # 等同于 window.add_widget(widget)
window.mainloop()

widget对象具有__call__方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget = widget(window, 'test2.png')  # 重设widget
widget = widget.reset(window, 'test3.png')  # 使用此方法与上面的相同
widget.pack()  # 等同于 window.add_widget(widget)
window.mainloop()

使用update绘制widget:

import easygame as eg
def up_func():  # 回调函数widget.update()
window = eg.window()
widget = eg.Widget(window, 'test.png')
window.mainloop(up_func=up_func)

widget有如下造型方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png', 'test2.png')
widget.add_modelling()  # 增加一个造型编号
widget.set_modelling(0)  # 设置造型编号
number = widget.modelling  # 获取造型编号
widget.pack()  # 等同于 window.add_widget(widget)
window.mainloop()

widget有如下pygame方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
rect = widget.rectangle  # 组件的pygame.Rect对象
surface = widget.get_screen()  # 窗口对象
widget.pack()  # 等同于 window.add_widget(widget)
window.mainloop()

widget有如下图层方法:

import easygame as eg
window = eg.window()
widget1 = eg.Widget(window, 'test.png')
widget2 = eg.Widget(window, 'test2.png')
widget1.pack()
widget2.pack()
# pack之后才能对图层操作
widget1.set_layer(0)  # 设置图层为0层(底层)
widget1.set_layer_down()  # 移动至底层
widget2.set_layer_up()   # 移动至顶层
window.mainloop()

widget有如下移动方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget.move_to(100, 100)  # 移动至(100, 100)
widget.move_x(50)  # 增加x坐标50
widget.move_y(100)  # 增加y坐标100
widget.move_to_mouse()  # 移动至鼠标指针
widget.pack()
window.mainloop()

我们可以写一个当鼠标点击就移动过去的程序:

import easygame as eg
def handler(event):if event.type == eg.MOUSEBUTTONDOWN:widget.move_to_mouse()
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget.pack()
window.mainloop(event_handler=handler)

widget有如下检测方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget2 = eg.Widget(window, 'test2.png')
widget.pack()
near_x_side, near_y_side = widget.near_edge()
# widget.near_edge方法返回两个值,第一个值为碰到上/下边缘,第二个值为碰到左/右边缘
is_collide = widget.collide_other(widget2)  # 判断组件矩形对象是否相撞
window.mainloop(esc_quit=False)

widget有如下转换方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png', 'test2.png')
widget.set_angel(0, 45)  # 将造型0设为45度
widget.set_size(1, (60, 60))  # 将造型1设为60×60
widget.pack()
window.mainloop()

widget有如下音乐方法:

import easygame as eg
window = eg.window()
widget = eg.Widget(window, 'test.png')
widget.play_sound('test.wav', async_play=True)  # 异步播放音频,不支持MP3
widget.play_sound('test.mp3', async_play=False)  # 同步播放音频,支持音频与操作系统有关
widget.pause_sound()  # 暂停异步播放音频
widget.unpause_sound()  # 继续异步播放音频
widget.stop_sound()   # 停止异步播放音频
widget.pack()
window.mainloop()

Background

Background是一个背景类,默认置于底层。继承Widget类。

import easygame as eg
window = eg.window()
background = eg.Background(window, 'back.png')
background.pack()
window.mainloop()

Background会自动适应窗口大小。

Background可以实现滚动背景:

import easygame as eg
def up_func():  # 更新回调background1.rolling(speed=3)  # 滚动背景,速度为3background2.rolling(speed=3)  # 需要2个背景对象
window = eg.window()
background1 = eg.Background(window, 'back.png')
background2 = eg.Background(window, 'back.png')
background1.pack()
background2.pack()
window.mainloop(up_func=up_func)

Button

Button是一个按钮类,继承Widget类。

import easygame as eg
window = eg.window()
# 按钮类需要两个造型,为鼠标离开时的造型和鼠标碰到时的造型
button = eg.Button(window, 'up.png', 'down.png')
button.pack()
window.mainloop()

Button提供了如下鼠标方法:

import easygame as eg
def handler(event: eg.EVENT_TYPE):  # 事件处理回调if button.near_mouse():  # 鼠标指针碰到print('near mouse')if button.click(event):  # 按钮被点击button.play_sound('pop.wav', async_play=False)  # 播放点击音效
window = eg.window()
# 按钮类需要两个造型,为鼠标离开时的造型和鼠标碰到时的造型
button = eg.Button(window, 'up.png', 'down.png')
button.pack()
window.mainloop(event_handler=handler)

Text

Text是一个文字类,继承Widget类,无法执行大多数组件方法。

import easygame as eg
window = eg.window(title='hello world', size=(200, 200),bgcolor=eg.orange)
text = eg.Text(window, 'hello world', font='test.ttf',color=eg.black, size=40)   # 设置文字类
text.set_text('hello easy-game')  # 重设文字
text.pack()
window.mainloop(esc_quit=False)

Input

Input类继承至Button类,按钮按下时输入才有效。

Input类的稳定性差,开发中不要使用。

import easygame as eg
def handler(event: eg.EVENT_TYPE): print(input_btn.input(event))  # 获取输入值
window = eg.window(title='hello world', size=(200, 200),bgcolor=eg.orange)
input_btn = eg.Input(window, 'up.png', 'down.png')
window.mainloop(esc_quit=False, event_handler=handler)

Sprite

Sprite继承至Widget类,与Widget无区别。

以下是它的增加的方法:

import easygame as eg
window = eg.window()
sprite = eg.Sprite(window, 'test.png')
sprite.say('hello!')  # 显示一个提示框,内容为hello
sprite.pack()
window.mainloop()

在开发中建议使用Sprite而不是Widget

Canvas

画布类,画笔只能在画布上绘画,继承至Widget
类似tkinter中的Canvas。
通过pen = Canvas.init_pen()获取一个画笔对象。

import easygame as eg
window = eg.window()
canvas = eg.Canvas(window, position=(100, 100), size=(300, 300),bgcolor=eg.red)
pen = canvas.init_pen(pen_position=(100, 100), pen_color=eg.banana)   # 创建画笔对象
pen.go_to(200, 200)  # 移动至(200, 200)
pen.clear()  # 清空画布
pen.go_to(200, 300)     # 移动至(200, 300)
canvas.pack()
window.mainloop()

CMD

使用如下命令测试easygame的安装:

python -m easygame debug

使用如下命令测试easygamePen的安装:

python -m easygame pen

更新日志

  • 0.9.3版本: 实现基础功能
  • 1.0.0版本: 增加mblock资源下载功能
  • 1.0.1版本: 增加EVENT_TYPE类型
  • 1.0.2版本: 完善文档和setup

python写游戏的好选择: easygame相关推荐

  1. python写好的代码怎么给别人使用-10分钟学会用python写游戏!Python其实很简单!...

    原标题:10分钟学会用python写游戏!Python其实很简单! Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以在这里给各位看官们准备了高价值Python学习视频教程 ...

  2. python 写游戏好简单啊,我用键盘可以随意控制角色了【python 游戏实战 04】

    前言 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课 ...

  3. 我的世界python写游戏_用python写游戏之 Give it up

    <永不言弃 Give It Up>,这是一款极具虐心色彩的音乐题材闯关游戏. 这篇文章就来分析这款游戏原理,并用python写出来一个简易版.废话不多说,直接开始分析. 游戏元素,暂且把主 ...

  4. 手机版python3h如何自制游戏_Python 飞机大战|10 分钟学会用 python 写游戏

    Python 飞机大战|10 分钟学会用 python 写游戏 2018 年 python 语言大火, 这把火看趋势已然延续到了 2019 年! 除了在科学计算领域 python 有用武之地之外, 在 ...

  5. 我的世界python写游戏_快来试试Python写的游戏《我的世界》

    <我的世界 Minecraft>大家应该都听说过,但你有没有想过自己用Python写一个这样的游戏呢?太难.太复杂了?也许吧,但是不试一试你怎么知道能不能成呢? 国外有位叫fogleman ...

  6. 用python写数字_用python 写游戏之数字华容道

    当初对这个游戏颇有印象还是在最强大脑节目上面,何猷君以几十秒就完成了这个游戏.写2048游戏的时候,又想起了这个游戏,想着来研究一下. 游戏玩法 用尽量少的步数,尽量短的时间,将棋盘上的数字方块,按照 ...

  7. python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  8. python游戏最简单代码-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  9. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  10. python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了

    安装pygame 本人电脑是windows 10.python3.6,pygame下载地址:pypi.python.org/pypi/Pygame- 请自行下载对应python版本的pygame 运行 ...

最新文章

  1. [k8s] 重新加入master节点
  2. 前天在一直Linux根文件系统时提示WARNING: Unable to open an in...
  3. oracle的al32utf8,oracle字符集修改(AL32UTF8-UTF8)
  4. Rancher Kubernetes Engine(RKE)正式发布:闪电般的Kubernetes安装部署体验
  5. java猜单词游戏_9 java基础综合编程练习---猜单词游戏
  6. JPA的继承 OOD和关系数据库的 纽带
  7. 特殊权限suid,sgid,sticky和acl(访问控制列表)参数详解
  8. 组态王中时间存access怎么存_组态王如何实现实时显示数据并且记录到Access数据库中?...
  9. 使用 Python爬虫+OpenCV 通过摄像头 二维码识别 来得到官方接口的反馈数据 从而实现实时准确地 检测健康码状态(获取JS动态数据)
  10. 鱼塘钓鱼(贪心算法)--算法设计
  11. 安徽计算机在职研究生学校,安徽在职研究生可以考哪几个学校
  12. JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)
  13. VC++图形平移功能的实现
  14. 10款非常实用的在线网站原型设计工具
  15. 道路交通安全改善解决方案PPT
  16. 安装elasticsearch踩过的坑,教训写在这里,一起共同努力,希望大家先通读一下再按着步骤操作,看过就知道哪些坑可以掠过
  17. 中国全谱系动车组图解
  18. esp32,基于阿里云平台,配置实现Node.js SDK接入示例出现description: ‘Failed to authenticate: 4‘ BUG
  19. 执行Http请求时doGet和doPost的区别
  20. W650DC_DD_CFL_Win64(刷八代CPUBios)

热门文章

  1. 复合线转权属线lisp_三权发证中使用MAPGIS CASS如何应用复合线 简单、快速生成集体土地所有权权属线 -...
  2. linux按数量复制文件,linux下dd命令使用详解---用指定大小的块拷贝一个文件
  3. 监控视频存储解决方案
  4. 推荐一些好用的Chrome插件
  5. 实施运维企业面试题-5
  6. 计算机网络课程设计报告
  7. linux超级终端配置交换机路由器
  8. Linux ANSYS FLUENT 在集群上的安装与配置
  9. linux怎么查看tudexo状态,linux怎么安装tuxedo中间件?
  10. Kotlin 一种以服务为基础的APP架构及源码示例