feat: add squid motion

This commit is contained in:
Kylin_on_Mac 2023-11-10 10:19:55 +08:00
parent 64259dfc24
commit c16de8e25d
5 changed files with 27 additions and 18 deletions

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

View File

@ -8,11 +8,11 @@ HEIGHT = 600
BG_COLOR = "#2B2B49"
PG_COLOR = "#B3E5FC"
# ball
BALL_COLOR = "#FFEB3B"
# ball -> squid
# BALL_COLOR = "#FFEB3B"
BALL_VEL = 10
BALL_H = 50
BALL_W = 50
BALL_H = 70
BALL_GROWTH_SCORE_STEP = 15
BALL_GROWTH_SIZE_STEP=10
BALL_GROWTH_VEL_STEP=3

View File

@ -11,11 +11,11 @@ from mlgame.view.decorator import check_game_progress, check_game_result
from mlgame.view.view_model import *
from .env import *
from .foods import *
from .game_object import Ball, LevelParams
from .game_object import Squid, LevelParams
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)
if ball_rect.left < playground.left:
ball_rect.left = playground.left
@ -79,7 +79,7 @@ class EasyGame(PaiaGame):
self.playground.center = (WIDTH / 2, HEIGHT / 2)
# init game
self.ball = Ball()
self.ball = Squid()
self.foods.empty()
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,
# 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")
squid_path = path.join(ASSET_IMAGE_DIR, "squid.png")
food01_path = path.join(ASSET_IMAGE_DIR, "food_01.png")
# TODO
food01_url = food01_path
bg_url = bg_path
squid_url = squid_path
scene_init_data = {
"scene": self.scene.__dict__,
"assets": [
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)
],
"background": [

View File

@ -1,14 +1,16 @@
import math
from typing import List
import pydantic
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
from .foods import Food
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):
@ -29,18 +31,19 @@ class LevelParams(pydantic.BaseModel):
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):
pygame.sprite.Sprite.__init__(self)
self.origin_image = pygame.Surface([BALL_W, BALL_H])
self.image = self.origin_image
self.color = BALL_COLOR
self.rect = self.image.get_rect()
self.rect.center = (400, 300)
self._score = 0
self._vel = BALL_VEL
self._lv = 1
self.angle =0
def update(self, motion):
# for motion in motions:
if motion == "UP":
@ -49,11 +52,12 @@ class Ball(pygame.sprite.Sprite):
self.rect.centery += self._vel
elif motion == "LEFT":
self.rect.centerx -= self._vel
# self.angle += 5
self.angle = self.ANGLE_TO_LEFT
elif motion == "RIGHT":
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)
# print(self.angle)
# center = self.rect.center
@ -62,13 +66,15 @@ class Ball(pygame.sprite.Sprite):
@property
def game_object_data(self):
return create_rect_view_data(
"ball",
return create_image_view_data(
"squid",
self.rect.x,
self.rect.y,
self.rect.width,
self.rect.height,
self.color
self.angle
)
def eat_food_and_change_level_and_play_sound(self, food: Food, sound_controller: SoundController):