Javaを対戦ゲームで学ぶRobocode日本カップ開催 36
ストーリー by yourCat
CoreWars現代版 部門より
CoreWars現代版 部門より
tomoyu-n 曰く、 "日本IBMは、Javaで書いたプログラムを対戦させるプログラミングコンテスト「Javaプログラミング・ロボット日本選手権
(Robocode Japan cup)」を開催する
(プレスリリース)。
Robocodeは、IBMのAdvanced Technologyに属するMathew Nelson氏によって発案された。Robocodeのプログラム自体がJavaで書かれ、クロスプラットホーム対応となっている。開発部分は、GUIのエディタを含んだIDEに一応なっている。
実際にサンプルを動かしてみたが、かなり動作が速く、グラフィックスも美しい。対戦するロボットは砲塔とレーダーを持つロボット戦車で、オプションのレーダーサーチの描画をオンにすると、結構クール。
JavaApplet、ケータイJavaと、Javaに挑戦しては挫折してきたが、「Robocodeで、今度こそ!」と密かに胸に誓うのは、僕だけだろうか?"
jintaro曰く、"登録は9月16日からで、予選リーグは11月25日から、本戦は12月2日にはじまる。サーボモーターが買えない・工作が苦手だからと、ROBO-ONEは見送っていた人でも、こっちはコードさえ書けば参加できるのでいかが?"
Terrarium (スコア:4, 参考になる)
あれは失敗だったと思います。
多数の分散クライアント上に生態系を構築し、自分でプログラミングした生物
をその生態系で繁殖させるゲームなのですが、以下のような欠点がありました。
プログラムは他者を攻撃する能力があるので、いったんあるプログラムが支配
権を取ると、独占状態になって他者の新規参入が究めて困難になります。実際、
新生物を投入すると最初は10匹しかいないのですが、その周りに10倍もの敵がいたらよ
ほどうまくつくらないとたちまち滅ぼされます。事実上、有意な数を繁殖でき
たプレイヤーは10人ほどしかいなかったと思います。
ライブラリの不備など、「まっとうなプログラム」を組めるようになるまでに
自分で書かなければならないコード量が膨大すぎて、プログラミング初心者が
手をつけられるものではありませんでした。
企画団体のコミュニティに対する支援もほぼ皆無(掲示板を用意するだけ)でし
た。それにくらべて、Robocodeは豊富な支援がありますね。記事の邦訳もちゃ
んとされていますし。
1.とも関連しますが、弱いプログラムはたちまち滅ぼされるので、
上位のわずかなプレイヤー以外はまったく評価されず、
達成感を味わえません。
他の大会だと、順位が500位ぐらいの人でも
「300位にあがって嬉しい」という形の達成感が得られるのでしょうが、
Terrariumではほぼ20位以下は全滅するので順位がつきません。
報われません。
とにかくプレイヤーが少なすぎました。上に挙げたすべての要因が関係するの
ですが、(ゲームとしては面白かったと思いますが)多人数が楽しめるゲームシ
ステムになっていないため、大会期間中にプレイヤーがどんどん減っていきま
した。
Robocodeは賞品もいいですね。TerrariumはX-Boxでした。いまいち。
Re:Terrarium (スコア:1)
>2. 気軽に遊ぶには最初の一歩が重すぎた。
>3. 弱いプログラムはまったく評価されない。
>4. プレイヤーが少なすぎた。
> 大会期間中にプレイヤーがどんどん減っていきました。
これを読んで、ちと話はズレますが、こないだの(サッカーの)ワールドカップを思い出しました。
世界最高の祭典といえばその通りだし、それゆえに必然的に生じることなんだけど、
最終日にゃ「2チームしか」残ってないわけで、ちと寂寥感がありました。 #ん、甲子園も同じかな。
あと、LifeGameなんかでも言われる話だったと思いますが、
ルールを余程うまく作らないと、多種多様なモノが共存するという感じには
なかなかならず、ワンパターンな結果にしか到達しないんでしたよね。
まぁサッカーはあれはあれでいいんですが、見るのとヤルのとを両立(ってのか)させたいGameならば、
なるべくそう単純な結果にはならないような巧妙なルールとかを作って…ということが望まれるんじゃないかな。
Re:Terrarium (スコア:1)
ってのもあったような。
Terrarium のアイデアはいい (スコア:1)
ファミ通やコミックビームで連載してたマンガ家の鈴木みそが、Terrarium そっくりのプログラミング型ネットワークゲームをマンガに描いてたのにはびっくりしました。アリを戦わせるゲームで、プレイヤーのマシンには一人一つアリの巣があって、ネットワークを介して他人の巣に勝手に攻め込んでいく、っていう感じでした。中央集権型らしく、マシンを消しているときも戦いが継続している、っていう違いはありますけど。
Re:Terrarium (スコア:0)
>実際、新生物を投入すると最初は10匹しかいないのですが、その周りに10倍もの敵がいたらよほど
>うまくつくらないとたちまち滅
Re:Terrarium (スコア:0)
ピアを閉じてわざと出れなくしたりとか
自分の自由になるマシンが数台あるひとは囲って飼うことができたりとか
その辺のことは 【Terrarium】4世代目 最終局面 決戦は金曜日♪ [2ch.net]
を参照してくださいな
ゲーム感覚って… (スコア:2)
>可能です。
とありますが、作ると遊ぶでは、全然違うと思うのですが、
どちらを指してゲーム感覚といってるのか気になるところです。
つくる方だったら、未来のJava技術者を確実に減らすことでしょう。
Re:ゲーム感覚って… (スコア:3, 興味深い)
気になるのでしたらdeveloperWorksの記事 [ibm.com]など読んでから投稿されたらいかがでしょうか。
少しだけ触ってみた感覚としては遊ぶ方にずっと近いですよ。
ミニ四駆を改造するとかPSのカルネージハートとかが例えとして適当ではないかと。
私が少ししか触らなかった理由は添付されるエディタがJavaで書かれていて遅かったのと自分のコード中でスレッドを多数立ち上げようと思ったのに失敗したからでしたが、裏をかこうとしないで真剣に取り組んだらもっと長続きしたかも(笑)
惜しむらくはもう夏休みが終わってしまうことで、高校生の夏休みの課題にして欲しかったかなと思いますが。
kaho
Re:ゲーム感覚って… (スコア:1)
直接好きなエディタでソース書いちゃえるし、
コンパイルもコマンドラインから普通に行えるので、
個人的には、環境にはあまり困らなそうな感じです。
こんなにいっぱいサイトが… (スコア:1)
なるほど、たしかにこれなら「遊び」の感覚みたいですね。
どこまで「作らされる」のかという意味で
某フレームワークの生命体モノのイメージかと思ったのですが、
あれと比べるのがマチガイみたいですね。
アレは何かやるとすぐ例外を出して、例外処理を入れることを
覚えさせよう(洗脳しよう?)という、いい意味でも、悪い意味でも
「崇高な使命」を持っていたようですが
(それ以外の印象が無かったりしますが)
これは純粋に「遊びのなかでイベントドリブンのコーディングに慣れる」
という感じがします。
Re:こんなにいっぱいサイトが… (スコア:1)
今更名前を伏せなくてもよいのでは。
> アレは何かやるとすぐ例外を出して、例外処理を入れることを
> 覚えさせよう(洗脳しよう?)という、いい意味でも、悪い意味でも
> 「崇高な使命」を持っていたようですが
あれ?Terrariumは例外は異常系にしか使ってませんよ。
自分のプログラムが正しく書けてればcatchしないでもちゃんと動いたはず。
例外の乱用はしていなかったと思います。
> これは純粋に「遊びのなかでイベントドリブンのコーディングに慣れる」
> という感じがします。
Terrariumもイベントモデルでしたが、RobocodeはTerrariumに比べて、
どういう点が教育的に筋がよいのでしょうか?
興味があるので教えてくださいませ。
元ネタ失念なんですが… (スコア:1)
私はどこかに書いてあった記事の連載で見ただけなのですが、
行動に異常系が発する条件が、行動に対してそれが行えないとき
とありました。これは納得いくのですが、その記事では
「前に動くときに前に動けなかった。
そのとき例外をとっていないとそれが原因で生命体が死ぬ」
という、極端な例でした。そのため、
「おいおい、前に動けないだけで、いきなり死ぬんかい」
と思ったものです。元ネタ失念で申し訳ないです。
そのあたりの記述を見つけていないので、比較していいかどうか微妙
なのですが、見つけた記事すべてが例外処理に終始していたのと
思考ルーチンの記述に絞られているのとでは、印象が異なってしまう
としても仕方ないことではないかと思うのです。
「教育的に筋がいい」とは言ってませんよ。
筋がいいのは、「例外=死」として、強制的に例外処理を教え込む側だと
思っています。だから、「いい意味でも、悪い意味でも」と表現して
いるんです。
ただ、「遊び」という点だけを捉えると、先にあげた例のように
「行動の失敗=死」よりも、「行動の失敗=1回やすみ」の方が
それも1つの選択肢としてある方がいいのではないかと思うのです。
Re:元ネタ失念なんですが… (スコア:1)
たぶん@ITのこの連載記事 [atmarkit.co.jp]だと思います。
これはまったくの初心者が最初の1歩を踏み出す、という観点からはわりかし
よくできた記事でした。ただ、中級者以上や、傍観者が気になるような戦略論
や高度なアルゴリズムはありませんでした。(人がいなかったんでしょうが)
その点、Robocodeは上位ランカーによる戦略やテクニックの記事をIBMのサイ
トで披露していて、濃いプレイヤーにも満足できる記事が多くあります。まあ、
結局は運営者がどこに力点を置くかの問題だと思います。
> ただ、「遊び」という点だけを捉えると、先にあげた例のように
> 「行動の失敗=死」よりも、「行動の失敗=1回やすみ」の方が
> それも1つの選択肢としてある方がいいのではないかと思うのです。
まあ、ゲームシステムをデザインする人の趣味の問題でしょうが、Terrarium
では例外は主にロジック誤りなどの異常系で投げられるので、「行動の失敗=死」
ではなく「バグ=死」です。これはデバッグ中には助かります。
もちろん、リリース時にcatchすればバグ入りでも死なずに(いい加減ながら)動きます。
(もっとも、同様のゲームを作ればたいていそうなるでしょうが)
あと、「CPU時間の使いすぎ=1回休み」「CPU時間の異常な使いすぎ=死」でした。
Re:ゲーム感覚って… (スコア:3, 参考になる)
アルゴリズム構築による自動ロボット対戦ゲームとしては, 古くはX68000用のR.C.(1993年)を初めとして多いとは言えないものの, かなりのタイトルが存在していて一つのジャンルを形成していると言って良いと思います.
見た目にこだわらなければ例えばRealTimeBattle [lysator.liu.se]なんて物がGPLで公開されています.
Re:ゲーム感覚って… (スコア:1)
COMSIGHT(TECNO SOFT,1987)
#super tank相手に勝率50%程度…
Re:ゲーム感覚って… (スコア:1)
同じくこれを思い出しました。
基本的な部分はそんなに変わっていないようにも見えます。
COMSIGHTはBASIC風言語でしたが。
うじゃうじゃ
Re:ゲーム感覚って… (スコア:0)
すでに3Dだし。
Re:ゲーム感覚って… (スコア:1)
AdvancedRobot に対し、Robot という簡単に使えるクラスを提供しているのも良い感じです。 Java 初心者でもなんとか敷居を越えられそうで。
# アートディンクの地球防衛軍も同じジャンル?
Re:ゲーム感覚って… (スコア:1)
同じと言えば同じジャンルかも知れませんが、方向性が違うような。
地球防衛軍は、プログラミングと言うより、パラメータを並び替える
と言う程度だと印象を受けました。
一応判断や分岐もありましたが、使える命令数が絶対的に少なかった、、、
まぁ、自分自身のプログラムに一部BASIC使ってましたし、当時のマシンパワーでは限界でしたかね。
#STOPキーを押して泣いた事が数度、、、ちゃんと効かないようにしとけよ~
Re:ゲーム感覚って… (スコア:2, 参考になる)
ついでに無駄のない速いコードの書き方も覚えました。
# 多少トリッキーなコードを書く癖がついたかもしれないけど。
robocode は爆発がリアルでいいですね。
あぁ、「ン」が消えてるんですよ。「ビーフン・カレー」ね。
Re:ゲーム感覚って… (スコア:0)
というより「遊ぶ」ってのはどんな行為を指してるんだ?
全部つくればわかるよ (スコア:0)
こういうのは「遊ぶ」に含まれるので、大変よいと思います。
記述言語 (スコア:2, 興味深い)
(ZEUSのように簡単なマクロの組み合わせでロジックを組み立てるスクリプト
言語のようなもの)かの2タイプがあります。それぞれの得失をつらつら挙げてみると、
【汎用言語】
A. 自由度が高い。なんでもできる
B. プログラミングをしたことない人に敷居が高い →パイが小さい
C. (例えばjavaの)学習を兼ねる、という教育的な大義名分がある →パイが大きくなる可能性
D. プログラムを強化するに従って、ロジックの微細化や肥大化などが起こってお手軽さが失われていく →ゲーム性の低下
【専用言語】
E. 自由度が低い。そのかわりに、ゲーム性を高める方向の制約を組み込める(サイズ制限など)
F. プログラミング初心者に敷居が低い=パイが大きい
G. 複雑化に頼らないスマートなプログラムが求められ、熟練してもゲーム性が維持される
…というぐらいがすぐに浮かびます。私は、純粋にゲームとして楽しむなら
ば専用言語の方がよいと思いますが、みなさんはどう思いますか?
# 汎用言語(javaとかC#)でないとスポンサーつきませんね。(^_^;)
VMに関しては、ここでもTerrariumの話題のときに いくらか [srad.jp]出てました。
ZEUS ダメダメ (スコア:1)
G. 複雑化に頼らないスマートなプログラムが求められ、…
高度で大規模なマシンが、論理も何にもないような超シンプルなマシンに負けてしまうようなので、ガッカリしました。ここんとこを「ゲーム性が維持される」って言うようなら、プログラミングゲームを名乗る資格はないと思います。
Re:ZEUS ダメダメ (スコア:2, 参考になる)
を使うものの場合、どうしても「プログラムの肥大化」の問題が付きまとってきます。
私のTerrariumのプログラムはC#で5000行を越えました。強いプログラムの多
くはそれぐらいの大きさだと思います。これぐらい大きくなるといい加減疲れ
てきます。ゲームとして見た場合、労力あたりに得られる娯楽度がどんどん低
下していきます。これを避けるためにはプログラムサイズを大きくすることに
対してペナルティを課す、などの歯止めが必要だと思います。
あと、ZEUSに関して言えば、
> 高度で大規模なマシンが、論理も何にもないような超シンプルなマシンに負
> けてしまうようなので、ガッカリしました。
とのことですが、実際には、経験を積んだプレイヤーが同コンセプト同ハード
でプログラムを書いたときは、やはりプログラムの大きいものが強くなります(*)。
ですから、単に戦略やハードの相性が悪かった、またはプレイヤーの経験が足
りなかったのいずれかではないでしょうか。
(*)「30ステップ強さ9」のプログラムと「100ステップ強さ10」のプログラム
では一般には前者のほうがカッコイイとみなされるので、あえて前者を選ぶ人がか
なりの割合でいます。
おおお、nasb_tama の作者のかたでは!? (スコア:1)
2ちゃんねるの掲示板で誰かが言うには、色々と細かいことをフォローしていって強くした人が強い、ってことですから、大胆な戦略はほとんど意味ないっていう点では面白くないと思います。せっかく生物で遺伝子を残せるのに、そこまで作り込む人も少なかっただろうし、作り込んだところで目に見えにくいので分からなかった…。
私は確か最終的には 1500行くらいでしたけど、ガリガリ書いた大戦略型のグリッド式経路検索がほとんど意味なかったのにはガッカリしました。それに、場当たり的に改良していくと、どんどんプログラムが汚くなっていきます。途中からもう仕事と変わんなくなってきたりとか。
ZEUS でも、動作に制限の多い戦車型のマシンを使って複雑な AI を組んで満足していたのですが、AI 系の BBS で新たな次元があることを知って驚きました。悔しいというより、ゲームシステムが理不尽だと思ったのでスッパリやめちゃいましたけど。
余談ですけど、ZEUS になる前の初代カルネージハートは、基地でロボットを生産するというシステムが面倒でしたけど、あれはあれで量産型ロボットを作る楽しみがあったんですよねえ。少数精鋭よりも、部品ケチって AI 煮詰めて量産型を安定投入する喜び…。
職場で Robocode を四人に誘ってみましたが、二人は関心なし、二人は強い興味を持ってました。職場で盛り上がっているところはいいなあ。
Re:おおお、nasb_tama の作者のかたでは!? (スコア:1)
はい。
> 2ちゃんねるの掲示板で誰かが言うには、色々と細かいことをフォローして
> いって強くした人が強い、ってことですから、大胆な戦略はほとんど意味な
> いっていう点では面白くないと思います。
有効な戦略を組み込むことと、重箱の隅を突く細かいチューニングを行うこと
を比べると、やはり前者が強さの主因だと思います。ただ、前者と後者は独立
な作業なので、後者は(時間が許す限り)やっとけば得ですね。ただ、それで勝
率が何%上がるかは謎ですが。
> それに、場当たり的に改良していくと、どんどんプログラムが汚くなってい
> きます。途中からもう仕事と変わんなくなってきたりとか。
私も「バイナリは20KBまで」という制約があったらどれだけ幸せか、と何度も
思いました。
> ZEUS でも、動作に制限の多い戦車型のマシンを使って複雑な AI を組んで
> 満足していたのですが、AI 系の BBS で新たな次元があることを知って驚き
> ました。悔しいというより、ゲームシステムが理不尽だと思ったのでスッパ
> リやめちゃいましたけど。
ZEUSの場合は専用言語ですから、できることが制限されてしまいますね。枠を
はめることによって、敷居が低くなってプレイヤーが増える効果が見込めます
が、そのかわり、その枠組みの中では楽しめない濃い人も出てきます。トレー
ドオフなんだと思います。
Re:ZEUS ダメダメ (スコア:1)
チームプレイ (スコア:1, 興味深い)
対応していないようです。
次のコンテスト(もしあれば)では是非対応して欲しいと
思ったりします。
# フォーメーションを組んで弱いものいじめとか...
Re:チームプレイ (スコア:0)
byファーストクイーン
また誤植か (スコア:0)
Re:また誤植か (スコア:1)
Re:また誤植か (スコア:0)
# ホームなのはこっち [plathome.co.jp]
やべえはまった (スコア:0)
けど、商品のシンクパッドは俺がいただいた。
まずは敵の動きを読まなくちゃ。
けど、本番だと100台まとめて対戦らしいな。そんな
芋の子を洗うような状態で、アルゴリズムもへったくれもあるのか?
ぶつかるとエネルギーが減る&動かないとただの的=ぶつから
ないように動き続けなくてはならないのだが、100台じゃなかなか
そうもいかないぞ。100台もまとめてシミュレーションできる
環境ないしな。
Re:やべえはまった (スコア:0)
> 芋の子を洗うような状態で、アルゴリズムもへったくれもあるのか?
コンテスト公式規約のページ [ibm.com]の「競技方法」の欄には、「各ロボットは他のロボットとのリ
中学生にちょっとだけ教えました (スコア:0)
わずか90分の実習ですから満足なことは出来ませんでしたけど、
結構喜んでもらえました。
手伝わせた生徒から、うちの実習ではやらないの?と聞かれました。
まぁ確かに実習への導入も考えているですが、このまま実機が動か
せれば即導入なんですけどねぇ・・・まだまだC言語のみで頑張る
しかないですね。(複数言語を覚えさせる余裕が無い)