PIC AVR 工作室->TopPage->AVRの工作->ドットイーター
ドットイーター
ドットイーターの概要
ギネスにも載ったという説明不要の伝説のゲーム、パック○ンのパクリゲームですにインスパイアされた作品です。
何か作ると言ったら、やっぱ最初はこれ以外ないでしょう!
一応簡単な説明を。4方向ボタンで操作し、ドットを食べまくります。ドットを全部食べるとクリア。敵に捕まるとendです。 上下の隙間はワープトンネルです。
3時間くらいで作って、翌日1時間くらいでデバッグと機能追加した代物なので、この程度でひとまずご勘弁… 改造して遊んでください。
サンプルムービー:ドットイーターのキャプチャ画面
キャプチャー画面をフラッシュムービーにしました。画面をクリックすると再生します。
使い方
PLAYER用のプログラムです。 スプライト表示には「スプライト表示器V4」を、 背景表示には「背景表示器V2」を使います。 PLAYER上のそれぞれのtiny2313に書き込んでおいてください。
メインCPUにはMEGA48を想定していますが、それ以上のメモリを持つ88や168ならソースはそのまま動作可能だと思います。
下のダウンロードからアーカイブをダウンロードし、hexファイルとeepファイルを書き込んでください。 あとはRCA端子をテレビに繋ぐだけで画面が表示されます。上下左右の4つのボタンで移動します。ABボタンは使いません。
実際にさわってみれば判ると思いますが、本物との違いを挙げておきます。
- モンスターが全部同じ色!
- 迷路が横倒しになっている
- 画面が狭いので、迷路が再現しきれていない
- パワーエサでイジケにならない
- フルーツが出ない
- 音がまったくでない
- 自分の数=1匹だけ(1回追いつかれたら終了)
- 敵の数=3匹だけ
- 敵は「前進」「右折」「左折」のいずれかにしか動かない(反転しない)
- 敵1つ1つに独特の性格無し(すべて同じロジック:乱数で移動)
- 乱数の種が電源ONで毎回一緒のため、モンスターの動きがいつも同じ
- パックマンとモンスターのスピードが常に同じ
- ゲームが進んでもスピードアップしない
- 曲がり角の手前で方向キーを入れると、その瞬間に顔を向けてしまう
- 1面クリアするか敵に追いつかれると終了(フリーズする)
- モンスターハウスは内部処理では壁と同等の扱い
- などなど
コメント
実は、プログラム作成の中で一番時間がかかった(というか手間取った)のは、固定値の配列データをプログラムメモリ上に 置く方法でした。迷路の初期状態のデータをプログラムメモリ上に置いておき、適宜SRAMに読み出そうと思ったのですが、 シミュレータをかけてみるとプログラムメモリ上に置いたはずのデータがSRAMにも配置されていて、 それが原因なのかメモリ破壊を起こして暴走… 手を尽くしてみたものの結局諦めて、データをEEPROM上に 置いておいて実行時にSRAMに読み込むという形に。これだけで2時間は悩んだはず…
C言語はもともとノイマン型アーキティクチャが前提になっていますが、AVRやPICはハーバードアーキティクチャ。 プログラムメモリの空間とRAM空間が分離していると色々支障が出るんでしょうね。まぁ、仕方ない…。
…例によって、コンパイラってこれっぽっちの処理させるのに4kBのメモリほとんど食い尽くしました。大食いです。 フルアセンブラならもっとたくさんのロジックを組み入れられたろうに…まぁ、88か168使えばいいんですが。
一応パックマンぽい感じにはなったと思いますが、ゲームとしてはまだ面白くもなんともありません。そこで…↓
改造して遊んでください!
ソースを改造して、もっと遊べるゲームに仕上げて遊んで下さい!
ナムコの原作に近づけるも良し、全くのニューバージョンにするも良し。お好きな形に!
ソースはアーカイブの中に入ってます。短いプログラムなので目を通せばなんとなく解ると思います。以下簡単な説明を。
主人公とモンスターがスプライト。迷路やドットは背景として処理しています。
スコア表示といえば普通は背景キャラに書きたいところですが、AVR背景表示器にはキャラクタの種類が16以内という制約があります。 迷路やドット、空白以外の背景ビットマップを0~9の数字に割り当てて使うか、もしくはスプライト25個のうち 余っている4つを適当なところに並べて使うか…(スプライト4つなら横一列に並べても表示可能なので) お任せいたします。
ダウンロード
ドットイーター用アーカイブ(クリックすると開きます)
(注)PLAYER上で動作します。スプライト表示器はV4を、 背景表示器はV2を使用してください。