Spaces:
Sleeping
Sleeping
| 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 |