用户:
优雅的星能猫SNHj查看:0 回复:0 评论:0 创建时间:2020-09-06T22:27:32
【作品展示】

【作品介绍】
名为:佐助的试炼按上下左右来进行移动
闪开佐助的攻击
难度会使时间而增加
撑过80秒且血量不为0,胜。
反之,败。
加油吧!
【作品源代码】
from arcade import *
from PIL import Image
import random
import time
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 800
SCREEN_TITLE = '躲开电球'
GRAPH_WIDTH = 500
GRAPH_HEIGHT = 400
SPEED = 4
LEFT = 0
RIGHT = 1
GAME_NANDU = 0
#定义人物
class Personage(Sprite):
def __init__(self,image):
super().__init__(image)
self.center_x = SCREEN_WIDTH // 2
self.center_y = GRAPH_HEIGHT + 335//2 +3
#定义雷电球
class Lightning(Sprite):
def __init__(self,image):
super().__init__(image)
#雷电球在上,左,右方向随机形成
#在左右个方向形成的概率相同(建议用choices)
self.fangxiang = random.choice(['left','right'])
if self.fangxiang == 'right':
self.center_x = random.randint(190, 230)
self.center_y = random.randint(0, GRAPH_HEIGHT)
self.change_x = SPEED
elif self.fangxiang == 'left':
self.center_x = random.randint(760, 800)
self.center_y = random.randint(0, GRAPH_HEIGHT)
self.change_x = -SPEED
#定义角色
class Blood(Sprite):
def __init__(self,image):
super().__init__(image)
self.center_x = SCREEN_WIDTH//2
self.center_y = 200
def update(self):
super().update()
if self.top >GRAPH_HEIGHT:
self.top = GRAPH_HEIGHT
if self.bottom < 0:
self.bottom = 0
if self.left < SCREEN_WIDTH//2 - GRAPH_WIDTH // 2 :
self.left = SCREEN_WIDTH//2 - GRAPH_WIDTH // 2
if self.right > SCREEN_WIDTH // 2 + GRAPH_WIDTH // 2:
self.right = SCREEN_WIDTH // 2 + GRAPH_WIDTH // 2
class GameOver(Sprite):
def __init__(self,image):
super().__init__(image)
self.center_x = SCREEN_WIDTH // 2
self.center_y = SCREEN_HEIGHT // 2
class GameWin(Sprite):
def __init__(self, image):
super().__init__(image)
self.center_x = SCREEN_WIDTH // 2
self.center_y = SCREEN_HEIGHT // 2
class Fire(Sprite):
def __init__(self,image):
super().__init__(image)
face = random.choice(['left', 'right'])
Speed = [4, 5,6,7]
speed = random.choice(Speed)
#让敌人可以从左,右两面生成,并改变面向
if face == 'left':
self.center_x = SCREEN_WIDTH//2 - GRAPH_WIDTH // 2 - 40
self.center_y = random.randint(0, GRAPH_HEIGHT)
self.change_x = -speed
elif face == 'right':
self.center_x = SCREEN_WIDTH//2 + GRAPH_WIDTH // 2 + 40
self.center_y = random.randint(0, GRAPH_HEIGHT)
self.change_x = speed
class QiLin(Sprite):
def __init__(self, image):
super().__init__(image)
face = random.choice(['left', 'right'])
speed =7
#让敌人可以从左,右两面生成,并改变面向
if face == 'left':
self.center_x = SCREEN_WIDTH + 60
self.change_x = -speed
self.append_texture(load_texture(image, mirrored=True, scale=1))
self.set_texture(RIGHT)
self.center_y = random.randint(0, GRAPH_HEIGHT)
elif face == 'right':
self.center_x = -60
self.change_x = speed
#把图片左右镜像颠倒
self.center_y = random.randint(0, GRAPH_HEIGHT)
# class XueBao(Sprite):
# def __init__(self,image):
# super().__init__(image)
# self.center_x = random.randint(250,750)
# self.center_y = 500
# def update(self):
# self.change_y = -4
class MyGame(arcade.Window):
def __init__(self,width,height,title):
super().__init__(width,height,title)
self.setup()
def setup(self):
Image.open('Images/电球.png').resize((SCREEN_WIDTH // 15,SCREEN_HEIGHT // 12)).save('Images/new_电球.png')
Image.open('Images/game_failure.png').resize((700,400)).save('Images/new_game_failure.png')
Image.open('Images/game_win.png').resize((700,400)).save('Images/new_game_win.png')
Image.open('Images/火球.png').resize((80,80)).save('Images/new_火球.png')
Image.open('Images/麒麟.png').resize((150, 120)).save('Images/new_麒麟.png')
set_background_color(color.BLACK)
self.sprite_list_qilin = SpriteList()
self.sprite_blood = Blood('Images/血量.png')
self.sprite_personage = Personage('Images/佐助.png')
self.sprite_game_over = GameOver('Images/new_game_failure.png')
self.sprite_game_win = GameWin('Images/new_game_win.png')
#self.sprite_xuebao = XueBao('Images/血包.png')
self.sprite_list_fire = SpriteList()
self.sprite_list_lightning = SpriteList()
self.total_time = 0
self.last_time = 0
self.lightning_number = 2
self.fire_number = 1
self.sprite_list_hp = SpriteList()
self.hp = 100
self.game_over = False
self.dian = load_sound('Images/雷鸣.wav')
play_sound(self.dian)
self.time = 0
def on_draw(self):
start_render()
self.draw_tuxin()
self.sprite_list_fire.draw()
draw_text('接招吧!雷遁.雷光球!', 100, 600, color.SKY_BLUE,
font_name=('simhei', 'PingFang'), font_size=20)
if int(self.total_time) > 60:
draw_text('洗内!雷遁.麒麟!', 100, 500, color.BLUE,
font_name=('simhei', 'PingFang'), font_size=20)
self.sprite_personage.draw()
self.sprite_blood.draw()
self.sprite_list_lightning.draw()
self.sprite_list_hp.draw()
self.sprite_list_qilin.draw()
# if int(self.total_time) == 10:
# self.sprite_xuebao.draw()
self.HP()
if self.hp <= 0:
self.sprite_game_over.draw()
self.game_over = True
if int(self.total_time) % 2 == 0:
draw_text('请按下TAB键重新开始', 300, 100, color.RED,
font_name=('simhei', 'PingFang'), font_size=30)
if self.time >= 80:
self.game_over = True
self.sprite_game_win.draw()
draw_text('请按下TAB键重新开始', 300, 100, color.RED,
font_name=('simhei', 'PingFang'), font_size=30)
if int(self.total_time) > 20:
draw_text('可以,再来---火遁.豪火球', 100, 550, color.RED,
font_name=('simhei', 'PingFang'), font_size=20)
self.Time()
def on_update(self, delta_time):
self.total_time += delta_time
if self.game_over:
return
if int(self.total_time) != int(self.last_time) and int(self.total_time) % 3 == 0:
self.create_lightning()
self.last_time = self.total_time
if int(self.total_time) > 20:
self.create_fire()
if int(self.total_time) > 60:
self.create_qilin()
if int(self.total_time) == 60:
self.lightning_number += 1
self.time = int(self.total_time)
if int(self.total_time) != int(self.last_time) and int(self.total_time) % 85 == 0 :
play_sound(self.dian)
self.last_time = self.total_time
self.sprite_blood.update()
self.sprite_list_lightning.update()
self.sprite_list_fire.update()
self.sprite_list_qilin.update()
# self.sprite_xuebao.update()
for enemy in self.sprite_list_lightning:
if enemy.center_x < SCREEN_WIDTH//2 - GRAPH_WIDTH//2 - 60 or enemy.center_x > SCREEN_WIDTH//2 +GRAPH_WIDTH // 2 + 60:
enemy.喵()
for enemy in self.sprite_list_fire:
if enemy.center_x < SCREEN_WIDTH//2 - GRAPH_WIDTH//2 - 60 or enemy.center_x > SCREEN_WIDTH//2 + GRAPH_WIDTH // 2 + 60:
enemy.喵()
hit_list1 = check_for_collision_with_list(
self.sprite_blood, self.sprite_list_lightning)
hit_list2 = check_for_collision_with_list(
self.sprite_blood, self.sprite_list_fire)
hit_list3 = check_for_collision_with_list(
self.sprite_blood, self.sprite_list_qilin)
if hit_list1:
for hit in hit_list1:
hit.喵()
self.sprite_blood.喵()
self.hp = self.hp - 25
if hit_list2:
for hit in hit_list2:
hit.喵()
self.sprite_blood.喵()
self.hp = self.hp - 50
if hit_list3:
for hit in hit_list3:
hit.喵()
self.sprite_blood.喵()
self.hp = self.hp - 100
def on_key_press(self, symbol, modifiers):
if symbol == key.UP:
self.sprite_blood.change_y= SPEED
elif symbol == key.DOWN:
self.sprite_blood.change_y = -SPEED
elif symbol == key.RIGHT:
self.sprite_blood.change_x = SPEED
elif symbol == key.LEFT:
self.sprite_blood.change_x = -SPEED
elif symbol == key.TAB:
if self.game_over:
self.setup()
elif symbol == key.RETURN:
image = get_image(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH)
image.save('截图.png')
def on_key_release(self, symbol, modifiers):
if symbol == key.UP or key.DOWN:
self.sprite_blood.change_y = 0
if symbol == key.LEFT or key.RIGHT:
self.sprite_blood.change_x = 0
def draw_tuxin(self):
draw_rectangle_outline(SCREEN_WIDTH//2,200,GRAPH_WIDTH,GRAPH_HEIGHT,color.RED,5)
def create_lightning(self):
for i in range(self.lightning_number):
lightning_sprite = Lightning('Images/new_电球.png')
self.sprite_list_lightning.append(lightning_sprite)
def HP(self):
draw_text(f'HP:{self.hp}', 150, 450, color.RED,
font_name=('simhei', 'PingFang'), font_size=25)
def create_fire(self):
for i in range(self.fire_number):
fire_sprite = Lightning('Images/new_火球.png')
self.sprite_list_fire.append(fire_sprite)
def Time(self):
draw_text(f'Time:{self.time}/80', 150,400,
color.YELLOW, font_name=('simhei', 'PingFang'), font_size=25)
def create_qilin(self):
for i in range(1):
qilin_sprite = QiLin('Images/new_麒麟.png')
self.sprite_list_qilin.append(qilin_sprite)
if __name__ == '__main__':
game = MyGame(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_TITLE)
run()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn