読者です 読者をやめる 読者になる 読者になる

UECdaの大貧民クライアントと簡易的に対戦するプログラム


コンピュータ大貧民大会UECdaが毎年開催されており、大貧民をプレイする人工知能のレベルも年々向上している。そんなので、自分でもプレイして強さを実感したい、というところで、簡易的な人手のプレイ用クライアントを作った。

本当はGUIとかのほうが見やすいしやっていて面白いのだろうが、そういうのはプログラミングの得意な人がやるべきである。

ソースコードここで公開している。 ダウンロードしたらmakeすれば、/binフォルダに実行ファイルができる。 公式サイトを参考に、サーバと、対戦したいクライアントを4つ起動して、残り1つでこのクライアントを起動させれば対戦ができる。なお、バックグラウンドで(最後に&をつけて)実行すると、入力待ちのたびに停止状態になって面倒くさいので、フォアグラウンドで実行させると良い。

f:id:koganie:20161113002703p:plain

公式サイトのサーバを起動させたとき、対戦画面はこんな感じ。

f:id:koganie:20161113002808p:plain

試合が進めば

f:id:koganie:20161113002823p:plain

コンソールに状況が実況される。

f:id:koganie:20161113002840p:plain

自分の番になると、その時々の提出手の選択を求められる。

1行の見方は、一番左から、
そのターンのプレイヤー番号、場札の役、(プレイヤーiがパスをしているか プレイヤーiの手札の残り数) => そのターンで提出された札
となっている。
自分のターンとなると
[HANDS] 自分の手札の札
から、現在の盤面で提出可能な合法手が番号並びで表示される。

もしスペードの9を出したければ 0 と入力してエンターを押せばよい。パスなら p と入力する。これはパスしかできない局面でも入力しなければいけない。

1枚のカードの表現は2文字で成り立っており、左の文字がスート、右の文字がランクとなっている。スートはSHDCの4つ、ランクは3,4,5,6,7,8,9,X,J,Q,K,A,2となっている。ジョーカーを階段とかと混ぜる場合は、スートが小文字で表現されている。単体出しだったらJRとか表示されたような気がする。

ちなみに入力待ちのときに c と入力すると、すでに提出されたカードと自分の手札のカードに1がついたカード、つまりまだ相手が持っているカードを確認することができる。

本当は自分もクライアントをつくって大会に参加したかったのだが、遅々として進まず断念した。このプログラムも思い付きでやったものなので、変なバグ等多々あると思われる。なにか不具合あったら教えてくれたら直すかもしれません。

人間対大貧民クライアントでは、2015年度優勝クライアントが、NEWSの手越くんをぼこぼこにするという番組がありまして、それはそれは痛快なものがありました。自分も、強いプログラム、作ってみたいものです。