Ruby で AIプログラムを組んで対戦するタンクゲームには、RRobots(Tk、Gosu)、RTanque(Gosu)、opal-robots(Opal)、 RubyRobots(Opal)、Rubyrobots(dRuby)などがあります。それぞれの特徴を比べてみました。

プログラム同士を対戦させる戦車ゲームはかなり以前からあり、Crobots(C言語)、Robocode(Java)などが作られました。Rubyで対戦するものも何種類かあります。


1.RRobots(Tk版)
rrobots_tk_2

RRobotsの公式サイトがあります。一部リンク切れですが、Internet Archive やミラーサイト、GitHub から入手できます。
→・RRobotsの公式サイト(Internet Archive)

※ミラーサイト
→・ダウンロードのミラーサイト

※GitHub
→・rrobots(logankoester)
→・rrobots(Dalton001)
→・rrobots(rampantmonkey)


○GUI
Ruby 標準添付ライブラリの Tk 。
RubyInstaller for Windows の場合、明示的に Tk もインストールすること。)


○動作確認
・Mac OS X 10.11.2 El Capitan;Ruby 2.2.3/ 2.1.7/ 2.0.0-p647/ 1.9.3-p551
・Windows 7(64bit);Ruby 2.2.3/ 2.1.7/ 2.0.0-p647/ 1.9.3-p551
・Windows 7(32bit);Ruby 2.2.3/ 2.1.7/ 2.0.0-p647/ 1.9.3-p551
 全てのバージョンで動いた。


○インストール
上記サイトからプログラムをダウンロードして、解凍。


○ルール、サンプルプログラム
RRobotsの公式サイト、RRobotsのForum(Internet Archive)、RubyQuiz competetion、GitHubの各サイトを参照。

※注意;
Ruby の require の動作が変更されて、カレントディレクトリを検索対象に含まなくなったので、
プログラム中の require 'robot' や require 'tkarena' などは、
require_relative 'robot' や require_relative 'tkarena'  などに修正すること。


○動かし方
プログラムを解凍したディレクトリに移動して;
ruby rrobots.rb 対戦プログラム1 対戦プログラム2  . . . 

例として、サンプルプログラムの NervousDuck.rb と SittingDuck.rb を戦わせるなら;
ruby rrobots.rb NervousDuck SittingDuck


○コメント
・戦車対戦ゲームの Ruby版はこれが大元らしい。
・依存するライブラリが、標準添付ライブラリの Tk だけなので、どのバージョンの Ruby でも動く。
・3つ以上での対戦が可能。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・画面の表示速度は Gosu版に比べると遅い。



2.RRobots(Gosu版)
rrobots_gosu_2

上記 RRobots の GUI を Gosu に変えたバージョン。

※RubyGems
→・ rrobots(Marcin Michalowski)

※GitHub
→・rrobots(h13ronim); RubyGems の rrobots(Marcin Michalowski)
→・rrobots(ralreegorganon)


○GUI
Gosu


○動作確認
・Mac OS X 10.11.2 El Capitan;Ruby 2.2.3/ ×2.1.7/ 2.0.0-p647/ ×1.9.3-p551
・Windows 7(64bit);Ruby 2.2.3/ 2.1.7/ ×2.0.0-p647/ 1.9.3-p551
・Windows 7(32bit);Ruby 2.2.3/ 2.1.7/ 2.0.0-p647/ 1.9.3-p551
一部のバージョン(×印)でインスールできず。

※Ruby と Gosu のバージョンの相性か?
gem install rrobots で、gosu のインストールエラーになる時は、
先にどのバージョンの gosuでもいいので、
gem install gosu -v ○.○.○
とインストールしておけば、その後、
gem install rrobots
でインストールできることも。


○インストール
gem install rrobots

※Mac の場合、Gosu には sdl2ライブラリ等のインストールが必要。
Homebrew で;
brew install sdl2


○ルール、サンプルプログラム
Tk版と同じ。
RRobotsの公式サイト、RRobotsのForum(Internet Archive)、RubyQuiz competetion、GitHubの各サイトを参照。

※注意;
サンプルの対戦プログラム中の require 'robot' は、require 'rrobots' に修正すること。
 
 
○動かし方
対戦プログラムを置いたディレクトリに移動して; 
rrobots 対戦プログラム1 対戦プログラム2  . . . 

例として、サンプルプログラムの NervousDuck.rb と SittingDuck.rb を戦わせるなら;
rrobots NervousDuck SittingDuck


○コメント
・RRobots(Tk版)とルール、対戦プログラムは同じ。(require 'rrobots' だけ変えること。)
・インストールが gem install rrobots するだけなので簡単。  
・依存するライブラリが、GUIライブラリの Gosu(バージョン指定なし)だけなので、大体の Ruby で動く。
・3つ以上での対戦が可能。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・画面の表示速度が Tk版に比べると速い。



3.RTanque
RTanque_2

RTanqueの公式サイトがあります。上記2つの RRobots と違い、独自の実装でルールも違います。

※RubyGems
→・ rtanque

※GitHub
→・RTanque


○GUI
gosu ~> 0.7.45


○動作確認
・Mac OS X 10.11.2 El Capitan;Ruby ×2.2.3/ ×2.1.7/ ×2.0.0-p647/ 1.9.3-p551
・Windows 7(64bit);Ruby ×2.2.3/ ×2.1.7/ ×2.0.0-p647/ 1.9.3-p551
・Windows 7(32bit);Ruby ×2.2.3/ ×2.1.7/ ×2.0.0-p647/ 1.9.3-p551
Ruby 1.9.3 でしかインストールできず。
 
※Ruby と gosu、texplay 間のバージョンの相性か?
(gosu のバージョン指定が、gosu ~> 0.7.45 と古すぎるため) 


○インストール
gem install rtanque

※Mac の場合、Gosu には sdl2ライブラリ等のインストールが必要。
Homebrew で;
brew install sdl2


○ルール、サンプルプログラム


○動かし方
・自分の対戦プログラム(のテンプレート)を作る
rtanque new_bot my_bot
(カレントディレクトリに botsフォルダが作られて、その中に my_bot.rb という名前のひな型が作られる)

・対戦する
rtanque start 対戦プログラム1 対戦プログラム2  . . .

例として、自分で作った my_bot.rb と、付属のサンプルプログラムの camper.rb と seek_and_destroy.rb を戦わせるなら;(ディレクトリの指定も含めて)
rtanque start bots/my_bot sample_bots/camper sample_bots/seek_and_destroy
(↑実際は改行せず、1行です)

○コメント
・ルール、命令等は RRobots とは違う。
・依存するライブラリが多く、インストールに苦労する。
・3つ以上での対戦が可能。
・弾が当たっても爆発の表示はない。
・やられた時にのみ爆発が表示。 



4.opal-robots
opal-robots2
RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。

※GitHub


○GUI
ブラウザ(Opal)


○動作確認
Demo画面をブラウザ(Safari 9.0.2)で表示。
(画面左側の「Simple battle」「Battle」「Fight」をクリックすると、対戦が表示される。) 


○ルール、サンプルプログラム
opal-robotsのデモサイトRRobotsの公式サイト、RRobotsのForum(Internet Archive)、RubyQuiz competetion を参照。

  
○動かし方
対戦プログラムを gist に置いてブラウザで指定する。
opal-robotsのデモサイト参照。)
例)ブラウザのアドレス欄に;
http://4r2r.github.io/opal-robots/#8499891vs8499895 


○コメント
・RRobots(Tk版)とルール、対戦プログラムは基本的には同じだが、対戦プログラムは gistに置いて、ブラウザで指定する。
・表示にブラウザを用いるのが今風。
・3つ以上での対戦はできない(1対1のみ?)。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・レーダーの線が表示。
・表示はシンプル。 


 
5.RubyRobots(Opal)
RubyRobots_opal

opal-robots と同じく、RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。
(dRubyを使った後述の 6. Rubyrobots とは別物です。) 

※GitHub


○GUI
ブラウザ(Opal)


○動作確認
・Mac OS X 10.11.2 El Capitan;Ruby 2.2.3
・Windows 7(64bit);Ruby 2.2.3
・Windows 7(32bit);Ruby 2.0.0-p247 

※Windows での実行時の注意;
・Windowsでは、shotgun コマンドは動かないので、rackup を使う。
・rubyrobots-master/index.html.slim の文字コードでエラーが出た場合は、shiftJIS で保存し直す。


○インストール
上記サイトからプログラムをダウンロードして、解凍。解凍したディレクトリに移動して;
bundle install

注;bundler が入っていなければ、先にインストールする
gem install bundler


○ルール、サンプルプログラム
RRobotsの公式サイト、RRobotsのForum(Internet Archive)、RubyQuiz competetion を参照。

・自分の対戦プログラム
rubyrobots-master/index.html.slim ファイルの中の
| class MyBot
                include Robot

                def tick(events)
                  # Write your robot brains in here!
                end
              end
  
tickメソッドの中にコードを書く。
(あるいは、ブラウザ画面でコードを書いても良い。)


・対戦相手のサンプルプログラムの設定
a) サンプルプログラム
rubyrobots-master/lib/robots フォルダの中に入っている。
 duck_bill_09.rb
 ente.rb
 rubber_duck.rb
 wkb.rb
 dummy.rb
 nervous_duck.rb
 sitting_duck.rb


b) 対戦相手の設定
rubyrobots-master/lib/rubyrobots.rb ファイルの中の

def load_robots
    stop_battle
    # return if started
    @robots = []
    @robots << Dummy   #←NervousDuck、SittingDuck、DuckBill09などに変更可
    load_text_bot
    start_battle
  end
 load_robots で設定する。

※注;
DuckBill09(duck_bill_09.rb)を設定する場合は、
rubyrobots-master/app/application.rb の冒頭部分に;
require 'robots/duck_bill_09.rb'
このコードを追加する。


○動かし方
1) ターミナル(コマンドプロンプト)で、
bundle exec shotgun
あるいは
bundle exec rackup

(注;Windows では shotgun は動かない)

2) ローカルサーバーが起動
INFO  WEBrick::HTTPServer#start: pid=22353 port=9393
このようなメッセージが出る。

3)ブラウザを起動
ブラウザのアドレス欄に
http://localhost:9393
と入力する。(ポート番号はメッセージと同じにする。)

4)ブラウザ画面に出た「Battle!」ボタンを押すと対戦が始まる。


○コメント
・表示にブラウザを用いるのが今風。
・3つ以上での対戦はできない(1対1のみ?)。
・弾が当たると爆発が表示。
・やられた時には爆発は表示されない。
・レーダーの線が表示。
・表示はシンプル。 



6.Rubyrobots(dRuby)
druby_tk
(GUI; Tk)

druby_gtk2
(GUI; GTK2)

Rubyを256倍使うための本 網道編』(ただ ただし/ arton著、2001年、アスキー刊)


で紹介されている、dRubyを使って TclRobots を Rubyに移植したもの。
各対戦ロボットがネットワーク越しに対戦するのが他とは違う特徴。
(Opal を使った前述の 5. RubyRobots とは別物です。) 


○ウェブサイト
(サイトがなくなっているものは、Internet Archive のページをリンクします。)

・オブジェクト指向スクリプト言語Rubyを256倍使うための本のためのホームページ
Internet Archive

・Rubyを256倍使うための本 網道編 正誤表
→ Internet Archive

Rubyを256倍使う本 網道編の補遺 - arton
 (GTK版ビューコネクション張りっぱなし版drbrbrobotパッチ

・RubyRobots班のぺえじ - 渕研究室について-東京工科大学
→ Internet Archive
  →・プログラムソース(rbrobot01.txtrbrobot02.txtwinrobot01.txt
  →・論文 高橋啓之(pdf)


○ソースコード/ 動作確認
サイトがなくなっていたのですが、作者の artonさんに再度公開して頂けました。
→・arton/rubyrobots ・ GitHub

その他、上記サイトも参照。

このままでは、Rubyの対応バージョンが古すぎて(Ruby 1.6)動かないので、修正する必要があります。
試験的に修正したところ、一応動くようになりました。
・Mac OS X 10.11.2 El Capitan;Ruby 2.2.3
・Windows 7(64bit);Ruby 2.2.3 


○GUI
キャラクタベース、Tk版、VisualuRuby版、GTK版がある。


○ルール、サンプルプログラム
ソースの samplesフォルダにある。


○動かし方
1) プログラムを置いたディレクトリに移動して、ターミナル(コマンドプロンプト)を、4〜6枚開く。

2) ターミナル1 で、サーバプロセスを起動
ruby rbrobot.rb

3) ターミナル2 で、GUI を起動
※下記のいずれか
ruby stdrobot.rb    # キャラクタベース(おそらく見ていてもわからない)
ruby tkrobot.rb      # Tk版
ruby gtkrobot.rb    # GTK2版

4) ターミナル3、4(、5、6)で、対戦プログラムを起動
※最低2つは必要(最大で4つまで)
※同じものを複数起動してもOK
ruby lighthouse.rb    # 移動しないロボット
ruby traveler.rb         # フィールドの縁を移動するロボット
ruby charger.rb        # 接近していくロボット
ruby corner.rb          # 隅に行くロボット(途中でdRubyサーバーが止まってしまう?)


※ デフォルトでは、 druby://localhost:6852 を指定しているので、1台の PC内で遊ぶ場合には起動時の引数は省略可能。 
  (別の PCから参加させる場合は、明示的に引数に指定すること)

※ ゲームが始まるまで、かなり時間が掛かることがある。


○コメント
・ネットワーク越しに対戦できる。
・3つ以上での対戦が可能(4つまで)。
・弾が当たると爆発が表示。
・やられた時には爆発は表示されない。
・レーダーの線が表示。
・表示はシンプル。
・画面の表示速度はとても遅い。
・オリジナルのソースコードを修正しないと、現状では動かない。 



7.まとめ
現在、Rubyで戦車対戦ゲームを楽しむのなら、2. RRobots(Gosu版)が手軽でおすすめな感じです。



参考)
Developing Games With Ruby - Leanpub
50-hud
Rubyで作るタンクゲーム




Java で作る戦車対戦ゲーム(Robocode)


Writing Games with Ruby - Mike Moore - blowmage


 
Rubyでゲームを作る(Gosu)