用python制作游戏和媒体项目的最简单方法。

replit-pla的Python项目详细描述


Python播放(测试版)

try on repl.it

开始用python编写游戏和图形项目的最简单方法

python play是python编程语言的一个开源代码库,它使开始制作游戏变得尽可能简单。下面是使用play制作简单游戏的代码:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()

上面的代码生成了一个游戏,您必须单击猫才能获胜:

点击一个猫游戏

您可以尝试在repl.it上玩和更改此游戏!

python play是初学者开始图形编程的最佳选择。它的设计与麻省理工学院的scratch具有相似的命令和简单性,并且由于缺少锅炉盘代码,它与pygame、arcade或pygame zero等项目不同,它易于理解的简单英语命令,以及直观的api。阅读本文档底部有关其设计的更多信息

如何安装python play

在终端中运行以下命令:

pip install replit-play

或者您只需转到repl.it/@glench/python play sample game" rel="nofollow">repl.it,就不必安装任何东西:)

如何使用python play

所有python play程序都以import play开始并以play结束。start_program(),如下所示:

importplay# this is the first line in the programplay.start_program()# this is the last line in the program

所有其他命令都在这两个命令之间。

要尝试以下任何示例,请转到repl.it并尝试在

中粘贴代码

命令

本文档的其余部分分为以下部分:

基本命令

要在屏幕上获取图像或文本,请使用以下命令。(复制并粘贴下面的代码以进行尝试。)

播放.new_box()

box=play.new_box(color='black',x=0,y=0,width=100,height=200,border_color="light blue",border_width=0)

这将在屏幕中间放置一个高大的黑色框。

如果要更改图像在屏幕上的位置,请尝试更改x=0(水平位置)和y=0(垂直位置)。正x在右边,正y在上面。您也可以通过将'black'更改为其他颜色名称来更改颜色,如'orange'

播放.new_image()

character=play.new_image(image='character.png',x=0,y=0,angle=0,size=100,transparency=100)

这将在屏幕中间放置一个图像。确保您的项目文件中有一个名为character.png的文件上面的代码可以工作。

播放.new_text()

greeting=play.new_text(words='hi :)',x=0,y=0,angle=0,font=None,font_size=50,color='black',transparency=100)

这将在屏幕上显示一些文字。

如果要更改字体,则需要在项目文件中使用字体文件(通常命名为arial.ttf)。然后您可以将FONT=none更改为FONT='arial.ttf'

播放.new_circle()

ball=play.new_circle(color='black',x=0,y=0,radius=100,border_color="light blue",border_width=0,transparency=100)

这将在屏幕中间放置一个黑色圆圈。

播放.new_line()

line=play.new_line(color='black',x=0,y=0,length=100,angle=0,thickness=1,x1=None,y1=None)

这将在屏幕上创建一条细线。

播放.set_backdrop()

您可以使用play.set_backdrop()命令更改背景色:

play.set_backdrop('light blue')

有很多命名颜色可供选择。此外,如果要按rgb(红-绿-蓝)值设置颜色,可以这样做:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
0

在python play中,任何可以设置颜色的地方,都可以使用命名颜色(如'red')或上面的rgb值(如(255,255,255)),甚至使用rgb a值(如(0,0,0,127))(第四个数字是从0到255的透明度)。您可以通过play.backdrop

动画和控制命令

@play.repeat_forever

要使事情移动,可以从使用play.repeat_forever开始,如下所示:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
1

以上代码将使猫永远掉头。精灵还有其他命令,您可以在下一节中看到,这些命令称为精灵命令。

@播放。当程序启动时

要在项目开始时运行一些代码,请使用@play。当程序启动时,如下所示:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
2

这将使猫在程序启动时立即倒转。

等待播放。计时器(秒=1)

要在等待一段时间后运行代码,可以使用await play.timer()命令,如下所示:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
3

当程序启动时,这将使猫立即倒转,等待2秒钟,然后再次向上翻。

play.repeat()等待play.animate()

要在一定次数内平滑地设置角色的动画,可以使用play.repeat()await play.animate(),如下所示:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
4

当程序启动时,此代码将使猫顺利地倒转。

要分解代码:

  • 播放时计数。重复(180):运行代码180次。
  • CAT.TURN(1)每次将CAT转动1度。
  • 等待播放.animate()使猫的动画流畅。如果没有这个命令,猫会立刻倒转。

注意:要使用await play.animate()await play.timer(),函数定义中的def之前必须包含单词async

精灵命令

简单命令

精灵(图像和文本)有几个简单的命令:

  • sprite.move(10)-将sprite朝其所面向的方向移动10像素(从右侧开始)。使用负数(-10)返回。
  • 雪碧。旋转(20)-逆时针旋转雪碧20度。使用负数(-20)向相反方向转动。
  • 精灵。转到(其他精灵)-使精灵跳转到屏幕上名为其他精灵的位置。也可用于使精灵跟随鼠标:精灵。转到(play.mouse)
  • 精灵。转到(x=100,y=50)-使精灵跳到x=100,y=50(右上一点)。
  • 精灵。指向(其他精灵)-turnssprite因此它指向另一个名为other\u sprite的sprite
  • 精灵。指向(x=100,y=50)-旋转精灵使其指向x=100,y=50(向右上一点)。
  • sprite.hide()-隐藏sprite。隐藏时无法单击。
  • sprite.show()-如果隐藏,则显示sprite
  • sprite.clone()-复制或克隆sprite并返回它。
  • sprite.remove()-从屏幕上永久删除一个sprite。在已移除的精灵上调用精灵命令不会有任何效果。
  • sprite.start_physics()-打开sprite的物理。有关详细信息,请参见物理命令部分。
  • sprite.stop_physics()-关闭sprite的物理。有关详细信息,请参见物理命令部分。

属性

精灵还具有可以更改的属性,以更改精灵的外观。它们在这里:

  • 精灵.x-精灵在屏幕上的水平位置。正数为右,负数为左。默认值为0。
  • 精灵.y-精灵在屏幕上的垂直位置。正数上升,负数下降。默认值为0。
  • 精灵大小-精灵有多大。默认值是100,但可以放大或缩小。
  • 精灵角度-精灵旋转了多少。正数是逆时针的。默认值为0度(指向右侧)。
  • sprite.transparency-如何看穿sprite是从0到100。0是完全透明的,100是完全不透明的。默认值为100。
  • sprite.is_hidden-true如果使用sprite.hide()命令隐藏了sprite.否则false
  • 如果精灵未使用sprite.hide()命令隐藏,则显示精灵。否则false
  • 雪碧.左-雪碧最左边部分的X位置。
  • 精灵。右-精灵最右边部分的X位置。
  • 精灵。顶部-精灵最顶部的Y位置。
  • 精灵。底部-精灵最底部的Y位置。
  • sprite.physics-如果启用了物理,则包含对象的物理属性。默认值为none。有关详细信息,请参见物理命令部分。

仅限图像精灵属性:

  • sprite.image-显示的图像的文件名。如果最初提供了"无",则会显示一个空白图像。

纯文本精灵属性:

  • 文本。单词-显示的文本内容。默认值为'hi:)'
  • text.font-字体的文件名,例如"arial.ttf"。默认值为none,将使用内置字体。
  • 文本。字体大小-文本的大小。默认值为50(pt)。
  • text.color-文本的颜色。默认为黑色。

仅限精灵框属性:

  • 框。颜色-填充框的颜色。默认值为黑色
  • 框。宽度-框的宽度。默认值为100像素。
  • 框。高度-框的高度。默认值为200像素。
  • 框。边框宽度-框边框的宽度,边框周围的线条。默认值为0
  • 框。边框颜色-框边框的颜色。默认值为"浅蓝色"

如果框有边框,则框的总宽度(包括边框)将是由width属性定义的宽度。

仅限圆形精灵属性:

  • 圆形。颜色-填充圆形的颜色。默认值为黑色
  • 圆。半径-圆有多大,从中间到外侧测量。默认为100像素,形成200像素宽的圆圈。
  • 圆形。边框的宽度-圆形边框的宽度及其周围的线条。默认值为0
  • 圆形边框颜色-圆形边框的颜色。默认值为"浅蓝色"

如果圆有边框,则圆的总宽度(包括边框)将是由radius属性定义的宽度。

仅限线条精灵属性:

  • 行。颜色-行的颜色。默认值为黑色
  • 行。长度-行的长度。默认为100(像素)。
  • 线条角度-线条指向的角度。默认为0(度)。
  • 第x1行-行结束时的x坐标。
  • 第y1行-行结束时的y坐标。

对于直线,xy坐标是直线的起点。您可以设置长度角度x1y1属性来更改线的指向。如果您更新其中一个,其他的将自动更新。

这些属性可以更改为执行与上面的sprite命令相同的操作。例如,

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
5

可以更改属性以设置精灵的动画。下面的代码使猫掉头。

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
6

其他信息

精灵还有一些其他有用的信息:

  • sprite.width-获取sprite的像素宽度。
  • 精灵高度-获取精灵的像素高度。
  • sprite.distance_to(other_sprite)-以像素为单位获取到other_sprite的距离
  • sprite.distance_to(x=100,y=100)-获取到点x=100,y=100的距离。
  • sprite.被单击-true如果刚刚单击了sprite,则为false
  • 精灵正在触摸(其他精灵)-如果精灵正在触摸其他精灵,则返回true。否则false
  • sprite.is_touching(point)-如果sprite正在接触点(任何具有xy坐标的对象),则返回true。例如:sprite.is_touching(play.mouse)

鼠标命令

在python play中使用鼠标很容易。下面是一个简单的程序,可以将精灵指向鼠标:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
7

play.mouse具有以下属性:

  • play.mouse.x-鼠标的水平X位置。
  • 播放.mo使用.y-鼠标的垂直y位置。
  • 播放鼠标。如果单击鼠标,则单击-true如果单击鼠标,则单击false如果单击鼠标,则单击
  • 播放。鼠标正在触摸(精灵)-如果鼠标正在触摸精灵,则返回true,否则返回false

@sprite.单击时

可能最简单的检测点击的方法是使用sprite.when_clicked

在下面的程序中,当单击面时,它将更改1秒,然后返回正常状态:

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
8

@play.when_sprite_clicked()

如果要在单击多个精灵时运行相同的代码,可以使用@play.when_sprite_clicked()

importplaycat=play.new_text('=^.^=',font_size=70)@play.repeat_foreverasyncdefmove_cat():cat.x=play.random_number(-200,200)cat.y=play.random_number(-200,200)cat.color=play.random_color()cat.show()awaitplay.timer(seconds=0.4)cat.hide()awaitplay.timer(seconds=0.4)@cat.when_clickeddefwin_function():cat.show()cat.words='You won!'play.start_program()
9

在上面的程序中,单击face1face2将分别运行每个精灵的代码。请注意,函数是用参数定义的,例如def do(sprite):而不仅仅是def do():

@play.mouse.when_clicked@play.when_mouse_clicked

要在单击鼠标时在任何位置运行代码,请使用@play.mouse.when_clicked@play.when_mouse_clicked(它们执行相同的操作)。

在下面的代码中,当检测到单击时,文本将移动到单击位置并显示坐标:

pip install replit-play
0

@play.mouse.when_click庠released@play.when庠click庠released

要在释放鼠标按钮时运行代码,请使用@play.mouse.when_click撸released@play.when撸click撸released(它们执行相同的操作)。

在下面的代码中,当鼠标单击猫时,它可以被拖动:

pip install replit-play
1

键盘命令

播放。按键已按下()

您可以使用play.key_is_pressed()检测按键。

在下面的代码中,按箭头键或w/a/s/d将使CAT朝所需方向运行。

pip install replit-play
2

@play.when_key_pressed()

您可以使用play.when_key_pressed()在按特定键时运行代码。

在下面的代码中,按空格键将改变猫的脸,按回车键将改变猫的脸。

pip install replit-play
3

@播放。按任意键时

如果您只想检测何时按下任何键,可以使用play.when_any_key_pressed

在下面的代码中,您按的任何键都将显示在屏幕上:

pip install replit-play
4

@play.when_key_released()

完全类似于"play.when_key_pressed()但在释放特定键时运行代码。

在下面的代码中,只有按下向上的箭头,文本才会出现在屏幕上。

pip install replit-play
5

@play.when_any_key_released

与"播放"一模一样。按任何键时都会运行代码。

在下面的代码中,最近释放的钥匙的名称将显示在屏幕上。

pip install replit-play
6

物理命令

python play使用"pymunk"物理库将精灵转化为物理对象,这些物理对象可以相互碰撞、与重力相撞等等。

sprite.start_physics()

要将精灵变成物理对象,请使用start_physics()命令:

pip install replit-play
7

这将导致精灵开始受到重力的影响,与其他具有物理性质的精灵碰撞,等等。

sprite.physics属性

调用sprite.start_physics()后,sprite将具有sprite.physics属性。sprite.physics具有以下属性:

  • 精灵物理cs.可以移动-精灵是否可以在屏幕上移动(true)或卡在原地(false)。默认为true
  • sprite.physics.stable-sprite是否是一个稳定的对象(不能被敲到的对象)。乒乓球拍是一个稳定的物体(true),但可以被击倒的盒子或球不是(false)。默认为false
  • sprite.physics.x_speed-精灵水平移动的速度(负数表示精灵向左移动,正数表示精灵向右移动)。默认为0
  • sprite.physics.y_speed-精灵垂直移动的速度(负数表示精灵向下移动,正数表示精灵向上移动)。默认为0
  • 精灵。物理。服从重力-如果精灵受到重力的影响。默认为true
  • sprite.physics.bounciness-sprite的弹性从0(根本不反弹)到1(反弹很多)。默认为1
  • 雪碧。物理。质量-雪碧有多重。默认为10。较重的物体会撞击较轻的物体。
  • 精灵。物理。摩擦-精灵在其他物体上滑动的程度。从0开始(像在冰上一样滑动)到大数字(非常粗糙的雪碧,根本不滑动)。默认为0.1

更改这些属性将立即更改精灵作为物理对象的方式。如果你不完全理解这些特性,可以尝试使用它们进行实验。

sprite.physics还有两个命令可以帮助您:

  • sprite.physics.pause()-暂时停止sprite成为物理对象。精灵的速度和其他物理属性将被保存,直到使用unpause()命令。
  • sprite.physics.unpause()-在已暂停的sprite上恢复物理。它将继续使用在调用physics.pause()之前的精确速度和物理设置。

调用sprite.stop_physics()将立即停止sprite的移动和碰撞,并将sprite.physics设置为none

sprite.stop_physics()

要让精灵停止四处移动和碰撞,可以调用sprite.stop戋physics:

pip install replit-play
8

这将立即停止精灵。

播放.set_gravity()

要设置对精灵调用了start_physics()的精灵有多大的重力,请使用play.set_gravity()命令:

pip install replit-play
9

您可以使用play.gravity.vertical(默认值为-100)和play.gravity.horizontal(默认值为0)访问当前重力。

其他有用的命令

播放屏幕

获取屏幕信息的方法。play.screen具有以下属性:

  • play.screen.width-默认值为800(总共像素)。更改此选项将更改屏幕大小。
  • play.screen.height-默认值为600(总共像素)。更改此选项将更改屏幕大小。
  • play.screen.left-屏幕左边缘的x坐标。
  • play.screen.right-屏幕右边缘的x坐标。
  • play.screen.top-屏幕顶部的y坐标。
  • play.screen.bottom-屏幕底部的y坐标。

播放。所有精灵

程序中所有精灵(图像、形状、文本)的列表。

播放.random_number()

产生随机数的函数。

如果给定两个整数,play.random_number()将返回一个整数:

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
0

(您也可以进行播放。随机数(0,100)而不必最低最高

如果给出非整数,则返回非整数:

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
1

play.random_number()也包含在内,这意味着play.random_number(0,1)将返回01

播放.random_color()

返回随机的RGB颜色,包括白色和黑色。

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
2

每个值从0到255不等。

播放.random_position()

返回屏幕上的随机位置。position对象有一个xy组件。

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
3

播放.repeat()

play.repeat()与python内置的range函数相同,只是它从1开始。"repeat"只是一个比"range"更友好、更具描述性的名称。

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
4

等待播放.animate()

在循环中使用时,此命令将设置发生的任何精灵更改的动画。

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
5

await play.animate()await asyncio.sleep(0)相同,只是它对初学者有一个更友好的名称。

这一切都是怎么回事?这是蟒蛇吗?

是的,这是蟒蛇!python在python 3.7中添加了asyncawait作为特殊关键字。它是异步模块的一部分。

使用异步函数意味着我们可以使用await play.timer()await play.animate()函数,这使得一些代码更加简单,并且看起来是并行运行的,新程序员发现这一点很直观。

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
6

在上面的程序中,即使代码是单线程运行的,背景也会发生变化,猫也会同时转动。

除非您想使用await函数,否则不需要编写async关键字。如果试图在非异步函数中使用await命令,python将显示如下错误:

importplay# this is the first line in the programplay.start_program()# this is the last line in the program
7

要修复该错误,只需将async放在def之前

如果您不理解这些,通常可以在def之前包含async

为什么使用python play?

python play被设计成是全新程序员的一个极好的起点。这个项目的目标是给一个从未编程过的人一个引人注目的成功经验,在他们编程的最初几分钟。我们的目标是让尽可能年轻的观众能够接触到图形编程。

我们发现许多现有的编程语言和图形库给新的程序员带来了不必要的困难——使简单的事情发生困难,语言混乱,程序流程混乱,概念不明,等等。我们知道,即使是最初的一次不愉快的经历也会让人们永远远离编程,我们希望尽可能避免这种结果。

python play的灵感来自于麻省理工学院的scratch,它向数以百万计的儿童和成人介绍了编程,并帮助他们创建和分享个人有意义的计算项目。事实上,python play的主设计师在scratch上工作了很短一段时间。但我们发现,对于一些学习者来说,scratch——它的图形块和丰富多彩的界面——并不像是"真正的编程"。对于那些希望使用主流文本程序的学习者在消除这些语言中图形编程的困难的同时,我们让python发挥作用。

python play的设计遵循以下原则:

  • 没有样板文件-每一行代码都应该做一些有意义和可理解的事情。我们希望限制学习者需要问"为什么我们必须包含这行代码?"

  • 命令应尽可能具有即时的视觉效果。例如,如果程序员键入一个new_image命令,精灵就会立即出现在屏幕上。他们不需要了解初始化精灵和绘制精灵之间的无形区别。

  • 代码行应易于复制和粘贴。

  • 命令值应具有描述性标签,尽可能清楚地说明该值的含义。而不是play.new_image('character.png',50,100)play.new_image(image='character.png',x=50,y=100)

  • 尽可能使用通俗的英语。对于数学概念,尝试使用程序员可能在数学类中看到的语言。尽量使用较年轻人更容易打字和拼写的短名字。使错误尽可能清楚和有建设性。许多命令和名字都是从零开始借用的,他们的设计师花了几十年的时间和孩子们在一起,观察什么语言对他们来说是有意义的。

python play还设计了一个定制的repl.it ide(即将推出),它显著降低了编程的可用性问题(安装语言、使用文本编辑器、使用终端、运行程序、显示可用的命令等)。

虽然python和python play的学习曲线对于新程序员来说还远不是理想的,但我们仍然认为python play为新程序员提供了一个开始使用图形编程的好方法。

<3<P>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否在servlet中检索上一页路径?   Java抱怨在开关的默认情况下未初始化最终字段   Java泛型:为什么编译器不能判断这个类<t>对象与这个类的类型参数的对象的类具有相同的类型?   Java:继承方法中使用的私有变量   HibernateJava。ClassCastException:java。lang.Integer不能强制转换为abc。def。我的项目。奥姆。EmployeeTopMetaData   http java发布和下载文件   java改进条件检查   java如何将2d数组的条目作为键放在地图中   java如何获取传递给运行时的值。getRuntime。JUnit测试用例中的exit(value)   java注释来创建所有可能的构造函数   自动建议列表:java。lang.IllegalArgumentException:在XPath表达式为null时找不到元素   为什么MapAPI在Java中不提供流功能?   gradle不导入本地java库   尽管我使用的是SessionCreationPolicy,java Spring安全性似乎仍在使用会话。无国籍   使用java查找MongoDB中数组元素的平均值