feat: update motion of food01
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 395 KiB |
After Width: | Height: | Size: 415 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 346 KiB |
|
@ -9,8 +9,8 @@
|
||||||
"SCENE_INFO": [
|
"SCENE_INFO": [
|
||||||
["scene_info['frame']", "# frame", "# 幀數"],
|
["scene_info['frame']", "# frame", "# 幀數"],
|
||||||
["scene_info['status']", "game status", "遊戲狀態"],
|
["scene_info['status']", "game status", "遊戲狀態"],
|
||||||
["scene_info['player_x']", "x coordinate of player", "玩家角色的 x 座標"],
|
["scene_info['player_x']", "x coordinate of player", "玩家角色的中心 x 座標"],
|
||||||
["scene_info['player_y']", "y coordinate of player", "玩家角色的 y 座標"],
|
["scene_info['player_y']", "y coordinate of player", "玩家角色的中心 y 座標"],
|
||||||
["scene_info['player_size']", "y coordinate of player", "玩家角色的大小"],
|
["scene_info['player_size']", "y coordinate of player", "玩家角色的大小"],
|
||||||
["scene_info['player_vel']", "velocity of player", "玩家角色的速度"],
|
["scene_info['player_vel']", "velocity of player", "玩家角色的速度"],
|
||||||
["scene_info['score']", "score", "目前的分數"],
|
["scene_info['score']", "score", "目前的分數"],
|
||||||
|
|
30
src/env.py
|
@ -13,7 +13,7 @@ PG_COLOR = "#B3E5FC"
|
||||||
SQUID_VEL = 10
|
SQUID_VEL = 10
|
||||||
SQUID_W = 50
|
SQUID_W = 50
|
||||||
SQUID_H = 70
|
SQUID_H = 70
|
||||||
SQUID_GROWTH_SCORE_STEP = 15
|
SQUID_GROWTH_SCORE_STEP = 10
|
||||||
SQUID_GROWTH_SIZE_STEP=10
|
SQUID_GROWTH_SIZE_STEP=10
|
||||||
SQUID_GROWTH_VEL_STEP=3
|
SQUID_GROWTH_VEL_STEP=3
|
||||||
SQUID_SIZE_MAX = 125
|
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")
|
BG_PATH = path.join(ASSET_IMAGE_DIR, "background.png")
|
||||||
SQUID_PATH = path.join(ASSET_IMAGE_DIR, "squid.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")
|
IMG_ID_FOOD01_L = "food_01_L"
|
||||||
FOOD03_PATH = path.join(ASSET_IMAGE_DIR, "food_03.png")
|
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")
|
GARBAGE01_PATH = path.join(ASSET_IMAGE_DIR, "garbage_01.png")
|
||||||
GARBAGE02_PATH = path.join(ASSET_IMAGE_DIR, "garbage_02.png")
|
GARBAGE02_PATH = path.join(ASSET_IMAGE_DIR, "garbage_02.png")
|
||||||
GARBAGE03_PATH = path.join(ASSET_IMAGE_DIR, "garbage_03.png")
|
GARBAGE03_PATH = path.join(ASSET_IMAGE_DIR, "garbage_03.png")
|
||||||
|
|
||||||
|
# TODO check url
|
||||||
BG_URL = BG_PATH
|
BG_URL = BG_PATH
|
||||||
SQUID_URL = SQUID_PATH
|
SQUID_URL = SQUID_PATH
|
||||||
FOOD01_URL = FOOD01_PATH
|
FOOD01_L_URL = FOOD01_L_PATH
|
||||||
FOOD02_URL = FOOD02_PATH
|
FOOD02_L_URL = FOOD02_L_PATH
|
||||||
FOOD03_URL = FOOD03_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
|
GARBAGE01_URL = GARBAGE01_PATH
|
||||||
GARBAGE02_URL = GARBAGE02_PATH
|
GARBAGE02_URL = GARBAGE02_PATH
|
||||||
GARBAGE03_URL = GARBAGE03_PATH
|
GARBAGE03_URL = GARBAGE03_PATH
|
||||||
|
|
17
src/foods.py
|
@ -4,7 +4,7 @@ import pygame.sprite
|
||||||
from pygame import Rect
|
from pygame import Rect
|
||||||
|
|
||||||
from mlgame.view.view_model import create_image_view_data
|
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
|
FOOD1_VEL = 1
|
||||||
FOOD2_VEL = 2
|
FOOD2_VEL = 2
|
||||||
|
@ -47,9 +47,13 @@ class Food(pygame.sprite.Sprite):
|
||||||
|
|
||||||
class Food1(Food):
|
class Food1(Food):
|
||||||
def __init__(self, group):
|
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)
|
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):
|
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:
|
if self.rect.left < playground.left and self._vel < 0.0:
|
||||||
self._vel = FOOD1_VEL
|
self._vel = FOOD1_VEL
|
||||||
|
self.image_id = IMG_ID_FOOD01_R
|
||||||
elif self.rect.right > playground.right and self._vel > 0.0:
|
elif self.rect.right > playground.right and self._vel > 0.0:
|
||||||
self._vel = - FOOD1_VEL
|
self._vel = - FOOD1_VEL
|
||||||
|
self.image_id = IMG_ID_FOOD01_L
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Food2(Food):
|
class Food2(Food):
|
||||||
def __init__(self, group):
|
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
|
self._vel = FOOD2_VEL
|
||||||
|
|
||||||
def update(self, playground: Rect, squid: pygame.sprite.Sprite):
|
def update(self, playground: Rect, squid: pygame.sprite.Sprite):
|
||||||
|
@ -84,7 +91,7 @@ class Food2(Food):
|
||||||
|
|
||||||
class Food3(Food):
|
class Food3(Food):
|
||||||
def __init__(self, group):
|
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
|
self._vel = FOOD3_VEL
|
||||||
|
|
||||||
def update(self, playground: Rect, squid: pygame.sprite.Sprite):
|
def update(self, playground: Rect, squid: pygame.sprite.Sprite):
|
||||||
|
|
12
src/game.py
|
@ -51,7 +51,6 @@ class EasyGame(PaiaGame):
|
||||||
|
|
||||||
self._init_game()
|
self._init_game()
|
||||||
|
|
||||||
@timeit_in_perf
|
|
||||||
def _init_game_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:
|
||||||
|
@ -62,7 +61,7 @@ class EasyGame(PaiaGame):
|
||||||
print("此關卡檔案不存在,遊戲將會會自動使用第一關檔案 001.json。")
|
print("此關卡檔案不存在,遊戲將會會自動使用第一關檔案 001.json。")
|
||||||
print("This level file is not existed , game will load 001.json automatically.")
|
print("This level file is not existed , game will load 001.json automatically.")
|
||||||
with open(os.path.join(LEVEL_PATH, "001.json")) as f:
|
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 = 1
|
||||||
self._level_file = ""
|
self._level_file = ""
|
||||||
finally:
|
finally:
|
||||||
|
@ -212,9 +211,12 @@ class EasyGame(PaiaGame):
|
||||||
"assets": [
|
"assets": [
|
||||||
create_asset_init_data("bg", 1000, 1000, BG_PATH, BG_URL),
|
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("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(IMG_ID_FOOD01_L, FOOD_LV1_SIZE, FOOD_LV1_SIZE, FOOD01_L_PATH, FOOD01_L_URL),
|
||||||
create_asset_init_data("food02", FOOD_LV2_SIZE,FOOD_LV2_SIZE, FOOD02_PATH, FOOD02_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("food03", FOOD_LV3_SIZE,FOOD_LV3_SIZE, FOOD03_PATH, FOOD03_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("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("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),
|
create_asset_init_data("garbage03", FOOD_LV3_SIZE,FOOD_LV3_SIZE, GARBAGE03_PATH, GARBAGE03_URL),
|
||||||
|
|