- 一台电脑
- vscode
- python3.8.5
- 熟悉pygame模块的基本应用,pygame官网
# 屏幕大小的常量 SCREEN_RECT = pygame.Rect(0, 0, 720, 720) # 刷新的帧率 frame_PER_SEC = 60 # 创建小车的定时器常量 CREATE_CAR_EVENT = pygame.USEREVENT # 定义目标点的位置 TARGET_POSITION = [600,150] # 定义圆形小车的大小(直径) CAR_SIZE = 10 # 圆形小车颜色 CAR_COLOUR = [0,0,0] # 使用连线命令画小车移动轨迹时需要两个初始点(就是你定义的小车初始坐标点) LINES_LIST = [(100,620),(100,620)]三、小车精灵创建
- 创建小车精灵,可以在想要多个小车时,使用精灵组进行统一更改和调用。
- 本代码使用pygame.draw.circle创建的小车是一个圆,想要导入小车图片的可以去源码模仿游戏背景精灵创建方式,导入小车图片。
- 定义小车的加速,减速和带惯性的刹车
class CarSimulation(pygame.sprite.Sprite): """小车仿真精灵""" def __init__(self, positionx, positiony, car_speedx=1, car_speedy=1, k=1): #car_speedx和car_speedy是小车的x和y方向的速度值,k是用来定义小车的速度变化值 super().__init__() self.car_speedx = car_speedx self.car_speedy = car_speedy self.positionx = positionx self.positiony = positiony self.k = k def car_add(self,car_screen): pygame.draw.circle(car_screen,CAR_COLOUR,[self.positionx,self.positiony],CAR_SIZE,0) #最后一个0表示填充,数字代表线宽 def car_update(self): self.positionx += self.car_speedx self.positiony += self.car_speedy LINES_LIST.append((self.positionx,self.positiony)) # 控制小车不能离开屏幕 if (self.positionx - CAR_SIZE/2)< 0: self.positionx = CAR_SIZE/2 elif (self.positionx + CAR_SIZE/2)> SCREEN_RECT.right: self.positionx = SCREEN_RECT.right - CAR_SIZE/2 if (self.positiony - CAR_SIZE/2)< 0: self.positiony = CAR_SIZE/2 elif (self.positiony + CAR_SIZE/2)> SCREEN_RECT.bottom: self.positiony = SCREEN_RECT.bottom - CAR_SIZE/2 def accelerate(self): #小车加速 self.k += 1 def moderate(self): #小车减速 self.k -= 1 if self.k <=0: self.k=0 def bracking(self): #小车带有惯性的刹车 pygame.time.delay(500) self.car_speedx = 0 self.car_speedy = 0四、键盘控制
键盘的上下左右控制小车移动,z加速,x减速,空格惯性刹车(刹车后可以看到小车向前动了一段距离)
if keys_pressed[pygame.K_RIGHT]: self.car1.car_speedx = self.car1.k elif keys_pressed[pygame.K_LEFT]: self.car1.car_speedx = -self.car1.k else: self.car1.car_speedx = 0 if keys_pressed[pygame.K_UP]: self.car1.car_speedy = -self.car1.k elif keys_pressed[pygame.K_DOWN]: self.car1.car_speedy = self.car1.k else: self.car1.car_speedy = 0 if keys_pressed[pygame.K_z]: self.car1.accelerate() elif keys_pressed[pygame.K_x]: self.car1.moderate() elif keys_pressed[pygame.K_SPACE]: self.car1.bracking()五、轨迹
- 画出需要跟踪的路径(这里使用的路径是贝塞尔曲线,详细用法可以去pygame官网文档查看)
pygame.gfxdraw.bezier(self.screen, [(100,620),(300,300),(400,600),(600,150)], 5, (255,0,0))
- 画出小车跟踪的路径
pygame.draw.lines(self.screen, (0,0,0), 0, LINES_LIST)六、展示视频b站链接,知乎链接,youtube链接 七、预告
- 将使用本环境,结合深度强化学习代码,进行自主轨迹跟踪
- 将在本代码中加入可替换的路径规划程序,以代替自己设置的贝塞尔曲线
- 结合路径规划程序和深度强化学习程序,形成一套完整的轨迹规划仿真
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)