import pgzrun import random from pgzhelper import * # 游戏窗口大小 WIDTH = 1500 HEIGHT = 800 # 创建背景角色 bg1 = Actor('连续道路', topleft = (0,0)) bg2 = Actor('连续道路', topleft = (1500,0)) # 创建障碍物 obstacles = [] for _ in range(3): # 障碍物数量 x = random.randint(WIDTH, WIDTH + 1500) # 障碍物出现在屏幕右侧外 y = random.randint(100, HEIGHT - 50) obstacles.append(Actor('路障', (x, y))) # 创建摩托车 motor = Actor('摩托1', (200, HEIGHT // 2)) # 将摩托造型存放在列表内 motor.images = ['摩托1','摩托2'] # 创建终点线 line = Actor('终点线', topleft = (20000, 163)) # 初始化设置 speed = 15 flag = 0 def draw(): # 绘制连续背景 bg1.draw() bg2.draw() if flag == 1: music.stop() screen.blit('摩托成功', (0,0)) elif flag == 2: music.stop() screen.blit('摩托失败', (0,0)) else: # 绘制障碍物 for obs in obstacles: obs.draw() # 绘制摩托 motor.draw() # 绘制终点线 line.draw() # 绘制距离文字 x = int(line.x-motor.x) screen.draw.text(f'距终点:{x} m', (50,700), fontname = 'simkai', fontsize = 50) # 背景、终点线移动 def bg_move(): bg1.x -= speed bg2.x -= speed if bg1.right <= 0: bg1.left = bg2.right if bg2.right <= 0: bg2.left = bg1.right line.x -= speed # 更新障碍物位置 def obs_move(): for obs in obstacles: obs.x -= speed # 障碍物随背景一起移动 if obs.x < 0: obs.x = random.randint(WIDTH, WIDTH + 1500) # 障碍物继续出现在屏幕外 obs.y = random.randint(100, HEIGHT - 50) # 最后冲刺 def line_collide(): global flag if motor.collide_pixel(line): flag = 1 sounds.胜利.play() else: motor.x += 15 # 判断是否与障碍物相撞 def obs_collide(): global flag for obs in obstacles: if motor.collide_pixel(obs): flag = 2 sounds.失败.play() def update(): if flag == 0: if line.x > WIDTH - 200: # 正常行驶 bg_move() obs_move() else: # 最后冲刺 line_collide() # 控制赛车移动,限制不能出界 if keyboard.up and motor.top > 0: motor.y -= 7 if keyboard.down and motor.bottom < HEIGHT-50: motor.y += 7 # 是否碰撞障碍物 obs_collide() def change_image(): motor.next_image() clock.schedule_interval(change_image,0.2) music.play('速度与激情') pgzrun.go()