feat: change level format
This commit is contained in:
parent
ba349a6104
commit
d7252f60d6
|
@ -13,6 +13,7 @@
|
||||||
["scene_info['ball_y']", "y coordinate of ball", "球的 y 座標"],
|
["scene_info['ball_y']", "y coordinate of ball", "球的 y 座標"],
|
||||||
["scene_info['score']", "score", "目前的分數"],
|
["scene_info['score']", "score", "目前的分數"],
|
||||||
["scene_info['foods']", "list of foods positions", "點點的位置清單"],
|
["scene_info['foods']", "list of foods positions", "點點的位置清單"],
|
||||||
|
// TODO 通關分數
|
||||||
["scene_info", "dictionary of all information", "包含所有資訊的字典"]
|
["scene_info", "dictionary of all information", "包含所有資訊的字典"]
|
||||||
],
|
],
|
||||||
"CONSTANT": [
|
"CONSTANT": [
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
[600, "bottom boundary", "下邊界"],
|
[600, "bottom boundary", "下邊界"],
|
||||||
[30, "ball width", "球身的寬度"],
|
[30, "ball width", "球身的寬度"],
|
||||||
[30, "ball height", "球身的高度"],
|
[30, "ball height", "球身的高度"],
|
||||||
|
// TODO
|
||||||
[8, "food width", "食物的寬度"],
|
[8, "food width", "食物的寬度"],
|
||||||
[8, "food height", "食物的高度"]
|
[8, "food height", "食物的高度"]
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,6 +5,6 @@
|
||||||
200
|
200
|
||||||
],
|
],
|
||||||
"score_to_pass": 10,
|
"score_to_pass": 10,
|
||||||
"green_food_count": 3,
|
"green_food_count": [3,0,0],
|
||||||
"black_food_count": 0
|
"black_food_count": [1,0,0]
|
||||||
}
|
}
|
46
src/game.py
46
src/game.py
|
@ -31,30 +31,28 @@ class EasyGame(PaiaGame):
|
||||||
self.scene = Scene(width=WIDTH, height=HEIGHT, color=BG_COLOR, bias_x=0, bias_y=0)
|
self.scene = Scene(width=WIDTH, height=HEIGHT, color=BG_COLOR, bias_x=0, bias_y=0)
|
||||||
self._level = level
|
self._level = level
|
||||||
self._level_file = level_file
|
self._level_file = level_file
|
||||||
|
self.foods = pygame.sprite.Group()
|
||||||
|
self.sound_controller = SoundController(sound)
|
||||||
|
|
||||||
if path.isfile(self._level_file) or self._level_file == "":
|
if path.isfile(self._level_file) or self._level_file == "":
|
||||||
# set by injected file
|
# set by injected file
|
||||||
self.set_game_params_by_file(self._level_file)
|
self._init_game_by_file(self._level_file)
|
||||||
pass
|
pass
|
||||||
elif self._level != -1:
|
elif self._level != -1:
|
||||||
# set by level number
|
# set by level number
|
||||||
self.set_game_params_by_level(self._level)
|
self._init_game_by_level(self._level)
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.set_game_params_by_level(1)
|
self._init_game_by_level(1)
|
||||||
|
|
||||||
self.foods = pygame.sprite.Group()
|
def _init_game_by_level(self, level: int):
|
||||||
self.sound_controller = SoundController(sound)
|
|
||||||
self._init_game()
|
|
||||||
|
|
||||||
def set_game_params_by_level(self, level: int):
|
|
||||||
level_file_path = os.path.join(LEVEL_PATH, f"{level:03d}.json")
|
level_file_path = os.path.join(LEVEL_PATH, f"{level:03d}.json")
|
||||||
self.set_game_params_by_file(level_file_path)
|
self._init_game_by_file(level_file_path)
|
||||||
|
|
||||||
def set_game_params_by_file(self, level_file_path: str):
|
def _init_game_by_file(self, level_file_path: str):
|
||||||
try:
|
try:
|
||||||
with open(level_file_path) as f:
|
with open(level_file_path) as f:
|
||||||
game_params = json.load(f)
|
game_params = json.load(f)
|
||||||
self._set_game_params(game_params)
|
|
||||||
except:
|
except:
|
||||||
# If the file doesn't exist, use default parameters
|
# If the file doesn't exist, use default parameters
|
||||||
print("此關卡檔案不存在,遊戲將會會自動使用第一關檔案 001.json。")
|
print("此關卡檔案不存在,遊戲將會會自動使用第一關檔案 001.json。")
|
||||||
|
@ -63,9 +61,8 @@ class EasyGame(PaiaGame):
|
||||||
game_params = json.load(f)
|
game_params = json.load(f)
|
||||||
self._level = 1
|
self._level = 1
|
||||||
self._level_file = None
|
self._level_file = None
|
||||||
self._set_game_params(game_params)
|
finally:
|
||||||
|
# set game params
|
||||||
def _set_game_params(self, game_params):
|
|
||||||
self._playground_w = int(game_params["playground_size"][0])
|
self._playground_w = int(game_params["playground_size"][0])
|
||||||
self._playground_h = int(game_params["playground_size"][1])
|
self._playground_h = int(game_params["playground_size"][1])
|
||||||
self.playground = pygame.Rect(
|
self.playground = pygame.Rect(
|
||||||
|
@ -73,22 +70,31 @@ class EasyGame(PaiaGame):
|
||||||
self._playground_w,
|
self._playground_w,
|
||||||
self._playground_h
|
self._playground_h
|
||||||
)
|
)
|
||||||
self._green_food_count = int(game_params["green_food_count"])
|
self._green_food_count = game_params["green_food_count"]
|
||||||
self._red_food_count = int(game_params["black_food_count"])
|
self._red_food_count = game_params["black_food_count"]
|
||||||
self._score_to_pass = int(game_params["score_to_pass"])
|
self._score_to_pass = int(game_params["score_to_pass"])
|
||||||
self._frame_limit = int(game_params["time_to_play"])
|
self._frame_limit = int(game_params["time_to_play"])
|
||||||
self.playground.center = (WIDTH / 2, HEIGHT / 2)
|
self.playground.center = (WIDTH / 2, HEIGHT / 2)
|
||||||
|
|
||||||
def _init_game(self):
|
# init game
|
||||||
self.ball = Ball()
|
self.ball = Ball()
|
||||||
self.foods.empty()
|
self.foods.empty()
|
||||||
self.score = 0
|
self.score = 0
|
||||||
self._create_foods(GoodFoodLv1, self._green_food_count)
|
|
||||||
self._create_foods(BadFoodLv1, self._red_food_count)
|
# todo validate food count
|
||||||
|
self._create_foods(GoodFoodLv1, self._green_food_count[0])
|
||||||
|
# self._create_foods(GoodFoodLv1, self._green_food_count[1])
|
||||||
|
# self._create_foods(GoodFoodLv1, self._green_food_count[2])
|
||||||
|
self._create_foods(BadFoodLv1, self._red_food_count[0])
|
||||||
|
# self._create_foods(BadFoodLv1, self._red_food_count[1])
|
||||||
|
# self._create_foods(BadFoodLv1, self._red_food_count[2])
|
||||||
|
|
||||||
self.frame_count = 0
|
self.frame_count = 0
|
||||||
self._frame_count_down = self._frame_limit
|
self._frame_count_down = self._frame_limit
|
||||||
self.sound_controller.play_music()
|
self.sound_controller.play_music()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update(self, commands):
|
def update(self, commands):
|
||||||
# handle command
|
# handle command
|
||||||
ai_1p_cmd = commands[get_ai_name(0)]
|
ai_1p_cmd = commands[get_ai_name(0)]
|
||||||
|
@ -171,7 +177,7 @@ class EasyGame(PaiaGame):
|
||||||
elif self.is_passed and self._level != -1:
|
elif self.is_passed and self._level != -1:
|
||||||
# win and use level will enter next level
|
# win and use level will enter next level
|
||||||
self._level += 1
|
self._level += 1
|
||||||
self.set_game_params_by_level(self._level)
|
self._init_game_by_level(self._level)
|
||||||
|
|
||||||
self._init_game()
|
self._init_game()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue