import argparse import pygame, sys, os sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") from utils.dict_utils import get_with_warning from game.pygame_base import PygameBase from utils.config import Config import game.tempestrun.rendering.levelbuilder3d as levelbuilder3d import game.tempestrun.gameplay.gamestuff as gamestuff config = Config() class TempestRunGame(PygameBase): def __init__( self, output_dir, ): super(TempestRunGame, self).__init__(output_dir, "Tempest Run") self.current_mode.on_mode_start() self.valid_actions = ["JUMP", "LEFT", "RIGHT", "SLIDE", "RISE", "NONE"] self.sample_frames = 3 self.action_in_sample_frames = "NONE" def set_level_config(self, level_config): windowSize = 1024, 768 pygame.display.set_mode(windowSize) self.screen = pygame.display.get_surface() current_level = level_config.get("level", 0) self.current_mode = gamestuff.GameplayMode(self, current_level) def step(self, action, dt=None): print("step Action: ", action) events = [] if action == "JUMP": events.append(pygame.event.Event(pygame.KEYDOWN, {"key": pygame.K_UP})) elif action == "SLIDE": events.append(pygame.event.Event(pygame.KEYDOWN, {"key": pygame.K_DOWN})) elif action == "LEFT": events.append(pygame.event.Event(pygame.KEYDOWN, {"key": pygame.K_LEFT})) elif action == "RIGHT": events.append(pygame.event.Event(pygame.KEYDOWN, {"key": pygame.K_RIGHT})) elif action == "RISE": events.append(pygame.event.Event(pygame.KEYUP, {"key": pygame.K_DOWN})) print("step events: ", events) cur_mode = self.current_mode # print(dt) cur_mode.update(dt, events) cur_mode.draw_to_screen(self.screen) pygame.display.flip() if self.current_mode.player.is_dead(): self.running = False print("Dead. Score: {}".format(self.current_mode.player.get_score())) self.over = True self.score = self.current_mode.player.get_score() if self.over: info = f"Game Over, You got {self.score} scores." else: info = "Game is running." return self.over, info def human_mode_action(self, event): action = None if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: action = "JUMP" elif event.key == pygame.K_DOWN: action = "SLIDE" elif event.key == pygame.K_LEFT: action = "LEFT" elif event.key == pygame.K_RIGHT: action = "RIGHT" elif event.key == pygame.K_SPACE: action = "RISE" else: action = "NONE" return action def get_score(self): return { "score" : self.score, # win or lose "frames" : len(self.game_frames), "valid rate" : len(self.game_frames) / ( len(self.game_frames) + self.invalid_action_count ), } if __name__ == '__main__': print(os.path.dirname(os.path.abspath(__file__)) + "/..") parser = argparse.ArgumentParser() parser.add_argument("--levelConfig", type=str, default="./config/level_config/tempestrungame/level4.json", help="The path to the level config file.") args = parser.parse_args() levelConfig = args.levelConfig config.load_level_config(levelConfig) tempestrun_game = TempestRunGame("") tempestrun_game.run(None, human_mode=True) # python game/tempestrun_game.py