diff --git a/asset/img/food_01.png b/asset/img/food_01_L.png similarity index 100% rename from asset/img/food_01.png rename to asset/img/food_01_L.png diff --git a/asset/img/food_01_R.png b/asset/img/food_01_R.png new file mode 100644 index 0000000..7812e60 Binary files /dev/null and b/asset/img/food_01_R.png differ diff --git a/asset/img/food_02_L.png b/asset/img/food_02_L.png new file mode 100644 index 0000000..5cff68e Binary files /dev/null and b/asset/img/food_02_L.png differ diff --git a/asset/img/food_02.png b/asset/img/food_02_R.png similarity index 100% rename from asset/img/food_02.png rename to asset/img/food_02_R.png diff --git a/asset/img/food_03.png b/asset/img/food_03_L.png similarity index 100% rename from asset/img/food_03.png rename to asset/img/food_03_L.png diff --git a/asset/img/food_03_R.png b/asset/img/food_03_R.png new file mode 100644 index 0000000..52e6fbd Binary files /dev/null and b/asset/img/food_03_R.png differ diff --git a/blockly.json b/blockly.json index d3059b8..9a25dc5 100644 --- a/blockly.json +++ b/blockly.json @@ -9,8 +9,8 @@ "SCENE_INFO": [ ["scene_info['frame']", "# frame", "# 幀數"], ["scene_info['status']", "game status", "遊戲狀態"], - ["scene_info['player_x']", "x coordinate of player", "玩家角色的 x 座標"], - ["scene_info['player_y']", "y coordinate of player", "玩家角色的 y 座標"], + ["scene_info['player_x']", "x coordinate of player", "玩家角色的中心 x 座標"], + ["scene_info['player_y']", "y coordinate of player", "玩家角色的中心 y 座標"], ["scene_info['player_size']", "y coordinate of player", "玩家角色的大小"], ["scene_info['player_vel']", "velocity of player", "玩家角色的速度"], ["scene_info['score']", "score", "目前的分數"], diff --git a/src/env.py b/src/env.py index 4874465..d98d213 100644 --- a/src/env.py +++ b/src/env.py @@ -13,7 +13,7 @@ PG_COLOR = "#B3E5FC" SQUID_VEL = 10 SQUID_W = 50 SQUID_H = 70 -SQUID_GROWTH_SCORE_STEP = 15 +SQUID_GROWTH_SCORE_STEP = 10 SQUID_GROWTH_SIZE_STEP=10 SQUID_GROWTH_VEL_STEP=3 SQUID_SIZE_MAX = 125 @@ -44,18 +44,34 @@ MUSIC_PATH = path.join(path.dirname(__file__), "..", "asset", "music") BG_PATH = path.join(ASSET_IMAGE_DIR, "background.png") SQUID_PATH = path.join(ASSET_IMAGE_DIR, "squid.png") -FOOD01_PATH = path.join(ASSET_IMAGE_DIR, "food_01.png") -FOOD02_PATH = path.join(ASSET_IMAGE_DIR, "food_02.png") -FOOD03_PATH = path.join(ASSET_IMAGE_DIR, "food_03.png") + +IMG_ID_FOOD01_L = "food_01_L" +IMG_ID_FOOD02_L = "food_02_L" +IMG_ID_FOOD03_L = "food_03_L" +IMG_ID_FOOD01_R = "food_01_R" +IMG_ID_FOOD02_R = "food_02_R" +IMG_ID_FOOD03_R = "food_03_R" + +FOOD01_L_PATH = path.join(ASSET_IMAGE_DIR, "food_01_L.png") +FOOD02_L_PATH = path.join(ASSET_IMAGE_DIR, "food_02_L.png") +FOOD03_L_PATH = path.join(ASSET_IMAGE_DIR, "food_03_L.png") +FOOD01_R_PATH = path.join(ASSET_IMAGE_DIR, "food_01_R.png") +FOOD02_R_PATH = path.join(ASSET_IMAGE_DIR, "food_02_R.png") +FOOD03_R_PATH = path.join(ASSET_IMAGE_DIR, "food_03_R.png") + GARBAGE01_PATH = path.join(ASSET_IMAGE_DIR, "garbage_01.png") GARBAGE02_PATH = path.join(ASSET_IMAGE_DIR, "garbage_02.png") GARBAGE03_PATH = path.join(ASSET_IMAGE_DIR, "garbage_03.png") +# TODO check url BG_URL = BG_PATH SQUID_URL = SQUID_PATH -FOOD01_URL = FOOD01_PATH -FOOD02_URL = FOOD02_PATH -FOOD03_URL = FOOD03_PATH +FOOD01_L_URL = FOOD01_L_PATH +FOOD02_L_URL = FOOD02_L_PATH +FOOD03_L_URL = FOOD03_L_PATH +FOOD01_R_URL = FOOD01_R_PATH +FOOD02_R_URL = FOOD02_R_PATH +FOOD03_R_URL = FOOD03_R_PATH GARBAGE01_URL = GARBAGE01_PATH GARBAGE02_URL = GARBAGE02_PATH GARBAGE03_URL = GARBAGE03_PATH diff --git a/src/foods.py b/src/foods.py index 00194d7..d076f40 100644 --- a/src/foods.py +++ b/src/foods.py @@ -4,7 +4,7 @@ import pygame.sprite from pygame import Rect from mlgame.view.view_model import create_image_view_data -from .env import FoodTypeEnum, FOOD_LV1_SIZE, FOOD_LV2_SIZE, FOOD_LV3_SIZE +from .env import * FOOD1_VEL = 1 FOOD2_VEL = 2 @@ -47,9 +47,13 @@ class Food(pygame.sprite.Sprite): class Food1(Food): def __init__(self, group): - super().__init__(group, FoodTypeEnum.FOOD_1, "food01", [FOOD_LV1_SIZE, FOOD_LV1_SIZE], + super().__init__(group, FoodTypeEnum.FOOD_1, "food01-L", [FOOD_LV1_SIZE, FOOD_LV1_SIZE], 1) - self._vel = FOOD1_VEL + self._vel = FOOD1_VEL * random.choice([-1,1]) + if self._vel >0: + self.image_id=IMG_ID_FOOD01_R + elif self._vel <0: + self.image_id=IMG_ID_FOOD01_L def update(self, playground: Rect, squid: pygame.sprite.Sprite): @@ -60,13 +64,16 @@ class Food1(Food): if self.rect.left < playground.left and self._vel < 0.0: self._vel = FOOD1_VEL + self.image_id = IMG_ID_FOOD01_R elif self.rect.right > playground.right and self._vel > 0.0: self._vel = - FOOD1_VEL + self.image_id = IMG_ID_FOOD01_L + class Food2(Food): def __init__(self, group): - super().__init__(group, FoodTypeEnum.FOOD_2, "food02", [FOOD_LV2_SIZE, FOOD_LV2_SIZE], 2) + super().__init__(group, FoodTypeEnum.FOOD_2, "food02-L", [FOOD_LV2_SIZE, FOOD_LV2_SIZE], 2) self._vel = FOOD2_VEL def update(self, playground: Rect, squid: pygame.sprite.Sprite): @@ -84,7 +91,7 @@ class Food2(Food): class Food3(Food): def __init__(self, group): - super().__init__(group, FoodTypeEnum.FOOD_3, "food03", [FOOD_LV3_SIZE, FOOD_LV3_SIZE], 4) + super().__init__(group, FoodTypeEnum.FOOD_3, "food03-L", [FOOD_LV3_SIZE, FOOD_LV3_SIZE], 4) self._vel = FOOD3_VEL def update(self, playground: Rect, squid: pygame.sprite.Sprite): diff --git a/src/game.py b/src/game.py index 986714d..532044b 100644 --- a/src/game.py +++ b/src/game.py @@ -51,7 +51,6 @@ class EasyGame(PaiaGame): self._init_game() - @timeit_in_perf def _init_game_by_file(self, level_file_path: str): try: with open(level_file_path) as f: @@ -62,7 +61,7 @@ class EasyGame(PaiaGame): print("此關卡檔案不存在,遊戲將會會自動使用第一關檔案 001.json。") print("This level file is not existed , game will load 001.json automatically.") with open(os.path.join(LEVEL_PATH, "001.json")) as f: - game_params = json.load(f) + game_params = LevelParams(**json.load(f)) self._level = 1 self._level_file = "" finally: @@ -212,9 +211,12 @@ class EasyGame(PaiaGame): "assets": [ create_asset_init_data("bg", 1000, 1000, BG_PATH, BG_URL), create_asset_init_data("squid", SQUID_W, SQUID_H, SQUID_PATH, SQUID_URL), - create_asset_init_data("food01", FOOD_LV1_SIZE, FOOD_LV1_SIZE, FOOD01_PATH, FOOD01_URL), - create_asset_init_data("food02", FOOD_LV2_SIZE,FOOD_LV2_SIZE, FOOD02_PATH, FOOD02_URL), - create_asset_init_data("food03", FOOD_LV3_SIZE,FOOD_LV3_SIZE, FOOD03_PATH, FOOD03_URL), + create_asset_init_data(IMG_ID_FOOD01_L, FOOD_LV1_SIZE, FOOD_LV1_SIZE, FOOD01_L_PATH, FOOD01_L_URL), + create_asset_init_data(IMG_ID_FOOD02_L, FOOD_LV2_SIZE, FOOD_LV2_SIZE, FOOD02_L_PATH, FOOD02_L_URL), + create_asset_init_data(IMG_ID_FOOD03_L, FOOD_LV3_SIZE, FOOD_LV3_SIZE, FOOD03_L_PATH, FOOD03_L_URL), + create_asset_init_data(IMG_ID_FOOD01_R, FOOD_LV1_SIZE, FOOD_LV1_SIZE, FOOD01_R_PATH, FOOD01_R_URL), + create_asset_init_data(IMG_ID_FOOD02_R, FOOD_LV2_SIZE, FOOD_LV2_SIZE, FOOD02_R_PATH, FOOD02_R_URL), + create_asset_init_data(IMG_ID_FOOD03_R, FOOD_LV3_SIZE, FOOD_LV3_SIZE, FOOD03_R_PATH, FOOD03_R_URL), create_asset_init_data("garbage01", FOOD_LV1_SIZE,FOOD_LV1_SIZE, GARBAGE01_PATH, GARBAGE01_URL), create_asset_init_data("garbage02", FOOD_LV2_SIZE,FOOD_LV2_SIZE, GARBAGE02_PATH, GARBAGE02_URL), create_asset_init_data("garbage03", FOOD_LV3_SIZE,FOOD_LV3_SIZE, GARBAGE03_PATH, GARBAGE03_URL),