1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

囲みマスのサンプルAIの解説

Last updated at Posted at 2021-01-02

概要

2020年に開催予定だった高専プロコンの競技部門

競技部門のルールは2チーム対戦型の陣取りゲームの囲みマスでした

しかし感染拡大予防のため競技部門は中止になりました

そこで公開されている競技ルールをもとに
競技システムを開発しオンライン対戦会を行うため
Code for KOSEN 囲みマスプロジェクトが発足しました

開発した競技システムはGitHubで公開されています
好きな時に囲みマスの対戦会を開くことができます
https://github.com/codeforkosen/Kakomimasu

システムには対戦AIを作りたい方のために
いくつかのサンプルAIが含まれています

この記事ではサンプルAI同士を対戦させる手順と
サンプルAIの行動について簡単に解説します

システムのセットアップ

対戦サーバとサンプルAIはDenoで実装されていますので
まずはDenoをインストールします

Windowsユーザの方はPowerShellを起動して以下のコマンドを実行します

iwr https://deno.land/x/install/install.ps1 -useb | iex

Macユーザの方はTerminalを起動して以下のコマンドを実行します

curl -fsSL https://deno.land/x/install/install.sh | sh

次にGitHubのCode for KOSENの囲みマスシステムをダウンロードして解凍します
https://github.com/codeforkosen/Kakomimasu/archive/master.zip

コマンドプロンプトかTerminalで以下のコマンドを入力し
対戦サーバを起動します

$ cd apiserver
$ deno run -A apiserver.ts

servest:router listening on :8880が出力されたら対戦サーバの起動成功です

対戦状況ページの表示

Chromeでhttp://localhost:8880/ にアクセスすると対戦状況がみられるページが開きます
「ゲーム一覧はこちらから」をクリックすると観戦したい試合を選択できます
ここでは「最新のゲームビューアーはこちらから」をクリックして最新の対戦を観戦できるようしておいてから対戦AIの起動作業を行います
http://localhost:8880/gamedetails.html

サンプルAIの起動

まずサンプルAIの接続先をlocalhostに変更します

client_deno/client_util.jsの先頭行にある

// const defaulthost = "http://localhost:8880/api";
const defaulthost = "https://practice.kakomimasu.website/api";

を以下のように変更します

const defaulthost = "http://localhost:8880/api";
// const defaulthost = "https://practice.kakomimasu.website/api";

次に新しいターミナルを開き1番目のAIを起動します

$ cd client_deno
$ deno run -A client_a1.js

新しいターミナルを開き2番目のAIを起動します

$ cd client_deno
$ deno run -A client_a4.js

2つのAIが揃ったのでブラウザの対戦状況ページでは試合が開始しています

サンプルAIの簡単な解説

ここではclient_denoフォルダに含まれているサンプルAIの行動を解説します

サンプルAIは以下の2つの事についてターンごとに考えます

  1. 未配置エージェントの配置座標
  2. 配置済エージェントの移動方向

client_a1.js

  1. 未配置エージェントは最も高い点数のマスに配置します
    • ただし競合を防ぐために点数上位何件かは使いません(ターンごとにランダムに決定)
  2. 配置済エージェントの作戦は8方向のうちランダムに1方向に動かします(フィールド外など移動不可の方向でも)

client_a2.js

  1. 未配置エージェントの行動はa1と同じです
  2. 配置済エージェントの行動は8方向のうちランダムに動かしますがフィールド外へは移動しないようになっています

client_a4.js

  1. 未配置エージェントの行動はa1と同じです
  2. 配置済エージェントの行動は8方向のうち最も高い点数のマスに移動します
    • ただし移動先のマスの状況に応じて点数が加算されます
      • 敵の陣地ならマスの点数に10点加算します
      • 空きマスならマスの点数に5点加算します
      • 敵の壁ならマスの点数に加算しません
    • もし8方向すべてが自分の陣地ならa2と同じように移動します
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?