top
recent
Squeak:RoboTank
目次
- Squeakでロボット同士を戦わせようというページ...
- sumimさんによる試作...
Squeakでロボット同士を戦わせようというページ
RobocodeをSqueakでやったら‥‥‥
(Smalltalk) から。
[[id:1085]] 2002-08-31 08:53:51
sumimさんによる試作
弾を出して、弾に当たると弾ごときえてしまうしくみを SqueakToys (プラスα)で仮組みしてみました。SqueakToys の勉強をもっとしないといけないことも分かりました(ぉ--sumim
http://sumim.no-ip.com:8000/swiki/uploads/wiki/455/Robo.pr
launch
| envelope myBounds trueSelf trueNeighbor neighborPlayer |
self forward: 2.
self bounce: 'silence'.
envelope _ costume owner.
myBounds _ costume bounds.
trueSelf _ costume renderedMorph.
envelope submorphs do: [ :each |
trueNeighbor _ each renderedMorph.
neighborPlayer _ each assuredPlayer.
(trueNeighbor ~~ trueSelf and: [trueNeighbor isKindOf: RoboStuff]) ifTrue: [
(myBounds intersects: each bounds) ifTrue: [
costume delete.
neighborPlayer costume delete.
self playSoundNamed: 'scratch']]]
SqueakToys フレンドリにするために、SqueakToys で組みましたが、くだんの衝突の部分はタイルスクリプトでは表現しにくい(できなくもないのですが…)ので Smalltalk に差し替えました。それが上です。衝突は bounds で判定すると、morph が回転しているときにシビアになるので、中心からの距離のほうがよいかもしれません。距離でダメージレベルを変えるのもよいでしょうし。
- 当初、morph の削除をこねくり回していたのですが、その必要を感じなくなったので、シンプルに delete のみのバージョンに差し替えました。ファイル名は変えていないのでリンクはそのままです。
リンク先ファイルは world メニュー(デスクトップをクリックして表示される、MVC でいうところのデスクトップメニュー)から load project from file... で読み込めます(Squeak 3.2、ただし日本語版は不可)。.pr は、プロジェクトファイルと呼ばれるもので従来の Smalltalk-80 でいうところのチェンジセットと、その時点で存在しているインスタンスをアーカイブしたものです。ここでちょくちょく話題になるインスタンスの永続化にもちょっと関係あるかも…です。
右手の Robo タブに RoboTank morph があるので、これをドラッグ&ドロップしてデスクトップに呼び出します。すぐ下に小さな黒い矩形の RoboBullet もありますが、これは以後の発射に用いるクローンのオリジナルになるので放っておきます。
shoot ボタンをクリックすると RoboBullet を向いている方向に発射します。この部分は将来、タンク自身の判断にゆだねられます。タンクの向きは青ボタンクリックでハロを呼び出し、左下の回転ハロで変えられます。これも発射同様で後に自動化されます。RoboBullet は触れるものを自らと同時に滅します。ここでは、RoboStuff のサブクラス(RoboBulletMorph、RoboTankMorph)のみに限っていますが、この制約を外せば、1)タイルスクリプトでこの部分を記述可能、2)ウインドウなどを含めて画面上のあらゆるものを消滅させられる(ぉ という(デ)メリットも。
回転しながら乱れ撃ち…なんてのなら、すでに可能です。タンクを青ボタンでクリックして選択し、左手中央のビューワハロをクリックしてビューワを開き、タイルスクリプトを組みます。タイルスクリプティング(SqueakToys)についての詳細はこちらなどを参考にされるとよいでしょう。
#sumim
[[id:1086]] 2002-08-31 14:05:10
top
recent
HashedWiki version 3 beta
SHIMADA Keiki