弾幕ゲシュタルト on Pharo

前期の専門ゼミナールの後半に題材として取り上げた弾幕ゲシュタルトのソースを公開します。
弾幕ゲシュタルトは「がまぐ 2011/2」の「脳内麻薬とゲーム(土本さん)」で紹介されているゲームです。
「がまぐ」ではJavaのソースが公開されていますが、これをPharoで実現するためにCRCカードの作成からはじめて、各学生が自分たちで完成させるまでを学びました。

ここで紹介するのは、実際の動きを見せるために作成したもので、学生には見せていないものです。とはいえ、JackPotと同様、とてもストレートな作り方をしており、サブクラス化もあえてしていません。Pharoにおけるゲーム作成の参考になれば幸いです。

動作画面

なお、keyDown:, keyUp:を使用している関係上、キーコードの判定部分が機種依存になっています。そのためWindows, Macのソースを別ファイルにして配布しています。Linux等で利用する場合には、適宜、Danmaku>keyDown:, Danmaku>keyUp:を修正してください。

対応バージョンとしてはPharo 1.2.1を想定していますが、1.3でも動作するはずです。1.2.1の場合、CogVMの使用を強くお勧めします。

ダウンロード

配布時ソースコード(Mac版)
配布時ソースコード(Windows版)

インストール

  1. Windows,Macの環境に応じた上記ファイルをダウンロードし、適当なフォルダに置きます。
  2. Pharoを起動して、WorldメニューからTools-File Browserを開き、上記ファイルを見つけて、Filinします。

起動方法

Workspaceで、Danmaku new openInWorldとしてください。現れた画面をクリックすると、キー入力を受け付けるようになります。
遊び方としては、上下左右の矢印キーを使って飛んでくる赤い玉をよけるだけです。

ライセンス

GPL v3

ScratchGainerの公開

ScratchDay 2011でデモを行ったScratchGainerのイメージおよびソースファイルを公開します。

http://info.scratch.mit.edu/Source_Code で配布されているBased On Scratchのイメージを上書きすればScratchでGainerを扱うことができるようになります。

インストール方法や使い方についてのご相談はtwitter上のアカウント @nqthm まで遠慮なくどうぞ。

なお、利用される場合は現在進行形のプロジェクトなので予告なく内容が変わることをご了承ください。

ダウンロード

イメージファイル(zip圧縮済): ScratchSourceCode1.4.image.zip
チェンジファイル: ScratchGainer1.6.cs

ライセンス

GPL v3

JackPot on Pharoのファイル公開

前期の専門ゼミナールの前半に題材として取り上げたJackPotのソースを公開します。
JackPotは「がまぐ 2011/2」の特集:ゲームデザインで取り上げられている土本さんによるゲームです。
「がまぐ」ではJavaのソースが公開されていますが、これをPharoに移植してゼミで使い、Pharoの使い方やSmalltalk/80の文法などを学びました。

★ステップ1★
最初は配布したソースコードによってゲームの動作を把握します。
配布時ソースコード(Mac版)
配布時ソースコード(Windows版)
動作画面

※Worldメニュー-WorkspaceでWorkspaceを開き、「JackPot new openInWorld」と入力して選択し、コンテキストメニュー-Do itを選んで実行します。
※利用しているPharoのバージョンは1.2.1です。http://www.pharo-project.org よりダウンロードするか、末尾のZIPファイルをダウンロードして展開してください。
※入力キーコードの違いにより、配布時ソースコードをMac版とWindows版に分けています。

★ステップ2★
ゲームに対して簡単な変更を加えます。ステップ1のままではすぐに負けてしまうため、自機のスピードを2倍にします。
変更部分のソースコード(チェンジファイル)
変更の様子と動作画面

変更部分のソースコードは、Worldメニュー-Tools-File BrowserでFile Browserを開き、該当ファイルを選んでFile Inします。

★ステップ3★
ステップ2で簡単になりすぎたゲームを改良します。具体的には宝物を取った時に待つようにします。
変更部分のソースコード(チェンジファイル)
変更の様子と動作画面

★ZIPファイル★
なお、Pharo/Squeakに不慣れなWindowsユーザーのために、ステップ1からステップ3のファイルを同梱し、ステップ1の状態になっているzipファイルを公開します。
JackPot.zip (19,211,251バイト)

Defart4の仮公開

先日行われたロボカップに使用したDefart4システムのソースを公開します。

きちんとビルドするには、公開したソース以外のファイルが必要となりますので、興味のある方はお問い合わせページより、伊藤までご連絡ください。

little smalltalkソース:little015.tgz

ライブラリソース:rmlib012.tgz

正式なものについては追って公開する予定です。

RM-eyeとRCB-3との接続

週末にロボカップが始まるという状況で、ようやくイクシスリサーチのRM-eyeと近藤科学のRCB-3との接続確認を行いました。

RM-eye上のCN3と、RCB3の高速シリアル接続端子とをストレートケーブルで接続します。

CN3をCN2と勘違いしていたため昨日1日つぶしてしまいましたが、きちんと動作確認することができました。

なお、マニュアル(RM-eye 取扱説明書 Ver.1.1)のp11にはクロスケーブルを使用すると記載があるので注意が必要です。

RM-eye-というソフトウェアでは自動実行の手順を書き込むことができるのですが、その内容が保存されないため、毎回設定が必要で、えらく面倒な様子です。
このところのプロトコルも公開されるといいのですが…

サイト停止のお知らせ

ITOLABのサイトをアップグレードするため、下記の期間、一時的にサイトが利用できなくなります。
ご迷惑をおかけしますが、ご協力をお願いいたします。

停止予定期間:3月22日〜3月28日

よろしくお願いいたします。

RM-boardの開発環境整備4

しばらく浅草ギ研のS-Eyeの接続にハマっていました。
ボーレート設定の読み違えという初歩的なミスで、数日間を費やしてしまいました。サポートの方、ごめんなさい。
S-Eyeが接続できることがわかったのと、RM-eyeで二値化画像が得られることがわかったのとで、今度は開発環境整備の方を進めることにしました。
先日のlitte smalltalkはくせ者なのですが、せっかくSmalltalkで書けるのだからと採用を予定しています。

今日はPC上のsqueakとのネットワーク接続を試みました。little smalltalkにTCPの通信機能を実装している暇はないので、単純にstdinとstdoutを置き換える形で実装してみました。これで、squeak上からTCPで接続して、RM-board上のlittle smalltalkを操作できるようになりました。

サーボもつないで動かしてみたのですが、ホームポジションの設定がまずかったらしく、レレレのおじさんのような格好になってしまいます。下半身強化のため足部を外していたのでよかったですが、つながってたらかなり悲惨なことになっていそうです。

これからサーボ制御まわりに取りかかります。

ScratchによるKHR-1HV(RCB-3)の制御

無事に学園祭が終わりました。今年の目玉の一つはKHR-1HVによるダンスです。おかげさまで、当日かなりの注目を浴びることができました。徹夜でモーションを完成させたロボットチームはお疲れ様でした。

2体のロボットを同時にスタートさせたいというところから、HTHやRCBCommander3では対応していないためにプログラムで制御しようということになり、せっかくだからScratchで制御しようと進んできました。

何とか使えそうなところまできたので公開いたします。

チェンジファイル:DefartNetworkConnection.cs
Scratchソース:Scratch Source Code

RM-boardの開発環境整備3

前回は開発環境としてluaの組み込みに成功しましたが、やはりITOLABでの基本言語はSmalltalkだろうということで、RM-boardにSmalltalkを組み込むことに成功しました。

といってもSmalltalk/80の現在の主流であるSqueakやCincomではなく、Little Smalltalkを組み込みました。

Little Smalltalkはsumimさんのブログに詳しいですが、ティモシー・バッドの作成した学習用の実装です。

オリジナルのソース:small.v3.tar

これをubuntu上でARM用にクロスコンパイルし、RM-boardに移してsystemImageを構築しました。一部に手直しが必要だっただけで、ほとんどすんなりとコンパイルすることができました。

それからLua用に用意したRM-boardのサーボを制御するルーチンをプリミティブとして実装し、LittleSmalltalkからサーボの制御ができるようになりました。

LittleSmalltalkでどの程度本格的なプログラムが組めるのかまったく未知数ですが、面白そうなのでしばらくはこれで開発を進めてみようと思います。