72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
import math
|
|
|
|
import pygame.sprite
|
|
|
|
from games.easy_game.src.env import BALL_COLOR, 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 games.easy_game.src.foods import Food
|
|
from games.easy_game.src.sound_controller import SoundController
|
|
from mlgame.view.view_model import create_rect_view_data
|
|
|
|
|
|
class Ball(pygame.sprite.Sprite):
|
|
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
|
|
|
|
def update(self, motion):
|
|
# for motion in motions:
|
|
if motion == "UP":
|
|
self.rect.centery -= self._vel
|
|
elif motion == "DOWN":
|
|
self.rect.centery += self._vel
|
|
elif motion == "LEFT":
|
|
self.rect.centerx -= self._vel
|
|
# self.angle += 5
|
|
elif motion == "RIGHT":
|
|
self.rect.centerx += self._vel
|
|
# self.angle -= 5
|
|
|
|
# self.image = pygame.transform.rotate(self.origin_image, self.angle)
|
|
# print(self.angle)
|
|
# center = self.rect.center
|
|
# self.rect = self.image.get_rect()
|
|
# self.rect.center = center
|
|
|
|
@property
|
|
def game_object_data(self):
|
|
return create_rect_view_data(
|
|
"ball",
|
|
self.rect.x,
|
|
self.rect.y,
|
|
self.rect.width,
|
|
self.rect.height,
|
|
self.color
|
|
)
|
|
|
|
def eat_food_and_change_level_and_play_sound(self, food: Food,sound_controller:SoundController):
|
|
self._score += food.score
|
|
new_lv = math.ceil((self._score-BALL_GROWTH_SCORE_STEP + 1) / BALL_GROWTH_SCORE_STEP)
|
|
self.rect.width = max(BALL_SIZE_MIN,min(BALL_W + new_lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX))
|
|
self.rect.height = max(BALL_SIZE_MIN,min(BALL_H + new_lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX))
|
|
self._vel = max(BALL_VEL_MIN,min(BALL_VEL + new_lv * BALL_GROWTH_VEL_STEP, BALL_VEL_MAX))
|
|
if new_lv > self._lv:
|
|
sound_controller.play_lv_up()
|
|
elif new_lv < self._lv:
|
|
sound_controller.play_lv_down()
|
|
self._lv=new_lv
|
|
pass
|
|
|
|
@property
|
|
def score(self):
|
|
return self._score
|
|
@property
|
|
def vel(self):
|
|
return self._vel |