情報システム設計演習
−携帯型ゲームプログラミング−
補足資料

このページは情報システム設計演習のTAを担当している高田の補足用ページです。
北川先生の演習用HPの補足として閲覧ください。

-コンテンツ-

2009年度作品
2008年度作品
2006年度作品
2005年度作品
2004年度作品(後半)
2004年度作品(前半)
設計環境の構築
スプライト画像の作り方
タイルマップ背景の作り方
簡易リンク
設計環境の構築(旧Ver.)

作品例

ゲームキャプチャ画面をクリックすることでゲームデータにアクセスすることが出来ます。
”右クリック”→”対象をファイルに保存”等で収得してください。

2009年度作品
gameimg

作成者 : 小野 祐貴

ゲーム内容 :
たまねぎをタイミングよく切るビート系ゲーム(タイミングを外すと
涙目に!)、お手玉の数が増えていくジャグリングゲーム、敵艦や敵爆
撃機に照準を合わせて打ち落とし街を守るという設定のシューティン
グゲームがセットになっている。

動作状況 :
画面素材を管理するファイルシステムから自前で作成されており、
完成度が高い。本作者は、同時にGBA用PCM(wav)・動画再生ソフトも
制作しており、別途技術解説ページで発表されることが望まれる。

取扱説明書(PDF)

技術解説(PDF)

gameimg

作成者 : 河合 一樹

ゲーム内容 :
最大96体の敵が現れいろいろな速度で降ってくるのを避けながら近づ
いた敵を蒸発させるシューティングゲーム。制作者は避けゲーと呼ん
でいる。

動作状況 :
白背景、キャラクターは四角で表すなど見た目はシンプルであるが、
スコアの非線形計算、敵とかすった場合の処理など、細部にも注意を
払って作成されている。味方の動きに一部バグが報告されている。

取扱説明書(TEXT)

gameimg

作成者 : 佐藤 壮一

ゲーム内容 :
モーバイル・ステーショナリの基本アイテムであるカレンダーと電卓
がセットで実装されている。カレンダーは閏年にも対応。GBAはキー
が少ないため電卓の操作方法にはさらに工夫が必要かもしれない。

動作状況 :
カレンダーは完全動作を確認。電卓は、計算毎にAC(クリア)ボタン
入力しなければならない。小数の計算が一部失敗するバグが作者によ
り報告されている。

gameimg

作成者 : 寺田 達也

ゲーム内容 :

敵弾を上下左右に避けながら敵を弾で撃ち落とすシューティングゲーム
の基本形。敵の攻撃、出現タイミング、動きにはいくつかのパターン
があり、その組み合わせにより攻撃を仕掛けてくるため、敵の動きが
予想しにくくなっている。

動作状況 :
動作が重いという問題はあるが、ゲームとしては完成している。
敵の動きや出現・分裂が状況に応じて制御されており、よく作り込
まれている。

取扱説明書(PDF)

gameimg

作成者 : 前 佑樹

ゲーム内容 :
○ックマンを模擬したほのぼの系アクションゲーム。
敵毎に各種の追跡アルゴリズムが実装されているので、
敵の動作を観察するのも楽しい。

動作状況 :
ワープトンネル、フルーツターゲット以外の動作が実装され
ており完成度が高い。追跡アルゴリズムも取捨選択を検討した
うえで制作されているため動作が軽い。

取扱説明書(PDF)

gameimg

作成者 : 陸 守男

ゲーム内容 :
某有名落ちゲーを模擬したアクションパズルゲーム。4つの正方形を
組み合わせて作られたブロックを横移動と回転により隙間なく積み上
げていく。エミュレータで操作するのはかなり難しい。

動作状況 :
ブロックを端の位置で回転させると壁にめり込むというバグを除いて
ゲームとしての機能は完全に実装されている。ハイスコアに名前を入
力する機能、難易度の変更は未実装。

取扱説明書(TEXT)



2008年度作品
gameimg

作成者 : 岩崎 崇幸

ゲーム内容 :
ジャンプまたは左右移動して敵と敵の弾を避けながら、攻撃する
アクションゲーム。敵に50発の玉を当てると勝ち、自分が10発
食らうとゲームオーバとなる。玉は同時3発まで出せる。

動作状況 :
ゲーム開始時に自キャラの座標が正しくないこと以外は完全動作。
敵の動きが一定のパターンになっているのをランダムにしたいところ。

gameimg

作成者 : 和田 智晃

ゲーム内容 :
ドリームジャンボ宝くじのシミュレータ。ふと思い立ってくじを
買いに走る前に、定量的なシミュレーションで頭を冷やすことが
できる。まとめ買いも実装されており、キャラクタの動きも楽しい。

動作状況 :
シミュレーションを繰り返すほど理論的な期待値に近づくことが、
確認されている。動作を軽くするアルゴリズム上の工夫がされてい
る。効果音も実装されており、完成度が高い。



2006年度作品
gameimg

作成者 : 笹津 啓志

ゲーム内容 :
障害物を避けながらゴールをひたすらに目指す。
自機(白色)に対し、障害物に当たるとノックバックされ、
最終的に画面左端の敵に捕まるとゲームオーバー。

動作状況 :
キャラもスムーズに動き、ゲーム性も高い。
ゴールまでのインジケータや、クリア画面、ゲームオーバー画面も用意されている。

gameimg

作成者 : 高橋 秀明

ゲーム内容 :
オーソドックスなシミュレーションゲーム。
アイテムによるパワーアップやBOSSも実装済み。

動作状況 :
ソースコード的には割り込み処理を実装している初の例。
幾つかの敵の軌道パターン、生成消去管理が出来ている。

gameimg

作成者 : 中村 真吾

ゲーム内容 :
画面上に散らばる敵、追尾してくる敵を避けながら、
散らばるアイテム(千両箱)を集めるゲーム。

動作状況 :
ゲーム性に必要な部分は完全に実装済み。
もっと時間をかければ、オリジナリティが出せるのが惜しい。

gameimg

作成者 : 平塚 悠介

ゲーム内容 :
某横スクロール風アクションゲーム。
敵を避け、倒しながら、ゴールを目指す。

動作状況 :
基本的な動き・当たり判定・得点等の再現性が高い。
いくつか、まだバグが存在するのと、最後まで実装できなかったことが心残り。

(2007/4/17)その後、完成しました

gameimg

作成者 : 藤浪 裕喜

ゲーム内容 :
ブラックジャックゲーム。
手札に対し、スタンドとドローを選択し、21を目指す。

動作状況 :
ゲームスタートはプログラム的な制約から、バックスペースキーで開始。
基本的なシステムは実装済。惜しいのは親のアルゴリズムが単一なこと。

gameimg

作成者 : 近藤 雄一

実習内容 :
GBAではなく、もう一方のテーマである”USB-LAN変換装置によるネットワーク機器の開発”を選択。
USL-5P上のLinuxで制御するWEBカメラで習得した画像を、WEBサーバへ保持した後、公開するという構成構築を目的とした。

動作状況 :
クロスコンパイルならではの困難があったものの解決。
しかし、最終的にはライブラリの整合性が取れず、完全な実現までには至らなかった。

gameimg

作成者 : 山本 真

ゲーム内容 :
敵を避けながら、画面上に散らばる4つのアイテム(風車)を集める。
全てアイテムを集めると、弾を撃てるようになり敵を倒すことが出来る。

動作状況 :
風車を一つ取ると、風車がランダムで再配置される、また、
条件を満たすと敵を反撃が出来るところが面白い。



2005年度作品
gameimg

作成者 : 狩野 考太

ゲーム内容 :
某落ち物パズル風ゲーム。
ゲーム作りは初めてとのことで、オリジナルに沿って忠実に再現・・を目指してました。

動作状況 :
一通りのルール判定処理は実装済み。
ただ、アルゴリズムに難があるのか動作が非常に重くなっているのが欠点。

gameimg

作成者 : 越田 祟司

ゲーム内容 :
落ちモノゲームの制作。よくあるこの手の定石を打破するため、独自のシステムを目指す。
アイディアの実装段階まで進めなかったのが残念。

動作状況 :
依然テスト段階。

gameimg

作成者 : 竹村 省吾

ゲーム内容 :
テーマはボクシング。リアルタイムではなく、互いの先行入力による心理的駆け引きを楽しめる。
単調なジャンケン的駆け引きだけじゃなく、一発逆転的要素も盛り込まれている。
遊び方が背景に書かれていて分かり易いのもGOOD!

動作状況 :
完全動作。ただ、現在攻撃ターンか防御ターンかを見分けなければならないのが欠点?

gameimg

作成者 : 中澤 誠

ゲーム内容 :
パックマンのような見下ろし型の2Dアクションゲーム。
違うのは、十字キーのみで敵を避けつつ、アイテムを全て回収するのが目的。
これが簡単そうに見えて、結構難しい。クリアするまで熱くなること必死!

動作状況 :
完全動作。絶妙なゲームバランスを保っている。
欲を言えば、ランダムな要素をいれて毎回違う配置や、タイムアタックがあるともっと面白くなったかも?

gameimg

作成者 : 中山 雅文

ゲーム内容 :
某有名縦型シューティング風ゲーム。
敵(りんごの精?)が徐々に下方へ迫ってくるが、たどり着くまでに倒しきらなければならない。
勿論敵もランダムなタイミングで攻撃してくる。
雑魚を倒しきると・・すごいBOSSが登場!!

動作状況 :
完全動作。ただ、スタート画面の片隅にオブジェクトの影が。
ゲームでは左右のみに動き、aボタンで弾を発射して敵を打ち落とす。

gameimg

作成者 : 森 勝也

ゲーム内容 :
ベルトスクロールアクションゲーム。
2種類の敵を行く手を阻み、倒しながら先へと進む。

動作状況 :
完全動作。この演習で初めて、フラッシュメモリ格納容量を超える程作り込みがされた作品。
細かくスプライトが作られており、動きを見ているだけでも面白い。
aボタンが通常攻撃、bボタンがジャンプ攻撃を行う。



2004年度作品(後半)
gameimg

作成者 : 黒田 弥文

ゲーム内容 :
aボタンを連打することにより、ニコニコマーク(自機)が上に上がる。何も押さないと自然に下へ。
画面右側から出てくる三種類の敵を避けながら、どれだけ生存できるかを競うゲーム。
三回ぶつかるか、もしくは下に落ちてしまうとゲームオーバー。

動作状況 :
自機数:life、生存時間:timeも実装。
三種の敵のパターンもそれぞれ違い、一つのゲームとしての完成度はかなり高い。
バグも確認されて無いが・・一つ惜しむべきはtimeが16進であるということだけ(笑

gameimg

作成者 : 大江 好充

ゲーム内容 :
某落ち物パズル風ゲーム。levelやmaxchain、スコア表示も実装され、本格的。
2個の連結した4色のブロックを画面に配置していき、同じ色が4つ縦横繋がったら消えるゲーム。
スプライトを用いたブロックと、消され解放されたスプライトをうまく再利用している。
連鎖・消去によるブロック移動、マスにブロックが在るかどうかの判定等、様々な処理が行われている。

動作状況 :
ゲームの複雑なアルゴリズムを非常によく完成させている。ただ、連鎖処理がやや重いかも?
ちょっとしたバグがあるのとtimeが未実装だが、ゲーム性は既に十分確保されている。

gameimg

作成者 : 平木 謙次

ゲーム内容 :
gbaのボタン、8個を利用したモグラ叩きゲーム。モグラが出現した位置に描かれているキーを押せばok!
黒と白の2種類のモグラが出現し、黒を叩くと+1点、白を叩くとー2点される。
右上に得点が描かれ、徐々にモグラの出現タイミングが早くなっていきゲームが終了。
なお、このゲームの初期状態はデモ画面となっており、スタートを押すことでゲームを始めることが出来る。

動作状況 :
出現するモグラの数が毎回異なったり、左キーだけが何故か時々認識しないことも確認されているが、原因は未だ不明。
モグラ叩きとして十分満足して楽しめる機能は既に実装済み。

gameimg

作成者 : 金 燮

ゲーム内容 :
高度を徐々に下げながら、画面右側から左側へ、飛行機が飛んでいく。
aボタンを押すことによって、ボールを同時に1個だけ落とすことが出来るので、それを中央の籠の中へうまく落とせると得点が増える。
この得点が10になるとステージクリアー! 次のlevelへと進む。
ただし、ボールを入れる毎に少しずつ自機の速度は上がり難易度が増していく。
下の籠にぶつかるとゲームオーバー。
しかし、高度が下がると入れやすくなるという、ハイリスク・ハイリターンというゲーム性を確立している。

動作状況 :
単純ながら熱くなれるゲーム性を秘めた作品。
バグはほぼ見受けられず、安定な作りとなっている。
強いて言えば、早めに入れることで高得点や籠の移動等、後はゲーム性の追求だろう。

gameimg

作成者 : 瀧内 新悟

ゲーム内容 :
ちょっと変わったシューティングゲーム。
特徴として、自機が動ける範囲が表示画面より大きい仮想画面も用いている。
弾はaボタンとbボタンで上下のみ撃てる。敵はランダムに6方向から出現し、体当たりを狙ってくる雑魚と 雑魚の倍の大きさを持ち、弾を撃ってくるボスが出現する。
弾の発射間隔にはdelayをかけてあり、近接で高速に発射できないしてあることや メインループの2回に1回敵の移動処理を行うことで、敵を振り切り攻撃が出来る等、随所に工夫が盛り込まれている。

動作状況 :
敵が同時に2体出現することが無かったり、得点等は実装されなかったが、シューティングとしての当たり判定や 倒した後、倒されたときの爆発処理等が実装されている。
ただ、倒された後、ゲームを再開するときに一瞬画面が乱れてしまうのが欠点。



2004年度作品(前半)
gameimg

作成者 : 松本 丈

ゲーム内容 :
テキスト入出力プログラム。平仮名、片仮名、英字、記号の4種類の文字列をつかって
文字列を作成することが出来る。複合画面合成テクニック、データの格納等うまく処理されている。

動作状況 :
多少バグはあるが、ほぼ完全動作。

gameimg

作成者 : 長谷 敬幸

ゲーム内容 :
マインスイーパーの移植版。ゲームは10*10のパネル領域で行われる。
爆弾を明けてしまうとパネル全オープン。爆弾のランダム初期配置、その場所からの数値パネルの生成、
パネルのオープン処理と色々とアルゴリズムが埋め込まれている。

動作状況 :
カーソルがまだリンゴだったり、フラグを立てれない、リセットが出来ない、爆弾の数が一定じゃない等、
まだ完全じゃないが爆弾配置、パネルオープンなど内部アルゴリズムは非常に良く出来ている。

gameimg

作成者 : 伊藤 聡宏

ゲーム内容 :
落ちてくるリンゴを下のバーでキャッチするプログラム。20個のリンゴをキャッチすることでゲームクリア。
クリアすると画面が塗りつぶされてゲーム終了となる。複数のスプライト制御処理、リンゴ発生位置の
ランダムアルゴリズム、あたり判定処理が行われている。

動作状況 :
リンゴの獲得数の表示や、時刻表示、リセットなど実装できなかったが、基本的ゲーム動作に関しては完全動作。

gameimg

作成者 : 浜野 圭市

ゲーム内容 :
十字キーでラインが伸びていく方向を操作し、周囲かすでになぞったところにぶつかるとゲーム終了。
終了するときに、画面を上からざっと塗りつぶしていく。
gbaの基本処理であるタイルのみでの構成、配列によるあたり判定処理、スタート位置の疑似ランダム処理等が実装されている。

動作状況 :
タイマーを使用した生存時間の記録等は行えなかったが、ゲーム基本機能は完成。





設計環境の構築

(昔のVer.はページ最後に書いてあります)
  1. [設計環境のダウンロード]
    この実習ではVisual HAMと言う開発環境を用いて作成していきたいと思います。
    ただ、ここではコンパイラ、エミュレータが含まれた統合開発環境(HAM Devkit)の方を入れます。
    上記リンク先で"HAM 2.8 Freeware edition"を入手してください。
    次にインストールを行いますが、"インストールまで"の作業については"このサイト"を参考にしてください。

  2. [設定ファイルの変更]
    次に、このままの環境だと少々扱いづらいので、設定ファイルを変更します(設定ファイルはこちら
    ダウンロードしたファイルを解凍し、先程インストールしたフォルダ(HAM)に上書きしてください。
    変更の詳細は同梱したreadme.txtファイルをお読み下さい。

  3. [プロジェクトの作成]
    Visual HAMを起動してください。
    その後、メニューからFile -> New -> New Projectを選びます。
    開いたダイアログには次の用に入力します。
    Project には [C] Merlを選択、Project name には test、Locationは"C:\HAM\work"まで選択し、
    これに適宜作業フォルダ名(ここではtest)を書き加え、"C:\HAM\work\test\"の用に入力して下さい。
    OKを押すとプロジェクトが作成されます。

  4. [コンパイルと実行]
    では、ここでは実際にコンパイルと実行を行います。
    左のWorkspaceツリーよりmain.cをダブルクリックしてください。ソースが開かれると思います。
    これは北川先生の実習用HP、"クイックスタート"に用いられているtile.cをmain.cとリネームした物です。
    ビルド及びデバックを行いたい場合はF7を押してください。
    無事、流れるタイルを見ることが出来れば完了です。

  5. [制作の進め方]
    後はこのテンプレートや、北川先生のHPに記載されている"基本機能の実装例"を改良しながら、理解を深めて欲しいのですが、
    ここでは、その実装例をVisualHAMへ組み込む方法を紹介します。
    まず、上記と同様に、テンプレートを用いて新規作成します(project名やフォルダパスは適宜書き換えてください)。
    その後、実行したいサンプルに必要なファイルを全て、その作成されたフォルダに保存します。
    保存したファイルの内、gba実行の核となるmain関数が記載されたcソース(例えば、画像と図形表示であればbmp.c)があると思います。
    そのcソースをmain.cとリネームし、テンプレートのmain.cに上書きしてください。
    後は上記同様にコンパイル及び実行をすることが出来るはずです。頑張ってください!


スプライト画像の作り方

  1. ここでは基本機能の実装例の"スプライト(オブジェクト)"を参考に作成します。
    上記を参考にしながら、サンプルをコンパイルできる環境を作成してください。

  2. 次にリンゴの画像を置き換えます。16x16、256色の画像ファイル(bmp)を用意します。
    ここでは、このサンプル画像を使います。
    ball
    ball.bmpとして保存してください。

  3. 画像を用意できたら、gbaにファイルを読み込ませるために"bmp2rgb(ミラーファイル)"というソフトを使用します。
    ソフトを任意の場所に保存してください。

  4. ソフトを起動し、まず"色数の設定"を256色に変え、"画像を読み込む"でball.bmpを読み込んでください。
    読み込めていることを確認できたら、データ出力してみてください。
    ball.cとball.hが出来ていると思います。
    ここではball.cのみを使用します。

  5. ここで、テキストエディタを使って、サンプルであるapplobj2.cとball.cの中身を比較してください。
    どこが違っているでしょうか?

  6. その違いを考慮しながら、main.cを書き換えます。
    ヒントは読み込みファイルの定義、スプライト初期化時のdata・paletteの名称、そしてサイズ(今回入力したのは32x16のサイズ)です。
    エミュレータ上のtool -> Tile Viewerなども参考にしてください。

  7. 画像の置換が出来たら、二つ目のボールを表示させましょう。
    ヒントはsp_attribute関数のchnumです。

  8. また、透明色の設定にはdata・paletteの関係を理解する必要があります。
    エミュレータ上のtool -> Palette Viewなども参考にしてください。
    (ヒント:Dataの要素それぞれがpaletteのアドレスを示しているから、透明色0x0000へ割り当てれば〜)

  9. スプライトは16x16のサイズ以外にも16x32、32x16、32x32など様々なサイズをとります。
    どのような順番で画像が読み込まれるか?これを理解するための画像も用意しておいたので、適宜使ってみてください。
    ball

  10. 最後に、もし背景としてbmpストリームデータ(例:sky.c 256x160)を読み込む場合も同様に出力出来ます。
    ただし、膨大な容量を消費してしまうので、お勧めはしません。



タイルマップ背景の作り方

  1. ここでは基本機能の実装例の"仮想画面とスクロール"を参考に作成します。
    上記を参考にしながら、サンプルをコンパイルできる環境を作成してください。

  2. 画像はそのままサンプルで使用されている物を使いたいと思います。
    上記URLから画像を保存してください。
    タイルマップ作成には"WideMapEditor(ミラーファイル)"を使います。
    任意の場所に保存してください。

  3. ソフトを起動し、まず、画像読み込みでサンプルの画像データを読み込みます。
    また、配列名を適宜変えておきます。機能は色々触っている間に分かると思います。

  4. 描画出来るタイル数はデフォルトで32x32となっています。
    ただし、この全てが表示出来る領域ではありません。
    タイルモードの説明を読みながら、まず適当にマップを作成して、マップデータ出力より、hファイルを出力してください。
    終了時、現在の作成マップ環境を保存することも出来ます。

  5. 出力したhファイルをフォルダに保存し、main.cを書き換えます。
    どこを書き換えれば良いでしょうか?
    2カ所書き換えれば、表示できると思います。
    沢山の画像使うゲームにはこの様にしてデータを節約します。

  6. 最後に、このタイルデータやスプライトは同じパレットを使用します。
    このため、ゲーム内に用いるこれらの画像は上記スプライト例のように一枚の画像に纏めることをお勧めします。



簡易リンク




設計環境の構築(旧Ver.)

  1. まずは北川先生hpを参考にしながら、devkit advanceとvisualboy advanceを導入してください。
    ここで、visualboy advanceの実行ファイルvisualboyadvance.exeは
    先ほど環境変数を変更してパスを通したc:\gba\devkitadvにおいておくとベストです。
    また、.gbaという拡張子にvisualboyadvance.exeを関連づけておくとなおベストです。

  2. コマンドラインからコンパイルをして開発するのもいいですが、毎度コマンドを打つのも大変なので(batファイルを用意しておけば楽ですが)、
    ここではフリーのide(統合開発環境)であるvisualhamを用いての開発を説明します。

    visualhamの導入については、gbaプログラミング研究所内のvisualhamというコンテンツ
    にて詳しく解説為されていましたが、現在はクローズしていますのでgoogleのキャッシュをリンクしておきます。
    その記述に従ってvisualhamを導入してもらえばいいのですが、"devkitadvance用テンプレートの追加"で適用できる
    本設計演習用のdevkitadvance用テンプレートを置いておきます。
    北川先生のhpのクイックスタートをvisualham用にしたものです。
    こちらのテンプレートを同様に導入し、用いてテストしてみてください>>タイルテンプレート(zip圧縮形式)

  3. 開発環境を導入し、f5でコンパイル、f6で実行出来ましたでしょうか?
    実行できたなら、北川先生のhpの基本機能の実装例で示されている サンプル群をこの環境へ導入する方法を紹介します。
    まずは、上の本設計演習用テンプレートを用いた新規プロジェクトを任意のフォルダに作成します。
    そのフォルダに実行したいサンプルで用いられているプログラムを全て置いておきます。
    次にmain関数が入っているcファイル(例えば画像と図形表示であればbmp.c)の名前をmain.cに変更します。
    この操作だけで、main.cが置き換わり、コンパイル、実行が出来るはずです。
お問い合わせはこちらまで: masashi@merl.ec.t.kanazawa-u.ac.jp
(c) kanazawa univ., 2006