V-MAGE-DEMO / game /tempestrun_game.py
Fengx1n's picture
Initial DEMO
e53fda1
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