feat: add squid motion
This commit is contained in:
parent
64259dfc24
commit
c16de8e25d
Binary file not shown.
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 225 KiB |
Binary file not shown.
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 191 KiB |
|
@ -8,11 +8,11 @@ HEIGHT = 600
|
||||||
BG_COLOR = "#2B2B49"
|
BG_COLOR = "#2B2B49"
|
||||||
PG_COLOR = "#B3E5FC"
|
PG_COLOR = "#B3E5FC"
|
||||||
|
|
||||||
# ball
|
# ball -> squid
|
||||||
BALL_COLOR = "#FFEB3B"
|
# BALL_COLOR = "#FFEB3B"
|
||||||
BALL_VEL = 10
|
BALL_VEL = 10
|
||||||
BALL_H = 50
|
|
||||||
BALL_W = 50
|
BALL_W = 50
|
||||||
|
BALL_H = 70
|
||||||
BALL_GROWTH_SCORE_STEP = 15
|
BALL_GROWTH_SCORE_STEP = 15
|
||||||
BALL_GROWTH_SIZE_STEP=10
|
BALL_GROWTH_SIZE_STEP=10
|
||||||
BALL_GROWTH_VEL_STEP=3
|
BALL_GROWTH_VEL_STEP=3
|
||||||
|
|
11
src/game.py
11
src/game.py
|
@ -11,11 +11,11 @@ from mlgame.view.decorator import check_game_progress, check_game_result
|
||||||
from mlgame.view.view_model import *
|
from mlgame.view.view_model import *
|
||||||
from .env import *
|
from .env import *
|
||||||
from .foods import *
|
from .foods import *
|
||||||
from .game_object import Ball, LevelParams
|
from .game_object import Squid, LevelParams
|
||||||
from .sound_controller import SoundController
|
from .sound_controller import SoundController
|
||||||
|
|
||||||
|
|
||||||
def revise_ball(ball: Ball, playground: pygame.Rect):
|
def revise_ball(ball: Squid, playground: pygame.Rect):
|
||||||
ball_rect = copy.deepcopy(ball.rect)
|
ball_rect = copy.deepcopy(ball.rect)
|
||||||
if ball_rect.left < playground.left:
|
if ball_rect.left < playground.left:
|
||||||
ball_rect.left = playground.left
|
ball_rect.left = playground.left
|
||||||
|
@ -79,7 +79,7 @@ class EasyGame(PaiaGame):
|
||||||
self.playground.center = (WIDTH / 2, HEIGHT / 2)
|
self.playground.center = (WIDTH / 2, HEIGHT / 2)
|
||||||
|
|
||||||
# init game
|
# init game
|
||||||
self.ball = Ball()
|
self.ball = Squid()
|
||||||
self.foods.empty()
|
self.foods.empty()
|
||||||
|
|
||||||
if not isinstance(self._good_food_count, list) or len(self._good_food_count) < 3:
|
if not isinstance(self._good_food_count, list) or len(self._good_food_count) < 3:
|
||||||
|
@ -217,15 +217,18 @@ class EasyGame(PaiaGame):
|
||||||
# "background", WIDTH, HEIGHT, bg_path,
|
# "background", WIDTH, HEIGHT, bg_path,
|
||||||
# github_raw_url="https://raw.githubusercontent.com/PAIA-Playful-AI-Arena/easy_game/main/asset/img/background.jpg")
|
# github_raw_url="https://raw.githubusercontent.com/PAIA-Playful-AI-Arena/easy_game/main/asset/img/background.jpg")
|
||||||
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")
|
||||||
food01_path = path.join(ASSET_IMAGE_DIR, "food_01.png")
|
food01_path = path.join(ASSET_IMAGE_DIR, "food_01.png")
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
food01_url = food01_path
|
food01_url = food01_path
|
||||||
bg_url = bg_path
|
bg_url = bg_path
|
||||||
|
squid_url = squid_path
|
||||||
scene_init_data = {
|
scene_init_data = {
|
||||||
"scene": self.scene.__dict__,
|
"scene": self.scene.__dict__,
|
||||||
"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", BALL_W, BALL_H, squid_path, squid_url),
|
||||||
create_asset_init_data("food01", 20, 20, food01_path, food01_url)
|
create_asset_init_data("food01", 20, 20, food01_path, food01_url)
|
||||||
],
|
],
|
||||||
"background": [
|
"background": [
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
import math
|
import math
|
||||||
|
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
import pydantic
|
import pydantic
|
||||||
import pygame.sprite
|
import pygame.sprite
|
||||||
|
|
||||||
from .env import BALL_COLOR, BALL_VEL, BALL_H, BALL_W, BALL_GROWTH_SCORE_STEP, BALL_GROWTH_SIZE_STEP, \
|
from .env import BALL_VEL, BALL_H, BALL_W, BALL_GROWTH_SCORE_STEP, BALL_GROWTH_SIZE_STEP, \
|
||||||
BALL_SIZE_MAX, BALL_GROWTH_VEL_STEP, BALL_VEL_MAX, BALL_SIZE_MIN, BALL_VEL_MIN
|
BALL_SIZE_MAX, BALL_GROWTH_VEL_STEP, BALL_VEL_MAX, BALL_SIZE_MIN, BALL_VEL_MIN
|
||||||
from .foods import Food
|
from .foods import Food
|
||||||
from .sound_controller import SoundController
|
from .sound_controller import SoundController
|
||||||
from mlgame.view.view_model import create_rect_view_data
|
from mlgame.view.view_model import create_rect_view_data, create_image_view_data
|
||||||
|
|
||||||
|
|
||||||
class LevelParams(pydantic.BaseModel):
|
class LevelParams(pydantic.BaseModel):
|
||||||
|
@ -29,18 +31,19 @@ class LevelParams(pydantic.BaseModel):
|
||||||
garbage_3: int = 0
|
garbage_3: int = 0
|
||||||
|
|
||||||
|
|
||||||
class Ball(pygame.sprite.Sprite):
|
class Squid(pygame.sprite.Sprite):
|
||||||
|
ANGLE_TO_RIGHT = math.radians(-10)
|
||||||
|
ANGLE_TO_LEFT = math.radians(10)
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pygame.sprite.Sprite.__init__(self)
|
pygame.sprite.Sprite.__init__(self)
|
||||||
self.origin_image = pygame.Surface([BALL_W, BALL_H])
|
self.origin_image = pygame.Surface([BALL_W, BALL_H])
|
||||||
self.image = self.origin_image
|
self.image = self.origin_image
|
||||||
self.color = BALL_COLOR
|
|
||||||
self.rect = self.image.get_rect()
|
self.rect = self.image.get_rect()
|
||||||
self.rect.center = (400, 300)
|
self.rect.center = (400, 300)
|
||||||
self._score = 0
|
self._score = 0
|
||||||
self._vel = BALL_VEL
|
self._vel = BALL_VEL
|
||||||
self._lv = 1
|
self._lv = 1
|
||||||
|
self.angle =0
|
||||||
def update(self, motion):
|
def update(self, motion):
|
||||||
# for motion in motions:
|
# for motion in motions:
|
||||||
if motion == "UP":
|
if motion == "UP":
|
||||||
|
@ -49,11 +52,12 @@ class Ball(pygame.sprite.Sprite):
|
||||||
self.rect.centery += self._vel
|
self.rect.centery += self._vel
|
||||||
elif motion == "LEFT":
|
elif motion == "LEFT":
|
||||||
self.rect.centerx -= self._vel
|
self.rect.centerx -= self._vel
|
||||||
# self.angle += 5
|
self.angle = self.ANGLE_TO_LEFT
|
||||||
elif motion == "RIGHT":
|
elif motion == "RIGHT":
|
||||||
self.rect.centerx += self._vel
|
self.rect.centerx += self._vel
|
||||||
# self.angle -= 5
|
self.angle = self.ANGLE_TO_RIGHT
|
||||||
|
else:
|
||||||
|
self.angle = 0
|
||||||
# self.image = pygame.transform.rotate(self.origin_image, self.angle)
|
# self.image = pygame.transform.rotate(self.origin_image, self.angle)
|
||||||
# print(self.angle)
|
# print(self.angle)
|
||||||
# center = self.rect.center
|
# center = self.rect.center
|
||||||
|
@ -62,13 +66,15 @@ class Ball(pygame.sprite.Sprite):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def game_object_data(self):
|
def game_object_data(self):
|
||||||
return create_rect_view_data(
|
|
||||||
"ball",
|
return create_image_view_data(
|
||||||
|
"squid",
|
||||||
self.rect.x,
|
self.rect.x,
|
||||||
self.rect.y,
|
self.rect.y,
|
||||||
self.rect.width,
|
self.rect.width,
|
||||||
self.rect.height,
|
self.rect.height,
|
||||||
self.color
|
self.angle
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def eat_food_and_change_level_and_play_sound(self, food: Food, sound_controller: SoundController):
|
def eat_food_and_change_level_and_play_sound(self, food: Food, sound_controller: SoundController):
|
||||||
|
|
Loading…
Reference in New Issue