ゲームの構想

魚の群れをサメが追いかけて、どんどん食べていく対戦型ゲーム。
サメを操る人と、魚の群れを操る人の2人で、一定時間ゲームを続ける。
サメが全部の魚を食べてしまったらサメの勝ち。逆に一定時間魚の群れを守り続ければ魚の群れの勝ちにする。

ゲームの実装は"Processing"を使って行う。
Processingがインストールされていれば、どんな環境でも動作でき、少ないコードで簡単にGUIを作成できる。
コントローラは三軸加速度センサを使って、傾けて魚を操れるようにする。

まずは、Boidsルールで遊ぶ

Processigを使ってまず、魚の群れが泳ぐプログラムを作成した。
魚の群れを再現するために、Boidsルールを用いた。

Boidsルールとは?

群制御を実現するルールとして最も有名なものの1つに"Boids"ルールがある。
"Boids"ルールには3つのルールが存在する。
  • 他の個体と近づき過ぎたら離れる
  • 近隣の群れの近くに行こうとする
  • 近隣の群れの進行方向に合わせる
詳しくはこちら : Boidsシミュレーション-WonderPlanet DEVELOPER BLOG
驚くことに、このたった3つのルールをプログラムで実装するだけでまるで魚の群れが泳いでいるかのような動きを実現できる。
今回は、この3つのルールを"Processing"で実現した。

Boidsルールで魚を動かしてみる

Processingで魚の群れが画面をおよくプログラムを作成した。
以下のURLからプログラムをダウンロードできる。
ボイズルールのプログラム
Processingで実行すると、魚の群れのように丸い玉が画面を自由に移動する。

コントローラーの作成

魚を操るためのコントローラーを作成する。
コントローラを傾けると魚が操れるようにしたいので、三軸加速度センサーを利用。
コントローラにはxBeeを載っけて、ワイヤレスで操作できるようにする。

必要なもの

    • 抵抗240 k x2
    • 抵抗390 k x2
    • タンタルコンデンサ0.22 uF x2
    • xbee series2 x1
    • 3軸加速度センサ KXR94-2050 x1
    • 紙フェノール基盤 100x150 mm x1
    • 2mmピッチメスピンヘッダ
    • 2.54mmピッチメスピンヘッダ
    を1つのコントローラに使用する。

    xBeeとは

    xBeeとは、無線でデータをやりとりするためのツール。
    簡単な設定で、ワイヤレス通信を簡単に実現できるのが魅力。
    40mぐらいは通信することができる。(見通しが良いところなら120m)

    PC側のxBeeの設定

    X-CTUをパソコンにインストールする。
    XbeeをUSB付きのアダプターにセットし、PCに接続する。
    X-CTUを起動し、"+"ボタンから、Xbeeと思われるデバイス名を選択する。
    "Finish"をクリックすると、設定画面が右側のウィンドウに表示される。

    今PCに接続されているXbeeに、"コーディネーター"のファームウェアを書き込む。
    PAN IDとチャンネル、アドレスをメモしておく。


    コントローラー側のXbeeの設定

    現在取り付けてあるXbeeを取り外し、コントローラー用に使用するXbeeをアダプターに接続する。
    コントローラー用のXbeeを"APIルーター"のファームウェアを書き込み、先ほど書き留めたPANID 、チャンネル、アドレスを設定欄に反映させる。
    こちらのXbeeには、AD0,AD1のアナログピンの情報を読み込んで、一定時間おきに値を送信するように設定する。
    通信ができれば成功。

    細かい設定は:XBeeで作るワイヤレスセンサーネットワーク
    を参照した。
    (今後、細かな設定手順を追記するかも。)

    回路の作成

    コントローラの回路を作成する。
    下に回路設計ソフトEAGLEで作成した回路図を載っけた。

    EALGEのコントローラのスケマティック
    EAGLEのコントローラーのボード

    基盤の切削とハンダ付け

    EAGLEデータからkitmillを用いて基盤の切削を行った。
    完成後、さっそくハンダ付けを行い、動作確認へと...。

    動作確認---->完成っと思いきや

    テストプログラムを使用して動作確認。
    テスト前にXbeeをPCに接続し、
    ls /dev/tty.*
    をターミナルで実行。
    Xbeeらしきデバイス名をコピー。
    プログラムのvoid setting()内のダブルコーテーションで囲まれたデバイス名を書き換えること。
    (これをしないとプログラムが実行できない。)
    準備が終わったら、Processingの再生マークを押して、プログラムを実行。
    コントローラーを傾けてみる。
    コントローラーテストプログラム
    Xbeeとの通信は無事成功!
    しかし、加速度センサーから送られるデータがおかしく、傾けてもほとんど反応しない....。

    原因特定へ

    Xbeeは加速度センサーからのアナログ信号を読み取って、信号を送信している。
    原因はここの回路にあった。
    加速度センサーの値がXbeeで読み取れるように、抵抗で分圧してちょうどいい電圧になるように設計していた。
    が、分圧の回路に配線ミスがありXbeeに適切な信号が送られていなかった。

    EAGLEを修正。再度切削、ハンダ付け

    EAGLEデータを修正して、新しいコントローラを再度作成した。
    このサイトに上がっているEAGLEデータは修正が終わったものなのでそのまま使える。

    動作確認確認 (再)

    Xbeeとの通信が適切に行われ、かつコントローラーを傾けると、テストプログラムに映し出されたボールがそれに対応して動くことを確認!
    これでコントローラーは完成!

    パッケージ化

    子供でも操作しやすいように、タッパーにパッケージ化した。

    お魚ゲームの実装

    コントローラーが完成したので、
    いよいよお魚ゲームの実装へ!
    ゲームは1:30の制限時間で巨大魚に魚が食べられてしまうのか、生き残るかを競うようにした。

    プログラムコード

    ゲームプログラムを作成。
    XbeeをPCに接続し、
    テストプログラム同様、デバイス名を書き換えてプログラムを実行すること.
    お魚ゲームプログラム

    実際に遊ぶ

    実際に遊んでみた感じだと、少し、巨大魚が強すぎる...。
    なかなか小魚が生き残らない...。
    もう少しサメの大きさを小さくする、動きを遅くする。
    もしくは、小魚の群れを早く泳がせた方がいいのかもしれない...。