1. cd ./soft
2. make clean
3. make
4. cd ../hard
5. make clean
6. make
7. make program
./write.shで書き込めます
書き込み完了
-
ハードウェアに書き込むファイル:
./mips/soft/test.c- 本番プログラムを記述するファイル:
./main.c - 本番プログラムを書き込みファイルに反映: 書き込み時に自動反映:
./write.sh
- デバッグプログラムを記述するファイル:
./debug.c - デバッグプログラムを書き込みファイルに反映: 書き込み時に自動反映:
./write.sh ファイル名- kento_debug.c を書き込みたい場合:
./write.sh kento_debug.c
- kento_debug.c を書き込みたい場合:
- 本番プログラムを記述するファイル:
- 直線上に球を打ち返すゲーム
- 打ち返すタイミングによって球速が変化
- 判定するロジックの周波数を高くする必要がある
- 球を打つたびに効果音
- main board
- large LCD display
- buzzer
- cable 1
- cable 2
- extension switch 1
- extension switch 2
- プレイ人数: 2 人
- ライフ: 5
- プレイヤーは球を撃ち返す
- 撃ち返すラケット位置は固定
- ボールが適切な位置に移動してきた時に、ボタンを押すと球を撃ち返す
- 画面外にボールが移動する(打ち返せない)とライフが-1、ゲーム pause
- ボタンを押すと自動でサーブをし、ゲーム再開
- タイミングが良いと球速が速くなる(連続でタイミングがいいと2倍、3倍、4倍と上限なく早くなる)
- タイミングがいい時と悪い時でブザー音が変わる
- ラケットを振ったら(ボタンを押したら)一定時間振ることができない
- ゲーム開始時と終了時にテロップを表示
- 画面下部にはライフを表示
- 画面端から~15%で打ち返し:判定されない。およそ0.5秒行動不能
- 画面端から15%~10%で打ち返し:打ち返し成功
- 画面端から10%~5%で打ち返し:打ち返し大成功。球速が1段階上がる
- 画面端から5%~0%で打ち返し:打ち返し成功
- 画面端から0%~:打ち返し失敗判定。ライフ減少でゲーム停止
- どちらか一方のプレイヤーのライフが0になるとresult画面へ遷移
- result画面の案内は以下の通り
- button0を押すとゲーム終了
- button1を押すとリスタート
- 左側のボタン:player_Aの操作ボタン。4つあるボタンのうち左下のボタンのみ反応するので注意
- 右側のボタン:player_Bの操作ボタン。4つあるボタンのうち左下のボタンのみ反応するので注意
- 中央の画面:ゲーム中の指示やアニメーションが表示される
- 右側にあるスピーカー:オープニング音やゲーム中の効果音がなる
Note
player_Bはプログラム中だとplayer_Cと称されることがある。これはplayer_Bの操作ボタンがIO/Cに接続されているため。
- ディスプレイは4*20のLCDディスプレイ
- ゲーム中最上部:player名を表示
- ゲーム中2段目:ラケットのアイコンとボールを表示
- ゲーム中最下部:左側にplayer_AのHP, 右側にplayer_BのHPを表示。MAXは5
- lcd.c
- LCD の初期化(init)
- LCD に描画するフォント・ビットマップ画像の読み込み(load)
- LCD に描画する情報を保存する情報は、class 変数で管理(set)
- LCD に描画する情報を更新する関数を作成(dump)
- LCD をクリアする関数を作成(clear)
- button.c
- ゲーム開始時のテロップの情報を書き込み
- ゲーム終了時のテロップの情報を書き込み
- ゲーム画面の情報を書き込み
- ゲームのポーズ画面の情報を書き込み
- ゲーム画面の情報を更新
- game.c
- ゲームパラメーターの初期化
- ゲーム状態の管理
- ライフの管理
- 経過時間の管理
- クールタイムの管理
- ボールの位置の管理
- ボールの速度の管理
- ボールの移動方向の管理
- ユーザー入力の処理(ボタン入力の取得と、タイミング判定)
- handler_func.c
- 割り込みハンドラーでボタン入力だけ受理
- tone.c
- 大域変数
- btn_states[6]: loop 関数で updaate し続ける btn 情報を格納。index0
3 は num03btn, inddex4=ioa, index5=ioc - enable_interrupt: handler 関数の処理を行うかの enable フラグ。割り込みをされたくない場合は false に設定
- handler_cnt: handler 関数が何回呼ばれたか。HANDLER_INTERVAL で定義した ms おきに++1。sleep やタイミング調整で活用
- game_state: game の状態を管理するための変数
- ball_index: ボールの横方向の位置を記録
- btn_states[6]: loop 関数で updaate し続ける btn 情報を格納。index0
- main
- LCD 描画の class のインスタンスを作成
- LCD 描画の class を使用して、LCD に描画する情報を更新する class のインスタンスを作成
- ゲーム内容の管理をする class のインスタンスを作成
- 割り込みハンドラーの登録
- メインループ(state を用いた状態遷移)
- 0: ゲーム開始前、画面とゲームの init を呼び出す
- 1: テロップ表示、ユーザーの入力待ち
- 2: ゲーム中、ゲームの loop を呼び出す
- 3: ゲーム終了、テロップ表示。ユーザーの入力待ち


