# ゲーム参加方法
ランダムに動くAIを作ります
client_deno/client_random.jsを作成します
```javascript=
import { Algorithm } from "./algorithm.js";
export class ClientRandom extends Algorithm {
onInit(boardPoints, agentNum, turnNum) {
}
onTurn(field, pid, agents, turn) {
}
}
if (import.meta.main) {
const a = new ClientFirst();
a.match({
id: "ai-first",
name: "AI-first",
spec: "",
password: "ai-first-pw",
});
}
```
onInitはゲーム開始前の処理です
* boardPoints マスの点数の配列
* agentNum エージェント数
* turnNum 総ターン数
onTurnはターンごとの思考です
* field マスの状況
* pid プレイヤー番号(0~)
* agents エージェントの状況
* turn 現在ターン数
* 戻り値 エージェントの次の手
onTurnを実装します
```javascript=
onTurn(field, pid, agents, turn) {
const w = field[0].length;
const h = field.length;
DIR = [
[0, -1],
[1, -1],
[1, 0],
[1, 1],
[0, 1],
[-1, 1],
[-1, 0],
[-1, -1],
];
const actions = [];
for (let i = 0; i < agents.length; i++) {
const a = agents[i];
if (a.x === -1) {
const x = Math.floor(Math.random() * w);
const y = Math.floor(Math.random() * h);
actions.push([i, "PUT", x, y]);
} else {
const n = Math.floor(Math.random() * DIR.length);
const [dx, dy] = this.DIR[n];
actions.push([i, "MOVE", a.x + dx, a.y + dy]);
}
}
return actions;
}
```
エージェント座標が-1は未配置です
エージェントの次の手を配列で返します
AIを起動します
```shell
$ deno run -A client_deno/client_random.js
```
対戦サイトにアクセスします
https://kakomimasu.com/
「最新のゲームビューアはこちらから」を開きます
onInitの引数の詳しい説明です
* boardPoints
* マスの点数です
* 二次元配列です(添字は[y番号][x番号])
* field
* フィールドの状況です
* 二次元配列です(添字は[y番号][x番号])
* 要素はオブジェクトです
* type: 種類 (0=空き土地・領域 1=壁)
* pid: プレイヤー番号(0,1,...) (空き土地は-1)
* point: 点数
* x: x座標
* y: y座標
onTurnの引数と戻り値の詳しい説明です
* agents
* エージェントの状況です
* 1次元配列です
* 要素はオブジェクトです
* x: x座標 (-1は未配置)
* y: y座標 (-1は未配置)
* 戻り値
* actions
* 1次元配列です
* 要素はオブジェクトです
* [エージェント番号,アクション名,座標x,座標y]
* アクション名は、"PUT"、"MOVE"、"REMOVE"です