200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 《Python游戏编程入门》第二章编程挑战

《Python游戏编程入门》第二章编程挑战

时间:2021-06-29 15:17:53

相关推荐

《Python游戏编程入门》第二章编程挑战

转眼间就到六月份啦,隔一段时间就来写写博客来总结一下这段时间自己所学的东西。近期还是在学Python,Python真是一门神奇的语言,你越用越喜欢。哈哈哈!近期在学校图书馆看到了一本叫《Python游戏编程入门》的书,作者是Jonathan S.Harbour,在图书馆稍微看了一下,发现还是蛮有趣的,所以就果断借走了,嘻嘻嘻。

第一章是简单的介绍了Python的面向对象编程,不是很有意思就略过啦。

第二章就比较有意思了,用Python的Pygame库来话各种图:线段,弧线段,矩形,圆形,椭圆等等。

本次博客主要是记录第二章的挑战题,有兴趣的小伙伴可以去买或者借这本书我们一起学习。

环境:DeepinOS 15.5桌面版 PyCharm

Python 版本:3.5

使用pip3安装最新的Pygame

挑战第一题:

使用本章的实例作为起点,编写一个程序来绘制一个椭圆,这是我们在本章中没有介绍的形状。

思路:看到这个的第一反应是用上下两段弧线段组合成一个椭圆,因为在第二章前面的样例中有介绍Pygame绘制弧线段。然后试了一下发现有点复杂,然后就想它有没有画椭圆的函数,找了一下还真有!我们要先知道椭圆的英文是Ellipse。

Pygame库中的pygame.draw.ellipse(Surface,color,Rect,width)是用来绘制椭圆的,其中Surface是用来绘制这个椭圆的窗口,color就是椭圆的颜色,Rect是有四个参数的元组,个人推测这个椭圆是放在一个看不见的矩形中的,Rect的第一和第二个参数是这个矩形左上角这个点的位置(x,y),也就是说第一第二参数对应的是这个椭圆在这个Surface中的位置,Rect的第三第四个参数是这个矩形的长和宽,分别对应这个椭圆的长轴长在数学中用a表示,和椭圆的短轴长b,也就是说改变第三第四个参数就能改变椭圆的形状。width是这个这个椭圆边的粗细,0为一个实心的椭圆。

以下是完整代码

from pygame.locals import *import pygameimport syspygame.init()color = 255,0,0#颜色RGB码screen = pygame.display.set_mode((600,500))#初始化和设置窗口大小pygame.display.set_caption("This is ellipse")#设置窗口标题position = 200,180,200,150#Rect元组while True:#循环控制窗口一直存在for event in pygame.event.get():#刚才的推测可以在这个for循环里加一个print(event)来验证,具体怎么样就不详细说啦if event.type in(QUIT,KEYDOWN):#监听鼠标和键盘,点右上角的X或者长按键盘退出sys.exit()screen.fill((0,0,0))#窗口背景色填充pygame.draw.ellipse(screen,color,position,5)pygame.display.update()

运行结果

挑战第二题

选取一个示例,例如,绘制线条示例,修改它以便用随机的值绘制1000个线条。了解一下random库和random.randint()函数。

思路:这道题要画一千条线,那我们就先看一下pygame.draw.line(Surface,color,start_pos,end_pos,width)。Surface是窗口就不多说了,颜色也一样,主要是start_pos(起始点)end_pos(结束点),这里我们需要用random库获取四个随机的值,但每一个值都不能超过窗口的长和宽,或者为负数。width表示线段的粗细。

程序代码

import pygameimport randomimport sysimport timefrom pygame.locals import *pygame.init()screen = pygame.display.set_mode((600,500))pygame.display.set_caption("Random Lines")n = 1while n<1000:for event in pygame.event.get():if event.type in (QUIT,KEYDOWN):sys.exit()#随机起点和终点,随机颜色r,g,b的计算x = random.randint(0,600)y = random.randint(0,500)x1 = random.randint(0,600)y1 = random.randint(0,500)r = random.randint(0,255)g = random.randint(0,255)b = random.randint(0,255)color = r,g,bpygame.draw.line(screen,color,(x,y),(x1,y1),2)pygame.display.update()n+=1time.sleep(0.05)#一次做完延迟0.05秒做下一次,不然会一下子跑完。

运行结果

挑战第三题

绘制矩形示例是唯一一个绕着屏幕移动形状的示例,修改程序,以便任何时候,当矩形碰到屏幕边界时,矩形都将改变颜色。

思路:既然是要画矩形,就要用到pygame.draw.rect(Surface,color,rect,width),这个函数和椭圆那个很像,其它的参数都一样,我们主要关注rectrect也是有四个参数,第一第二个参数用pos_x,pos_y表示确定位置,第三第四确定长宽。既然是可移动的,那我们就要去改变pos_x,pos_y,同时我们还需要两个参数(vel_x,vel_y)来确定移动的速度。用pos_x+=vel_x,pos_y+=vel_y来移动矩形。为了保证矩形在这个窗口(Surface)里,当pos_x/pos_y大于窗口长/宽,或者小于0时,速度vel_x/vel_y变成它们的相反数,并且题目要求在碰到边界时改变矩形的颜色,我们就在碰到边界时,还是用random.randint()函数来获取三个值R、G、B来获取一个随机的颜色。

程序代码

import pygamefrom pygame.locals import *import sysimport timeimport randompygame.init()screen = pygame.display.set_mode((600,500))pygame.display.set_caption("Moving Rect")pos_x = 300pos_y = 250vel_x = 2vel_y = 1color = 0, 255, 0while True:screen.fill((0,0,0))pos_x += vel_x#移动矩形pos_y += vel_yr = random.randint(0,255)#获取RGBg = random.randint(0,255)b = random.randint(0,255)position = pos_x,pos_y,100,100#碰到边界改变vel_x,vel_y使矩形保持在窗口内,并且改变颜色if pos_x > 500 or pos_x < 0:vel_x = -vel_xcolor = r, g, bif pos_y > 400 or pos_y < 0:vel_y = -vel_ycolor = r, g, bpygame.draw.rect(screen, color, position, 0)pygame.display.update()for event in pygame.event.get():if event.type in (QUIT,K_ESCAPE):sys.exit()time.sleep(0.01)

运行结果

这里我发现一个有趣的事情,如果代码中不添加screen.fill((0,0,0))窗口填充色的画,程序运行时就是用这个矩形“画”线条,感兴趣的小伙伴可以去试一下。附上一张图:

..................................................ENDING...........................................................

好了本次博客就写到这啦,有什么问题在下方留言。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。