feat:提供玩家的速度尺寸給AI

This commit is contained in:
Kylin_on_Mac 2023-10-12 16:51:01 +08:00
parent 29c7463fe7
commit 35bcd39023
4 changed files with 30 additions and 23 deletions

View File

@ -101,8 +101,10 @@ class MLPlay:
```json
{
"frame": 25,
"ball_x": 425,
"ball_y": 306,
"player_x": 425,
"player_y": 306,
"player_size": 90,
"player_vel": 16,
"foods": [
{
"x": 656,
@ -125,8 +127,10 @@ class MLPlay:
```
- `frame`:遊戲畫面更新的編號
- `ball_x`:主角方塊的X座標,表示方塊的左邊座標值。
- `ball_y`:主角方塊的Y座標,表示方塊的上方座標值。
- `player_x`:主角方塊的X座標,表示方塊的`中心點`座標值,單位 pixel。
- `player_y`:主角方塊的Y座標,表示方塊的`中心點`座標值,單位 pixel。
- `player_size`:主角方塊的大小,表示方塊的長寬,單位 pixel。
- `player_vel`:主角方塊的速度,表示方塊每幀移動的像素,單位 pixel。
- `foods`:食物的清單,清單內每一個物件都是一個食物的左上方座標值,也會提供此食物是什麼類型和分數多少。
- `type` 食物類型: `GOOD_1`, `GOOD_2`, `GOOD_3`, `BAD_1`, `BAD_2`, `BAD_3`
- `score`:目前得到的分數

View File

@ -9,8 +9,10 @@
"SCENE_INFO": [
["scene_info['frame']", "# frame", "# 幀數"],
["scene_info['status']", "game status", "遊戲狀態"],
["scene_info['ball_x']", "x coordinate of ball", "球的 x 座標"],
["scene_info['ball_y']", "y coordinate of ball", "球的 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", "目前的分數"],
["scene_info['foods']", "list of foods positions", "點點的位置清單"],
["scene_info['score_to_pass']", "the score for next level", "通關分數"],
@ -21,8 +23,7 @@
[800, "right boundary", "右邊界"],
[0, "top boundary", "上邊界"],
[600, "bottom boundary", "下邊界"],
[30, "ball width", "球身的寬度"],
[30, "ball height", "球身的高度"],
[30, "player size", "玩家角色的初始大小"],
[8, "food lv1 size", "等級一食物的寬高度"],
[12, "food lv2 size", "等級二食物的高度"],
[16, "food lv3 size", "等級三食物的高度"]

View File

@ -82,7 +82,6 @@ class EasyGame(PaiaGame):
self.ball = Ball()
self.foods.empty()
# todo validate food count
if not isinstance(self._good_food_count,list) or len(self._good_food_count)<3:
raise Exception("你的關卡檔案格式有誤,請在'good_food_count' 欄位後面填入一個長度為3的陣列舉例 [1,2,3]")
elif not isinstance(self._bad_food_count, list) or len(self._bad_food_count) < 3:
@ -148,16 +147,18 @@ class EasyGame(PaiaGame):
to_players_data = {}
foods_data = []
for food in self.foods:
# TODO 確認要提供中心點座標還是左上角座標。
foods_data.append({"x": food.rect.x, "y": food.rect.y, "type": food.type, "score": food.score})
# TODO add velocity and ball_size
# TODO change ball to player
data_to_1p = {
"frame": self.frame_count,
"ball_x": self.ball.rect.centerx,
"ball_y": self.ball.rect.centery,
# TODO 確認要提供中心點座標還是左上角座標。
"player_x": self.ball.rect.centerx,
"player_y": self.ball.rect.centery,
"player_size":self.ball.rect.width,
"player_vel":self.ball.vel,
"foods": foods_data,
"score": self.ball.score,
"score_to_pass":self._score_to_pass,
"status": self.get_game_status()

View File

@ -19,7 +19,6 @@ class Ball(pygame.sprite.Sprite):
self._score = 0
self._vel = BALL_VEL
def update(self, motion):
# for motion in motions:
if motion == "UP":
@ -33,7 +32,6 @@ class Ball(pygame.sprite.Sprite):
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
@ -58,7 +56,10 @@ class Ball(pygame.sprite.Sprite):
self.rect.height = min(BALL_H + lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX)
self._vel = min(BALL_VEL + lv * BALL_GROWTH_VEL_STEP, BALL_VEL_MAX)
pass
@property
def score(self):
return self._score
@property
def vel(self):
return self._vel