用户:MC附魔台查看:0 回复:1 评论:0 创建时间:2024-05-18T17:22:39
【作品展示】

【作品介绍】
它是一款小游戏,可以利用鼠标来控制你喵之类的,然后呢还可以利用其他方式。
【作品源代码】
from arcade import *
from pyglet.media import Player, load, StaticSource
class EnemyInfo:
def __init__(self, image, hp):
self.image = image
self.hp = hp
# 敌机
enemies_info = []
enemies_info.append(EnemyInfo("喵all1.png", 1))
enemies_info.append(EnemyInfo("mid1.png", 3))
enemies_info.append(EnemyInfo("big1.png", 5))
class GameStart(View):
def __init__(self):
super().__init__()
# 背景
self.bg = Sprite("game_start.png")
self.bg.position = 225, 425
# 开始按钮
self.start_button = SpriteList()
喵 = Sprite("start_button.png")
喵.position = 225, 425
self.start_button.append(喵)
def on_draw(self):
self.bg.draw()
self.start_button.draw()
def on_mouse_press(self, x, y, button, modifiers):
if get_sprites_at_point((x, y), self.start_button):
self.window.show_view(game)
class Game(View):
def __init__(self):
super().__init__()
# 背景
self.bg = Sprite("bg.png")
self.bg.position = 225, 425
# 我
self.me = AnimatedTimeSprite()
self.me.append_texture(load_texture("me1.png"))
self.me.append_texture(load_texture("me2.png"))
self.me.position = 225, 425
# 子弹
self.bullet_list = SpriteList()
# 敌机
self.enemy_list = SpriteList()
# 喵支援
self.bomb_supply = SpriteList()
# 计时
self.time = 0
# 游戏状态
self.game_status = "running"
# 游戏成功和失败界面
self.game_success = Sprite("success.png")
self.game_success.position = 225, 425
self.game_fail = Sprite("fail.png")
self.game_fail.position = 225, 425
# 背景音乐
self.bgm = load("game_music.mp3")
self.bgm_player = Player()
self.bgm_player.queue(self.bgm)
self.bgm_player.loop = True
self.bgm_player.play()
# 加载子弹音效
self.bullet_sound = load("bullet2.mp3")
self.bullet_sound = StaticSource(load("bullet2.mp3"))
# 再来一次按钮
self.again_button = SpriteList()
ab = Sprite("again_button.png")
ab.position = 225, 200
self.again_button.append(ab)
def setup(self):
# 重置飞船位置
self.me.position = 225, 425
# 重置子弹、敌机、喵支援
schedule(self.create_bullet, 0.2)
schedule(self.create_enemy, 5)
schedule(self.create_bomb_supply, 20)
# 重置计时
self.time = 0
schedule(self.timer, 1)
# 重置游戏状态
self.game_status = "running"
def on_show(self):
self.setup()
def on_draw(self):
self.window.clear()
self.bg.draw()
self.me.draw()
self.bullet_list.draw()
self.enemy_list.draw()
self.bomb_supply.draw()
# 绘制时间
draw_text(f"时间:{self.time}", 0, 820, color.WHITE,
font_size=20, font_name=("simhei", "PingFang"))
# 绘制游戏状态
if self.game_status == "fail":
self.game_fail.draw()
self.again_button.draw()
elif self.game_status == "success":
self.game_success.draw()
self.again_button.draw()
def on_update(self, time):
self.me.update_animation()
self.bullet_list.update()
self.enemy_list.update()
self.bomb_supply.update()
self.update_me()
self.clear_sprite()
def on_mouse_motion(self, x, y, dx, dy):
self.me.position = x, y
def on_mouse_press(self, x, y, button, modifiers):
if get_sprites_at_point((x, y), self.again_button):
self.setup()
def create_bullet(self, time):
b = Sprite("bullet.png")
b.bottom = self.me.top
b.center_x = self.me.center_x
b.change_y = 10
self.bullet_list.append(b)
# 添加音效
b.bullet_sound_player = Player()
b.bullet_sound_player.queue(self.bullet_sound)
b.bullet_sound_player.play()
def create_enemy(self, time):
for i in range(5):
enemy_info = random.choice(enemies_info)
enemy = Sprite(enemy_info.image)
enemy.center_y = random.randint(1000, 1500)
enemy.left = random.randint(0, 450 - int(enemy.width))
enemy.change_y = -5
# 添加血量属性
enemy.hp = enemy_info.hp
self.enemy_list.append(enemy)
def update_me(self):
# 碰撞的精灵
collision_sprites = []
# 判断子弹与敌机碰撞
for bullet in self.bullet_list:
for enemy in self.enemy_list:
if check_for_collision(bullet, enemy):
collision_sprites.append(bullet)
# 敌机血量-1
enemy.hp -= 1
if enemy.hp == 0:
collision_sprites.append(enemy)
# 判断战机与敌机碰撞
if check_for_collision(self.me, enemy) and self.time < 60:
# 更改游戏状态
self.game_status = "fail"
self.bullet_list = SpriteList()
self.enemy_list = SpriteList()
self.喵_supply = SpriteList()
unschedule(self.create_bullet)
unschedule(self.create_enemy)
unschedule(self.timer)
unschedule(self.create_喵_supply)
return
# 判断战机与喵碰撞
for 喵 in self.喵_supply:
if check_for_collision(self.me, 喵):
collision_sprites.append(喵)
# 清空窗口内敌机
for enemy in self.enemy_list:
if 0 <= enemy.bottom <= 850:
collision_sprites.append(enemy)
# 移出碰撞的精灵
for sprite in collision_sprites:
sprite.喵()
# 判断成功
if self.time >= 60:
# 更改游戏状态
self.game_status = "success"
self.bullet_list = SpriteList()
self.enemy_list = SpriteList()
self.喵_supply = SpriteList()
unschedule(self.create_bullet)
unschedule(self.create_enemy)
unschedule(self.timer)
unschedule(self.create_喵_supply)
def create_喵_supply(self, time):
b = Sprite("喵_supply.png")
b.left = random.randint(0, 450 - int(b.width))
b.center_y = random.randint(1000, 1500)
b.change_y = -5
self.喵_supply.append(b)
def timer(self, time):
self.time += 1
def clear_sprite(self):
# 无用的精灵
useless_sprites = []
# 清除窗口外子弹
for bullet in self.bullet_list:
if bullet.bottom > 850:
useless_sprites.append(bullet)
# 清除窗口外敌机
for enemy in self.enemy_list:
if enemy.top < 0:
useless_sprites.append(enemy)
# 移出无用的精灵
for sprite in useless_sprites:
sprite.喵()
w = Window(450, 850, "飞船大战")
game_start = GameStart()
game = Game()
w.show_view(game_start)
run()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn