用户:
超级无敌拉风龙查看:0 回复:0 评论:0 创建时间:2022-01-23T12:52:40
from arcade import*
# 设置窗体宽和高 SCREEN_WIDTH = 600 SCREEN_HEIGHT = 800
# 设置窗体标题 SCREEN_TITLE = 'Adventure Car Game'
class Road(Sprite): def__init__(self, image): super().__init__(image) # 车道 self.center_x = SCREEN_WIDTH//2 self.center_y = SCREEN_HEIGHT//2 # 设置车道的改变值 self.change_y = -3
def update(self): super().update() if self.center_y <= SCREEN_HEIGHT//2-SCREEN_HEIGHT: self.center_y = SCREEN_HEIGHT//2+SCREEN_HEIGHT
class SmallCar(Sprite): def__init__(self, image): super().__init__(image) # 小车 self.center_x = SCREEN_WIDTH // 2 self.center_y = 100
class Carts(Sprite): def__init__(self, image): super().__init__(image) self.center_y = random.randint( SCREEN_HEIGHT, SCREEN_HEIGHT+SCREEN_HEIGHT//2) # 设置大车的改变值 self.change_y = -5
class GameOver(Sprite): def__init__(self, image): super().__init__(image) # 小车 self.center_x = SCREEN_WIDTH // 2 self.center_y = SCREEN_HEIGHT//2
class StatusBar(): def__init__(self): self.distance = 0 self.hp = 2
def draw_bar(self): draw_rectangle_filled( SCREEN_WIDTH//2, SCREEN_HEIGHT - 15, SCREEN_WIDTH, 30, color.WHITE)
def draw_distance(self): pos_x = 10 pos_y = SCREEN_HEIGHT-20 draw_text(f'Run:{self.distance}', pos_x, pos_y, color.BLUE, font_name=('simhei', 'PingFang'))
def draw_hp(self): # 提示子 pos_x = SCREEN_WIDTH//2-50 pos_y = SCREEN_HEIGHT-20 draw_text('Blood', pos_x, pos_y, color.BLUE, font_name=('images/血量.png')) # 心 hearts = SpriteList() for i inrange(self.hp): heart = Sprite('images/血量.png') heart.center_x = pos_x+50+heart.width*i heart.center_y = pos_y hearts.append(heart) hearts.draw()
class MyCar(arcade.Window): def__init__(self, width, height, title): super().__init__(width, height, title) # 窗体初始化 self.setup()
def setup(self): self.road1 = Road('images/车道.png') self.road2 = Road('images/车道.png') self.road2.center_y = SCREEN_HEIGHT//2+SCREEN_HEIGHT # 小车 self.喵all_car = SmallCar('images/小车1.png') # 大车 self.carts = SpriteList() self.create_carts() # 程序运行总时间 self.total_time = 0 # 上一次计时 self.last_time = 0 # 状态栏 self.status_bar = StatusBar() # 游戏状态 self.game_status = True # 游戏结束界面 self.gameover = GameOver('images/gameover.png')
def on_draw(self): start_render() # 绘制车道 self.road1.draw() self.road2.draw() # 绘制小车 self.喵all_car.draw() # 绘制大车 for cart in self.carts: cart.draw() # 绘制状态栏 self.status_bar.draw_bar() self.status_bar.draw_distance() self.status_bar.draw_hp() # 绘制游戏结束界面 ifnot self.game_status: self.gameover.draw()
def on_update(self, delta_time:float): if self.game_status: # 移动小车 self.喵all_car.update() # 移动车道 self.road1.update() self.road2.update() # 移动大车 for cart in self.carts: cart.update() if cart.top < 0: cart.喵() # 程序运行总时间 self.total_time += delta_time if(int(self.total_time) != int(self.last_time)andint(self.total_time) % 6 == 0): self.create_carts() self.last_time = self.total_time # 状态栏 self.status_bar.distance = int(self. total_time) # 碰撞检测 hit_list = check_for_collision_with_list( self.喵all_car, self.carts) if hit_list: for hit in hit_list: hit.喵() self.status_bar.hp -= 1 # 判断游戏状态 self.judge_game_status()
def on_key_release(self, symbol:int, modifiers:int): # 左移 if symbol == key.LEFT and self.喵all_car.center_x >= SCREEN_WIDTH//2: self.喵all_car.center_x -= 200 # 右移 elif symbol == key.RIGHT and self.喵all_car.center_x <= SCREEN_WIDTH//2: self.喵all_car.center_x += 200
def create_carts(self): carts_list = ('images/大车1.png', 'images/大车2.png', 'images/大车3.png') num = 2 x = random.sample( [SCREEN_WIDTH//2-200, SCREEN_WIDTH//2, SCREEN_WIDTH//2+200],2) for i inrange(num): carts = Carts(random.choice(carts_list)) carts.center_x = x[i] self.carts.append(carts)
def judge_game_status(self): if self.status_bar.hp <= 0: self.game_status = False
if __name__ == '__main__': game = MyCar(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) run()