? ? ? ? Pygame顾名思义是用于Python编写游戏的模块。通过此模块,我们可以很方便地编写2D小游戏,比如飞机大战、坦克等等(虽然界面比较丑),也可以做3D的,但是需要深入掌握代码才行。其实我想学这个的主要目的是:作为深度强化学习模拟的小环境(2D)。
?
pygame官网:
https://www.pygame.org/news
????????官网上有很多的案例,下载其源码分析,我们可以很快构建自己的小游戏或者模拟环境。
目录
画直线
?画多直线构成辐射状
为什么要学pygame画辐射线
参考
画直线
import pygame
def DrawLine(screen):
mycolor = (255, 0, 255)
start = (0, 0)
end = (500, 300)
width = 10
pygame.draw.line(screen, mycolor, start, end, width)
def main():
pygame.init()
pygame.display.set_caption("Draw Line")
screen = pygame.display.set_mode([600, 500])
mRuning = True
#游戏是一帧一帧地执行的,每帧都包括检测和绘制
while mRuning:
#=============================一帧=================================#
#检测事件
for event in pygame.event.get():
if event.type == pygame.locals.QUIT:
mRuning = False
#绘制
screen.fill((0, 0, 0)) #背景填充黑色
DrawLine(screen)
#==============================End=================================#
#刷新
pygame.display.update()
pygame.quit()
main()
? ? ? ? 分析可知,pygame的screen的坐标系是:
?画多直线构成辐射状
? ? ? ? 首先看下小学知识:
? ? ? 在固定中心点的情况下,我们只需要求出每条线的终点,那么就可以画出每条线。
import pygame
import math
# from pygame.locals import *
def DrawRadiationLine(screen):
centerPoint = (200, 200) #中心点
mycolor = (255, 0, 255) #线条颜色
lineNum = 20 #线条数量
lineWidth = 2 #线条宽度
Radius = 150 #半径
Angle = 0 #起始角度为0,则第一条直线在中心点正右方
Angular_interval = 10 #间隔角度
for i in range(lineNum):
x = centerPoint[0] + Radius * math.cos(Angle / 180 * math.pi)
y = centerPoint[1] + Radius * math.sin(Angle / 180 * math.pi)
pygame.draw.line(screen, mycolor, centerPoint, (x, y), lineWidth)
Angle = Angle + Angular_interval
def main():
pygame.init() #初始化
pygame.display.set_caption("Draw Line") #设置标题
screen = pygame.display.set_mode([600, 500]) #设置主界面大小
mRuning = True
#游戏是一帧一帧地执行的,每帧都包括检测、绘制和更新
while mRuning:
#=============================一帧=================================#
#检测事件
for event in pygame.event.get():
if event.type == pygame.locals.QUIT:
mRuning = False
#绘制
screen.fill((0, 0, 0)) #背景填充黑色
DrawRadiationLine(screen)
#==============================End=================================#
#刷新
pygame.display.update()
pygame.quit()
main()
为什么要学pygame画辐射线
? ? ? ? 辐射线相当于激光雷达,测量控制对象与障碍物的距离。以后我将为深度强化学习案例Flappy Bird 添加检测线。如下:
? ? ? ? pygame的其他操作参考帮助文档?
pygame文档:
Pygame Front Page — pygame v2.1.1 documentationhttps://www.pygame.org/docs/
参考
【1】python pygame系列:画线(draw line) - 知乎
|