Ruby で AIプログラムを組んで対戦するタンクゲームには、RRobots(Tk、Gosu)、RTanque(Gosu)、opal-robots(Opal)、 RubyRobots(Opal)、Rubyrobots(dRuby)などがあります。それぞれの特徴を比べてみました。
プログラム同士を対戦させる戦車ゲームはかなり以前からあり、Crobots(C言語)、Robocode(Java)などが作られました。Rubyで対戦するものも何種類かあります。
1.RRobots(Tk版)
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の各サイトを参照。
○動かし方
プログラムを解凍したディレクトリに移動して;
例として、サンプルプログラムの NervousDuck.rb と SittingDuck.rb を戦わせるなら;
○コメント
・戦車対戦ゲームの Ruby版はこれが大元らしい。
・依存するライブラリが、標準添付ライブラリの Tk だけなので、どのバージョンの Ruby でも動く。
・3つ以上での対戦が可能。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・画面の表示速度は Gosu版に比べると遅い。
2.RRobots(Gosu版)
上記 RRobots の GUI を Gosu に変えたバージョン。
※RubyGems
→・ rrobots(Marcin Michalowski)
※GitHub
→・rrobots(h13ronim); RubyGems の rrobots(Marcin Michalowski)
→・rrobots(ralreegorganon)
3.RTanque
RTanqueの公式サイトがあります。上記2つの RRobots と違い、独自の実装でルールも違います。
4.opal-robots
RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。
※GitHub
○GUI
○ルール、サンプルプログラム
opal-robots と同じく、RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。
(dRubyを使った後述の 6. Rubyrobots とは別物です。)
※GitHub
○GUI
○インストール
上記サイトからプログラムをダウンロードして、解凍。解凍したディレクトリに移動して;
注;bundler が入っていなければ、先にインストールする
tickメソッドの中にコードを書く。
(あるいは、ブラウザ画面でコードを書いても良い。)
・対戦相手のサンプルプログラムの設定
a) サンプルプログラム
b) 対戦相手の設定
rubyrobots-master/lib/rubyrobots.rb ファイルの中の
(注;Windows では shotgun は動かない)
2) ローカルサーバーが起動
INFO WEBrick::HTTPServer#start: pid=22353 port=9393
このようなメッセージが出る。
3)ブラウザを起動
ブラウザのアドレス欄に
プログラム同士を対戦させる戦車ゲームはかなり以前からあり、Crobots(C言語)、Robocode(Java)などが作られました。Rubyで対戦するものも何種類かあります。
1.RRobots(Tk版)
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 の 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
でインストールできることも。
※Ruby と Gosu のバージョンの相性か?
gem install rrobots で、gosu のインストールエラーになる時は、
先にどのバージョンの gosuでもいいので、
gem install gosu -v ○.○.○
とインストールしておけば、その後、
gem install rrobots
でインストールできることも。
○インストール
gem install rrobots
※Mac の場合、Gosu には sdl2ライブラリ等のインストールが必要。
Homebrew で;
brew install sdl2
○ルール、サンプルプログラム
※注意;
サンプルの対戦プログラム中の require 'robot' は、require 'rrobots' に修正すること。
○動かし方
対戦プログラムを置いたディレクトリに移動して;
対戦プログラムを置いたディレクトリに移動して;
rrobots 対戦プログラム1 対戦プログラム2 . . .
例として、サンプルプログラムの NervousDuck.rb と SittingDuck.rb を戦わせるなら;
rrobots NervousDuck SittingDuck
○コメント
・RRobots(Tk版)とルール、対戦プログラムは同じ。(require 'rrobots' だけ変えること。)
・インストールが gem install rrobots するだけなので簡単。
・インストールが gem install rrobots するだけなので簡単。
・依存するライブラリが、GUIライブラリの Gosu(バージョン指定なし)だけなので、大体の Ruby で動く。
・3つ以上での対戦が可能。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・画面の表示速度が Tk版に比べると速い。
3.RTanque
RTanqueの公式サイトがあります。上記2つの RRobots と違い、独自の実装でルールも違います。
○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 1.9.3 でしかインストールできず。
※Ruby と gosu、texplay 間のバージョンの相性か?
(gosu のバージョン指定が、gosu ~> 0.7.45 と古すぎるため)
(gosu のバージョン指定が、gosu ~> 0.7.45 と古すぎるため)
○インストール
gem install rtanque
※Mac の場合、Gosu には sdl2ライブラリ等のインストールが必要。
Homebrew で;
brew install sdl2
○ルール、サンプルプログラム
RTanqueの公式サイトを参照。
○動かし方
・自分の対戦プログラム(のテンプレート)を作る
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
RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。
※GitHub
○GUI
ブラウザ(Opal)
○動作確認
Demo画面をブラウザ(Safari 9.0.2)で表示。
(画面左側の「Simple battle」「Battle」「Fight」をクリックすると、対戦が表示される。)
(画面左側の「Simple battle」「Battle」「Fight」をクリックすると、対戦が表示される。)
○ルール、サンプルプログラム
http://4r2r.github.io/opal-robots/#8499891vs8499895
○コメント
・RRobots(Tk版)とルール、対戦プログラムは基本的には同じだが、対戦プログラムは gistに置いて、ブラウザで指定する。
・表示にブラウザを用いるのが今風。
・3つ以上での対戦はできない(1対1のみ?)。
・弾が当たると爆発が表示。
・やられた時に爆発が表示。
・レーダーの線が表示。
・表示はシンプル。
5.RubyRobots(Opal)・表示はシンプル。
opal-robots と同じく、RRobots の GUI を Opal(Ruby to JavaScript Compiler) を使うことでブラウザにしたバージョン。
(dRubyを使った後述の 6. Rubyrobots とは別物です。)
※GitHub
○GUI
ブラウザ(Opal)
○動作確認
※Windows での実行時の注意;
・Windowsでは、shotgun コマンドは動かないので、rackup を使う。
・rubyrobots-master/index.html.slim の文字コードでエラーが出た場合は、shiftJIS で保存し直す。
・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 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 ファイルの中の
RRobotsの公式サイト、RRobotsのForum(Internet Archive)、RubyQuiz competetion を参照。
・自分の対戦プログラム
rubyrobots-master/index.html.slim ファイルの中の
| class MyBotinclude Robotdef tick(events)# Write your robot brains in here!endend
tickメソッドの中にコードを書く。
(あるいは、ブラウザ画面でコードを書いても良い。)
・対戦相手のサンプルプログラムの設定
a) サンプルプログラム
rubyrobots-master/lib/robots フォルダの中に入っている。
duck_bill_09.rb
ente.rb
rubber_duck.rb
wkb.rb
ente.rb
rubber_duck.rb
wkb.rb
dummy.rb
nervous_duck.rb
sitting_duck.rb
nervous_duck.rb
sitting_duck.rb
b) 対戦相手の設定
rubyrobots-master/lib/rubyrobots.rb ファイルの中の
def load_robotsstop_battle# return if started@robots = []@robots << Dummy #←NervousDuck、SittingDuck、DuckBill09などに変更可load_text_botstart_battleend
load_robots で設定する。
※注;
DuckBill09(duck_bill_09.rb)を設定する場合は、
※注;
DuckBill09(duck_bill_09.rb)を設定する場合は、
rubyrobots-master/app/application.rb の冒頭部分に;
require 'robots/duck_bill_09.rb'
このコードを追加する。
○動かし方
1) ターミナル(コマンドプロンプト)で、
1) ターミナル(コマンドプロンプト)で、
bundle exec shotgun
あるいは
bundle exec rackup
(注;Windows では shotgun は動かない)
2) ローカルサーバーが起動
INFO WEBrick::HTTPServer#start: pid=22353 port=9393
このようなメッセージが出る。
3)ブラウザを起動
ブラウザのアドレス欄に
http://localhost:9393
と入力する。(ポート番号はメッセージと同じにする。)
4)ブラウザ画面に出た「Battle!」ボタンを押すと対戦が始まる。
4)ブラウザ画面に出た「Battle!」ボタンを押すと対戦が始まる。
○コメント
・表示にブラウザを用いるのが今風。
・3つ以上での対戦はできない(1対1のみ?)。
・弾が当たると爆発が表示。
・やられた時には爆発は表示されない。
・レーダーの線が表示。
・表示はシンプル。
6.Rubyrobots(dRuby)
(GUI; Tk)
(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版ビュー、コネクション張りっぱなし版drb、rbrobotパッチ)
・RubyRobots班のぺえじ - 渕研究室について-東京工科大学
→ Internet Archive
→・プログラムソース(rbrobot01.txt、rbrobot02.txt、winrobot01.txt)
→・論文 高橋啓之(pdf)
○ソースコード/ 動作確認
サイトがなくなっていたのですが、作者の artonさんに再度公開して頂けました。
→・arton/rubyrobots ・ GitHub
その他、上記サイトも参照。
○GUI
キャラクタベース、Tk版、VisualuRuby版、GTK版がある。
○ルール、サンプルプログラム
ソースの samplesフォルダにある。
○動かし方
・表示はシンプル。
6.Rubyrobots(dRuby)
(GUI; Tk)
(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版ビュー、コネクション張りっぱなし版drb、rbrobotパッチ)
・RubyRobots班のぺえじ - 渕研究室について-東京工科大学
→ Internet Archive
→・プログラムソース(rbrobot01.txt、rbrobot02.txt、winrobot01.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から参加させる場合は、明示的に引数に指定すること)
※ ゲームが始まるまで、かなり時間が掛かることがある。
7.まとめ
現在、Rubyで戦車対戦ゲームを楽しむのなら、2. RRobots(Gosu版)が手軽でおすすめな感じです。
参考)
・Developing Games With Ruby - Leanpub
Rubyで作るタンクゲーム
Java で作る戦車対戦ゲーム(Robocode)
・Writing Games with Ruby - Mike Moore - blowmage
Rubyでゲームを作る(Gosu)
○コメント
・ネットワーク越しに対戦できる。
・3つ以上での対戦が可能(4つまで)。
・弾が当たると爆発が表示。
・やられた時には爆発は表示されない。
・レーダーの線が表示。
・表示はシンプル。
・画面の表示速度はとても遅い。
・オリジナルのソースコードを修正しないと、現状では動かない。
・画面の表示速度はとても遅い。
・オリジナルのソースコードを修正しないと、現状では動かない。
7.まとめ
現在、Rubyで戦車対戦ゲームを楽しむのなら、2. RRobots(Gosu版)が手軽でおすすめな感じです。
参考)
・Developing Games With Ruby - Leanpub
Rubyで作るタンクゲーム
Java で作る戦車対戦ゲーム(Robocode)
・Writing Games with Ruby - Mike Moore - blowmage
Rubyでゲームを作る(Gosu)