
这是仍在进行中的关于使用 Pygame 模块来在 Python 3 中创建电脑 游戏 的系列文章的第六部分。先前的文章是:
一个平台类 游戏 需要平台。
在 Pygame 中,平台本身也是个妖精,正像你那个可玩的妖精。这一点是重要的,因为有个是对象的平台,可以使你的玩家妖精更容易与之互动。
创建平台有两个主要步骤。首先,你必须给该对象编写代码,然后,你必须映射出你希望该对象出现的位置。
要构建一个平台对象,你要创建一个名为 Platform 的类。它是一个妖精,正像你的 Player 妖精 一样,带有很多相同的属性。
你的 Platform 类需要知道很多平台类型的信息,它应该出现在 游戏 世界的哪里、它应该包含的什么等等。这其中很多信息可能还尚不存在,这要看你为你的 游戏 计划了多少,但是没有关系。正如直到 移动你的 游戏 角色 那篇文章结束时,你都没有告诉你的玩家妖精移动速度有多快,你不必事先告诉 Platform 每一件事。
在这系列中你所写的脚本的开头附近,创建一个新的类。在这个代码示例中前三行是用于说明上下文,因此在注释的下面添加代码:
当被调用时,这个类在某个 X 和 Y 位置上创建一个屏上对象,具有某种宽度和高度,并使用某种图像作为纹理。这与如何在屏上绘制出玩家或敌人非常类似。
下一步是绘制出你的平台需要出现的地方。
实现平台类 游戏 世界有几种不同的方法。在最初的横向滚轴 游戏 中,例如,马里奥超级兄弟和刺猬索尼克,这个技巧是使用“瓷砖”方式,也就是说有几个代表地面和各种平台的块,并且这些块被重复使用来制作一个关卡。你只能有 8 或 12 种不同的块,你可以将它们排列在屏幕上来创建地面、浮动的平台,以及你 游戏 中需要的一切其它的事物。有人发现这是制作 游戏 最容易的方法了,因为你只需要制作(或下载)一小组关卡素材就能创建很多不同的关卡。然而,这里的代码需要一点数学知识。
另一种方法是将每个素材作为一个整体图像。如果你喜欢为 游戏 世界创建素材,那你会在用图形应用程序构建 游戏 世界的每个部分上花费很多时间。这种方法不需要太多的数学知识,因为所有的平台都是整体的、完整的对象,你只需要告诉 Python 将它们放在屏幕上的什么位置。
每种方法都有优势和劣势,并且根据于你选择使用的方式,代码稍有不同。我将覆盖这两方面,所以你可以在你的工程中使用一种或另一种,甚至两者的混合。
总的来说,绘制你的 游戏 世界是关卡设计和 游戏 编程中的一个重要的部分。这需要数学知识,但是没有什么太难的,而且 Python 擅长数学,它会有所帮助。
你也许发现先在纸张上设计是有用的。拿一张表格纸,并绘制一个方框来代表你的 游戏 窗体。在方框中绘制平台,并标记其每一个平台的 X 和 Y 坐标,以及它的宽度和高度。在方框中的实际位置没有必要是精确的,你只要保持数字合理即可。譬如,假设你的屏幕是 720 像素宽,那么你不能在一个屏幕上放 8 块 100 像素的平台。
当然,不是你 游戏 中的所有平台都必须容纳在一个屏幕大小的方框里,因为你的 游戏 将随着你的玩家行走而滚动。所以,可以继续绘制你的 游戏 世界到第一屏幕的右侧,直到关卡结束。
如果你更喜欢精确一点,你可以使用方格纸。当设计一个瓷砖类的 游戏 时,这是特别有用的,因为每个方格可以代表一个瓷砖。
你可能已经在学校中学习过 笛卡尔坐标系 。你学习的东西也适用于 Pygame,除了在 Pygame 中你的 游戏 世界的坐标系的原点 0,0 是放置在你的屏幕的左上角而不是在中间,是你在地理课上用过的坐标是在中间的。
X 轴起始于最左边的 0,向右无限增加。Y 轴起始于屏幕顶部的 0,向下延伸。
如果你不知道你的玩家、敌人、平台是多大的,绘制出一个 游戏 世界是毫无意义的。你可以在图形程序中找到你的平台或瓷砖的尺寸。例如在 Krita 中,单击“图像”菜单,并选择“属性”。你可以在“属性”窗口的最顶部处找到它的尺寸。
另外,你也可以创建一个简单的 Python 脚本来告诉你的一个图像的尺寸。打开一个新的文本文件,并输入这些代码到其中:
保存该文本文件为 identifypy。
要使用这个脚本,你必须安装一些额外的 Python 模块,它们包含了这个脚本中新使用的关键字:
一旦安装好,在你 游戏 工程目录中运行这个脚本:
在这个示例中,地面平台的图形的大小是 1080 像素宽和 97 像素高。
如果你选择单独地绘制每个素材,你必须创建想要插入到你的 游戏 世界中的几个平台和其它元素,每个素材都放在它自己的文件中。换句话说,你应该让每个素材都有一个文件,像这样:
你可以按照你希望的次数重复使用每个平台,只要确保每个文件仅包含一个平台。你不能使用一个文件包含全部素材,像这样:
当你完成时,你可能希望你的 游戏 看起来像这样,但是如果你在一个大文件中创建你的关卡,你就没有方法从背景中区分出一个平台,因此,要么把对象绘制在它们自己的文件中,要么从一个更大的文件中裁剪出它们,并保存为单独的副本。
注意: 如同你的其它素材,你可以使用 GIMP 、Krita、 MyPaint ,或 Inkscape 来创建你的 游戏 素材。
平台出现在每个关卡开始的屏幕上,因此你必须在你的 Level 类中添加一个 platform 函数。在这里特例是地面平台,它重要到应该拥有它自己的一个组。通过把地面看作一组特殊类型的平台,你可以选择它是否滚动,或它上面是否可以站立,而其它平台可以漂浮在它上面。这取决于你。
添加这两个函数到你的 Level 类:
ground 函数需要一个 X 和 Y 位置,以便 Pygame 知道在哪里放置地面平台。它也需要知道平台的宽度和高度,这样 Pygame 知道地面延伸到每个方向有多远。该函数使用你的 Platform 类来生成一个屏上对象,然后将这个对象添加到 ground_list 组。
platform 函数本质上是相同的,除了其有更多的平台。在这个示例中,仅有两个平台,但是你可以想有多少就有多少。在进入一个平台后,在列出另一个前你必须添加它到 plat_list 中。如果你不添加平台到组中,那么它将不出现在你的 游戏 中。
正像你现在可能所知的,如果你不使用它们,你的类和函数是没有价值的。添加这些代码到你的设置部分(第一行只是上下文,所以添加最后两行):
并把这些行加到你的主循环(再一次,第一行仅用于上下文):
瓷砖类 游戏 世界更容易制作,因为你只需要在前面绘制一些块,就能在 游戏 中一再使用它们创建每个平台。在像 OpenGameArtorg 这样的网站上甚至有一套瓷砖供你来使用。
Platform 类与在前面部分中的类是相同的。
ground 和 platform 在 Level 类中,然而,必须使用循环来计算使用多少块来创建每个平台。
如果你打算在你的 游戏 世界中有一个坚固的地面,这种地面是很简单的。你只需要从整个窗口的一边到另一边“克隆”你的地面瓷砖。例如,你可以创建一个 X 和 Y 值的列表来规定每个瓷砖应该放置的位置,然后使用一个循环来获取每个值并绘制每一个瓷砖。这仅是一个示例,所以不要添加这到你的代码:
不过,如果你仔细看,你可以看到所有的 Y 值是相同的,X 值以 64 的增量不断地增加 —— 这就是瓷砖的大小。这种重复是精确地,是计算机擅长的,因此你可以使用一点数学逻辑来让计算机为你做所有的计算:
添加这些到你的脚本的设置部分:
现在,不管你的窗口的大小,Python 会通过瓷砖的宽度分割 游戏 世界的宽度,并创建一个数组列表列出每个 X 值。这里不计算 Y 值,因为在平的地面上这个从不会变化。
为了在一个函数中使用数组,使用一个 while 循环,查看每个条目并在适当的位置添加一个地面瓷砖:
除了 while 循环,这几乎与在上面一部分中提供的瓷砖类平台的 ground 函数的代码相同。
对于移动的平台,原理是相似的,但是这里有一些技巧可以使它简单。
你可以通过它的起始像素(它的 X 值)、距地面的高度(它的 Y 值)、绘制多少瓷砖来定义一个平台,而不是通过像素绘制每个平台。这样,你不必 *** 心每个平台的宽度和高度。
这个技巧的逻辑有一点复杂,因此请仔细复制这些代码。有一个 while 循环嵌套在另一个 while 循环的内部,因为这个函数必须考虑每个数组项的三个值来成功地建造一个完整的平台。在这个示例中,这里仅有三个平台以 plocappend 语句定义,但是你的 游戏 可能需要更多,因此你需要多少就定义多少。当然,有一些不会出现,因为它们远在屏幕外,但是一旦当你进行滚动时,它们将呈现在眼前。
要让这些平台出现在你的 游戏 世界,它们必须出现在你的主循环中。如果你还没有这样做,添加这些行到你的主循环(再一次,第一行仅被用于上下文)中:
启动你的 游戏 ,根据需要调整你的平台的放置位置。如果你看不见屏幕外产生的平台,不要担心;你不久后就可以修复它。
到目前为止,这是 游戏 的和代码:
(LCTT 译注:到本文翻译完为止,该系列已经近一年没有继续更新了~)
via: >
把surface的坐标设为screen的外面,这样就看不到了,但是有可能会报错;
建个列表,把需要显示出来的surface都放进去,循环blit列表里的surface,如果想移除,就把surface在列表里删除,这样被移除的surface就不会显示在screen里面了。
先在当中画一个圆圈,再在周边画四个圆圈,
用pygamedrawcircle(surface,[255,100,0],[100,100],10)
#(表面, 颜色, 顶点坐标,半径)
然后把上面公式中[100,100]改成其他的圆心坐标,再在四边画四个圆
'float' object cannot be interpreted as an integer的意思是:float类型不能解释为int类型 。
代码错误处应该发生在图中红框内的代码语句中。
因为使用的是Python3所以在所框语句中应该使用//去代替/。
扩展资料:
Python贪吃蛇代码:
import pygame,sys,random,time
from pygamelocals import #从pygame模块导入常用的函数和常量
#定义颜色变量
black_colour = pygameColor(0,0,0)
white_colour = pygameColor(255,255,255)
red_colour = pygameColor(255,0,0)
grey_colour = pygameColor(150,150,150)
#定义游戏结束函数
def GameOver(gamesurface):
#设置提示字体的格式
GameOver_font = pygamefontSysFont("MicrosoftYaHei", 16)
#设置提示字体的颜色
GameOver_colour = GameOver_fontrender('Game Over',True,grey_colour)
#设置提示位置
GameOver_location = GameOver_colourget_rect()
GameOver_locationmidtop = (320,10)
#绑定以上设置到句柄
gamesurfaceblit(GameOver_colour,GameOver_location)
#提示运行信息
pygamedisplayflip()
#休眠5秒
timesleep(5)
#退出游戏
pygamequit()
#退出程序
sysexit()
#定义主函数
def main():
#初始化pygame,为使用硬件做准备
pygameinit()
pygametimeClock()
ftpsClock = pygametimeClock()
#创建一个窗口
gamesurface = pygamedisplayset_mode((640,480))
#设置窗口的标题
pygamedisplayset_caption('tanchishe snake')
#初始化变量
#初始化贪吃蛇的起始位置
snakeposition = [100,100]
#初始化贪吃蛇的长度
snakelength = [[100,100],[80,100],[60,100]]
#初始化目标方块的位置
square_purpose = [300,300]
#初始化一个数来判断目标方块是否存在
square_position = 1
#初始化方向,用来使贪吃蛇移动
derection = "right"
change_derection = derection
#进行游戏主循环
while True:
#检测按键等pygame事件
for event in pygameeventget():
if eventtype==QUIT:
#接收到退出事件后,退出程序
pygamequit()
sysexit()
elif eventtype==KEYDOWN:
#判断键盘事件,用w,s,a,d来表示上下左右
if eventkey==K_RIGHT or eventkey==ord('d'):
change_derection = "right"
if eventkey==K_LEFT or eventkey==ord('a'):
change_derection = "left"
if eventkey==K_UP or eventkey==ord('w'):
change_derection = "up"
if eventkey==K_DOWN or eventkey==ord('s'):
change_derection = "down"
if eventkey==K_ESCAPE:
pygameeventpost(pygameeventEvent(QUIT))
#判断移动的方向是否相反
if change_derection =='left'and not derection =='right':
derection = change_derection
if change_derection =='right'and not derection =='left':
derection = change_derection
if change_derection == 'up' and not derection =='down':
derection = change_derection
if change_derection == 'down' and not derection == 'up':
derection = change_derection
#根据方向,改变坐标
if derection == 'left':
snakeposition[0] -= 20
if derection == 'right':
snakeposition[0] += 20
if derection == 'up':
snakeposition[1] -= 20
if derection == 'down':
snakeposition[1] += 20
#增加蛇的长度
snakelengthinsert(0,list(snakeposition))
#判断是否吃掉目标方块
if snakeposition[0]==square_purpose[0] and snakeposition[1]==square_purpose[1]:
square_position = 0
else:
snakelengthpop()
#重新生成目标方块
if square_position ==0:
#随机生成x,y,扩大二十倍,在窗口范围内
x = randomrandrange(1,32)
y = randomrandrange(1,24)
square_purpose = [int(x20),int(y20)]
square_position = 1
#绘制pygame显示层
gamesurfacefill(black_colour)
for position in snakelength:
pygamedrawrect(gamesurface,white_colour,Rect(position[0],position[1],20,20))
pygamedrawrect(gamesurface,red_colour,Rect(square_purpose[0],square_purpose[1],20,20))
#刷新pygame显示层
pygamedisplayflip()
#判断是否死亡
if snakeposition[0]<0 or snakeposition[0]>620:
GameOver(gamesurface)
if snakeposition[1]<0 or snakeposition[1]>460:
GameOver(gamesurface)
for snakebody in snakelength[1:]:
if snakeposition[0]==snakebody[0] and snakeposition[1]==snakebody[1]:
GameOver(gamesurface)
#控制游戏速度
ftpsClocktick(5)
if __name__ == "__main__":
main()
第一步:Python开发环境
这一步很简单,零基础的小白只要进去Python官网下载安装就行了。
第二步:Pycharm
Pycharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。PyCharm在编写和调试Python方面可谓是强者,软件使用简单,功能强大,零基础小白学Python必备。
第三步:编辑器
1、notepad++
这是Python的编辑器,特点主要是方便快捷。Notepad++是 Windows *** 作系统下的一套文本编辑器(软件版权许可证: GPL),有完整的中文化接口及支持多国语言编写的功能(UTF8技术)。
2、Sublime Text代码编辑器
它具有漂亮的用户界面和强大的功能,还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等 *** 作系统。而且Sublime Text虽然是一个收费的软件,但是可以无限期的免费试用。
第四步:Google Chrome谷歌浏览器:
如果你还在用360浏览器的话,谷歌浏览器强烈推荐你。尤其是在利用Python进行网络爬虫时,谷歌浏览器会显得十分顺手。同时在部分功能上,谷歌浏览器要优于苹果电脑自带的浏览器,例如在添加书签时,谷歌浏览器可以手动建立文件夹进行分类。
第五步:Anaconda
Anaconda是一个方便的python包管理和环境管理软件,一般用来配置不同的项目环境。通过管理工具包、开发环境、Python版本,大大简化了你的工作流程。不仅可以方便地安装、更新、卸载工具包,而且安装时能自动安装相应的依赖包,同时还能使用不同的虚拟环境隔离不同要求的项目。总之一句话,自带Python环境,带了很多其他的库,直接安装很方便。
以上就是零基础学习者在学Python过程中需要用到的软件。
这个跟python语法逻辑是一样的,imgae赋值给变量,变量名存入列表里。
ls=[ ]
img = 'samplejpg'
lsappend(img)
你也可以再建一个列表,来存放image对应的坐标。
其实pygame中只能粘贴,不能移除,想要做到移除效果,有两个方法:1 把surface的坐标设为screen的外面,这样就看不到了,但是有可能会报错;2 建个列表,把需要显示出来的surface都放进去,循环blit列表里的surface,如果想移除,就把surface在列表里删除,这样被移除的surface就不会显示在screen里面了。
以上就是关于在 Pygame 游戏中放置平台全部的内容,包括:在 Pygame 游戏中放置平台、初级自学者求问怎么去掉pygame中blit的图像、用pygame画花 花的花瓣要用什么公式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)