path error
This commit is contained in:
parent
f20132efe3
commit
56d537529a
|
@ -1,192 +0,0 @@
|
|||
# Swimming-Squid
|
||||
這是一個簡單的遊戲,主要用來示範如何在PAIA 上發布一個遊戲
|
||||

|
||||
## Game Config
|
||||
遊戲參數定義檔案需要使用json格式,且需要命名為`game_config.json`
|
||||
```json
|
||||
{
|
||||
"game_name": "easy_game", // 遊戲的名稱
|
||||
"version": "1.0.1", // 版本號
|
||||
"url": "None", // github 專案連結
|
||||
"game_params": [ // 遊戲參數陣列
|
||||
{
|
||||
"name": "time_to_play", // 遊戲參數的名字
|
||||
"verbose": "遊戲總幀數", // 顯示文字
|
||||
"type": "int", // 類型 分為 int str
|
||||
"max": 2000, // int 可以設定 最大最小值
|
||||
"min": 600,
|
||||
"default": 600, // 遊戲參數的預設值
|
||||
// 參數的輔助說明
|
||||
"help": "set the limit of frame count , actually time will be revised according to your FPS .",
|
||||
|
||||
},
|
||||
{
|
||||
"name": "color",
|
||||
"verbose": "矩形顏色",
|
||||
"type": "str",
|
||||
"choices": [
|
||||
// 字串的選項需要有顯示文字(verbose) 與 實際值(value)
|
||||
{
|
||||
"verbose": "CYAN",
|
||||
"value": "00BCD4"
|
||||
},
|
||||
{
|
||||
"verbose": "YELLOW",
|
||||
"value": "FFEB3B"
|
||||
},
|
||||
{
|
||||
"verbose": "ORANGE",
|
||||
"value": "FF9800"
|
||||
}
|
||||
],
|
||||
"help": "set the color of rectangle",
|
||||
"default": "FFEB3B"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
## Game Blockly
|
||||
```json
|
||||
{
|
||||
"GAME_STATUS": [
|
||||
// 遊戲狀態的參數
|
||||
// ['python 變數名稱','display in English','中文的顯示文字']
|
||||
["GAME_ALIVE", "alive", "存活"],
|
||||
["GAME_PASS", "pass", "通關"],
|
||||
["GAME_OVER", "over", "失敗"]
|
||||
],
|
||||
"SCENE_INFO": [
|
||||
// 傳給MLPlay的資料內容
|
||||
// ["python code", "english", "chinese"],
|
||||
["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['score']", "x coordinate of platform", "平台的 x 座標"],
|
||||
["scene_info['foods']", "list of foods positions", "點點的位置清單"],
|
||||
["scene_info", "dictionary of all information", "包含所有資訊的字典"]
|
||||
],
|
||||
"CONSTANT": [
|
||||
// 提供給玩家的常數資訊
|
||||
// ["value", "english", "chinese"],
|
||||
[0, "left boundary", "左邊界"],
|
||||
[800, "right boundary", "右邊界"],
|
||||
[0, "top boundary", "上邊界"],
|
||||
[600, "bottom boundary", "下邊界"],
|
||||
[50, "ball width", "球身的寬度"],
|
||||
[50, "ball height", "球身的高度"],
|
||||
[8, "food width", "食物的寬度"],
|
||||
[8, "food height", "食物的高度"]
|
||||
],
|
||||
"ACTION": [
|
||||
// 讓玩家使用的遊戲指令
|
||||
// ["python code", "english", "chinese"],
|
||||
["UP", "moving up", "向上移動"],
|
||||
["DOWN", "moving down", "向下移動"],
|
||||
["LEFT", "moving left", "向左移動"],
|
||||
["RIGHT", "moving right", "向右移動"],
|
||||
["NONE", "doing nothing", "不動作"]
|
||||
|
||||
]
|
||||
}
|
||||
```
|
||||
## Game interface
|
||||
遊戲需要實作一個interface
|
||||
```python
|
||||
|
||||
class PaiaGame(abc.ABC):
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
初始化資料
|
||||
"""
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def update(self, commands):
|
||||
self.frame_count += 1
|
||||
|
||||
@abc.abstractmethod
|
||||
def game_to_player_data(self) -> dict:
|
||||
"""
|
||||
send something to game AI
|
||||
we could send different data to different ai
|
||||
"""
|
||||
to_players_data = {}
|
||||
|
||||
return to_players_data
|
||||
|
||||
@abc.abstractmethod
|
||||
def reset(self):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_scene_init_data(self) -> dict:
|
||||
"""
|
||||
Get the initial scene and object information for drawing on the web
|
||||
"""
|
||||
# TODO add music or sound
|
||||
scene_init_data = {"scene": self.scene.__dict__,
|
||||
"assets": [
|
||||
|
||||
],
|
||||
# "audios": {}
|
||||
}
|
||||
return scene_init_data
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_scene_progress_data(self) -> dict:
|
||||
"""
|
||||
Get the position of game objects for drawing on the web
|
||||
"""
|
||||
|
||||
scene_progress = {
|
||||
# background view data will be draw first
|
||||
"background": [],
|
||||
# game object view data will be draw on screen by order , and it could be shifted by WASD
|
||||
"object_list": [],
|
||||
"toggle": [],
|
||||
"foreground": [],
|
||||
# other information to display on web
|
||||
"user_info": [],
|
||||
# other information to display on web
|
||||
"game_sys_info": {}
|
||||
}
|
||||
return scene_progress
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_game_result(self) -> dict:
|
||||
"""
|
||||
send game result
|
||||
"""
|
||||
return {"frame_used": self.frame_count,
|
||||
"result": {
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_keyboard_command(self) -> dict:
|
||||
"""
|
||||
Define how your game will run by your keyboard
|
||||
"""
|
||||
cmd_1p = []
|
||||
|
||||
ai_1p = self.ai_clients()[0]["name"]
|
||||
return {ai_1p: cmd_1p}
|
||||
|
||||
@staticmethod
|
||||
def ai_clients() -> list:
|
||||
"""
|
||||
let MLGame know how to parse your ai,
|
||||
you can also use this names to get different cmd and send different data to each ai client
|
||||
"""
|
||||
return [
|
||||
{"name": "1P"}
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
## Flowchart
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"time_to_play": 1400,
|
||||
"playground_size_w":700,
|
||||
"playground_size_w":650,
|
||||
"playground_size_h":600,
|
||||
"score_to_pass": 80,
|
||||
"food_1": 6,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"time_to_play": 600,
|
||||
"playground_size_w":650,
|
||||
"playground_size_w":700,
|
||||
"playground_size_h":550,
|
||||
"score_to_pass": 10,
|
||||
"food_1": 3,
|
||||
|
|
|
@ -76,7 +76,7 @@ GARBAGE02_PATH = path.join(ASSET_IMAGE_DIR, "garbage_02.png")
|
|||
GARBAGE03_PATH = path.join(ASSET_IMAGE_DIR, "garbage_03.png")
|
||||
|
||||
|
||||
ASSET_IMG_URL = "https://raw.githubusercontent.com/PAIA-Playful-AI-Arena/swimming-squid/main/asset/img/"
|
||||
ASSET_IMG_URL = "https://raw.githubusercontent.com/PAIA-Playful-AI-Arena/swimming-squid-battle/main/asset/img/"
|
||||
BG_URL = ASSET_IMG_URL + "background.png"
|
||||
SQUID_URL = ASSET_IMG_URL + "squid.png"
|
||||
SQUID2_URL = ASSET_IMG_URL + "squid2.png"
|
||||
|
@ -92,6 +92,3 @@ FOOD03_R_URL = ASSET_IMG_URL + "food_03_R.png"
|
|||
GARBAGE01_URL = ASSET_IMG_URL + "garbage_01.png"
|
||||
GARBAGE02_URL = ASSET_IMG_URL + "garbage_02.png"
|
||||
GARBAGE03_URL = ASSET_IMG_URL + "garbage_03.png"
|
||||
# BAR_URL = "https://raw.githubusercontent.com/PAIA/dont_touch/master/asset/image/bar.png"
|
||||
|
||||
# https://raw.githubusercontent.com/PAIA-Playful-AI-Arena/easy_game/main/asset/img/background.jpg
|
|
@ -280,7 +280,7 @@ class SwimmingSquid(PaiaGame):
|
|||
@property
|
||||
def time_out(self):
|
||||
if self.frame_count >= self._frame_limit:
|
||||
if self.squid1.score == self.squid2.score and self._overtime_count < 3: # 延長賽
|
||||
if self.squid1.score == self.squid2.score and self._overtime_count < 1: # 延長賽
|
||||
self._frame_limit += 300
|
||||
self._overtime_count += 1
|
||||
print("超時延長賽")
|
||||
|
|
Loading…
Reference in New Issue