""" 急速返航.py 这是一个躲避小游戏。 太空火箭执行完任务后要返回地球。 可是地球周围布满了太空垃圾,唉,都是人类自己造的孽啊。 请按左右方向箭头,操作火箭避开垃圾,成功返航。 本程序用到了爆炸函数,注意它有一个times参数,这是爆炸次数! 本程序需要Python精灵模块v1.36版本支持。如果没有安装,请在cmd输入以下命令安装。 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites --upgrade """ from sprites import * # 从精灵模块导入所有命令 from pygame import mixer # 从pygame模块导入混音器 mixer.init() # 混音器初始化 deathsnd = mixer.Sound('res/DEATH.wav') # 实例化死亡声效 mixer.music.load('res/未开始音乐.mp3') # 加载音乐 mixer.music.play(-1,0) # 循环播放音乐 lines = ['res/line1.png','res/line2.png','res/line3.png'] screen = Screen() # 生成屏幕对象 screen.setup(480,360) # 设置屏幕宽高 screen.title('急速返航_躲避游戏_李兴球博客') screen.bgpic('res/星空.png') # 设置屏幕背景图 earth = Sprite('earth',pos=(0,380)) # 地球角色 # endpic是最后要显示的图片 endpic = Sprite(['res/成功.png','res/失败.png'], visible=False,pos=(0,1000)) line = Sprite(lines,visible=False) # 新建线条角色 dynamic_bgs = [] for _ in range(20): b = line.clone() # 克隆一条背景线 b.shapeindex(random.randint(0,2)) # 随机选择一个造型 x = random.randint(-240,240) # 生成x坐标 y = random.randint(360,3600) # 生成y坐标 b.goto(x,y) # 到达这个x,y坐标 dynamic_bgs.append(b) # 添加到列表中 b.show() # 显示 pics1 = ['rocket0.png','rocket1.png','rocket2.png'] rocket = Sprite(pics1,pos=(0,-130)) # 序幕阶段,火箭是不动的,背景自上而下移动 clock = Clock() # 新建时钟对象 for _ in range(600): # 重复200次 rocket.nextshape() # 火箭下一个造型 for bg in dynamic_bgs: # 迭代背景表中的线条 bg.addy(-50) # 线条往下移50个单位 if bg.ycor() < -180: # 如果线条y坐标小于-180 x = random.randint(-240,240) # 生成一个x坐标 y = random.randint(360,3600) # 生成一个y坐标 bg.goto(x,y) # 线条到这个坐标 screen.update() # 更新屏幕显示 clock.tick(60) # 固定fps为60帧 [bg.remove() for bg in dynamic_bgs] # 删除所有 mixer.music.stop() # 停止播放音乐 mixer.music.load('res/循环音乐.mp3') # 加载音乐 mixer.music.play(-1,0) # 循环播放音乐 # 进入第二阶段,太空垃圾来了,需要按左右方向箭头操作它躲避 garbs = [] garbage = Sprite('garbage',visible=False,pos=(0,300)) for _ in range(30): g = garbage.clone() g.shapeindex(random.randint(0,2)) x = random.randint(-240,240) y = random.randint(360,3600) g.goto(x,y) garbs.append(g) g.show() counter = 0 leftkey = Key("Left") rightkey = Key("Right") screen.listen() isdead = False # 描述是否碰到太空垃圾的变量 for _ in range(2000): rocket.nextshape() if leftkey.down():rocket.addx(-4) if rightkey.down():rocket.addx(4) if rocket.overlap_with(garbs): rocket.hide() isdead = True break for g in garbs: g.addy(-6) if g.ycor() < -180: g.goto(random.randint(-240,240), random.randint(360,3600)) screen.update() clock.tick(60) # 第三阶段,根据火箭是否爆炸决定显示什么 mixer.music.stop() pass # 这里的代码省略了.... screen.mainloop()
需要全部源代码和素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)