# ゲーム参加方法 ランダムに動く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"です