Skip to content

kento2247/mp_exp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

How to build

1. cd ./soft
2. make clean
3. make
4. cd ../hard
5. make clean
6. make
7. make program
./write.shで書き込めます

書き込み完了

How to edit

  • ハードウェアに書き込むファイル: ./mips/soft/test.c

    • 本番プログラムを記述するファイル: ./main.c
    • 本番プログラムを書き込みファイルに反映: 書き込み時に自動反映: ./write.sh
    • デバッグプログラムを記述するファイル: ./debug.c
    • デバッグプログラムを書き込みファイルに反映: 書き込み時に自動反映: ./write.sh ファイル名
      • kento_debug.c を書き込みたい場合: ./write.sh kento_debug.c

Concept

  • 直線上に球を打ち返すゲーム
  • 打ち返すタイミングによって球速が変化
  • 判定するロジックの周波数を高くする必要がある
  • 球を打つたびに効果音

Hardware

  • main board
  • large LCD display
  • buzzer
  • cable 1
  • cable 2
  • extension switch 1
  • extension switch 2

External design

  • プレイ人数: 2 人
  • ライフ: 5

ゲームルール

  • プレイヤーは球を撃ち返す
  • 撃ち返すラケット位置は固定
  • ボールが適切な位置に移動してきた時に、ボタンを押すと球を撃ち返す
  • 画面外にボールが移動する(打ち返せない)とライフが-1、ゲーム pause
  • ボタンを押すと自動でサーブをし、ゲーム再開
  • タイミングが良いと球速が速くなる(連続でタイミングがいいと2倍、3倍、4倍と上限なく早くなる)
  • タイミングがいい時と悪い時でブザー音が変わる
  • ラケットを振ったら(ボタンを押したら)一定時間振ることができない
  • ゲーム開始時と終了時にテロップを表示
  • 画面下部にはライフを表示

適切なタイミング

  • 画面端から~15%で打ち返し:判定されない。およそ0.5秒行動不能
  • 画面端から15%~10%で打ち返し:打ち返し成功
  • 画面端から10%~5%で打ち返し:打ち返し大成功。球速が1段階上がる
  • 画面端から5%~0%で打ち返し:打ち返し成功
  • 画面端から0%~:打ち返し失敗判定。ライフ減少でゲーム停止

ゲームの終了条件

  • どちらか一方のプレイヤーのライフが0になるとresult画面へ遷移
  • result画面の案内は以下の通り
  • button0を押すとゲーム終了
  • button1を押すとリスタート

デバイス操作方法

デバイス画像
Screenshot 2024-01-02 at 22 33 44

  • 左側のボタン:player_Aの操作ボタン。4つあるボタンのうち左下のボタンのみ反応するので注意
  • 右側のボタン:player_Bの操作ボタン。4つあるボタンのうち左下のボタンのみ反応するので注意
  • 中央の画面:ゲーム中の指示やアニメーションが表示される
  • 右側にあるスピーカー:オープニング音やゲーム中の効果音がなる

Note

player_Bはプログラム中だとplayer_Cと称されることがある。これはplayer_Bの操作ボタンがIO/Cに接続されているため。

ゲーム中画面
Screenshot 2024-01-02 at 22 45 00

  • ディスプレイは4*20のLCDディスプレイ
  • ゲーム中最上部:player名を表示
  • ゲーム中2段目:ラケットのアイコンとボールを表示
  • ゲーム中最下部:左側にplayer_AのHP, 右側にplayer_BのHPを表示。MAXは5

Internal design

  • 必須条件 1: 割り込みハンドラの処理と main の処理を分ける

  • 必須条件 2: 大域変数を使用した値共有の仕様

    flow chart

    flow_chart

program

  1. lcd.c
    • LCD の初期化(init)
    • LCD に描画するフォント・ビットマップ画像の読み込み(load)
    • LCD に描画する情報を保存する情報は、class 変数で管理(set)
    • LCD に描画する情報を更新する関数を作成(dump)
    • LCD をクリアする関数を作成(clear)
  2. button.c
    • ゲーム開始時のテロップの情報を書き込み
    • ゲーム終了時のテロップの情報を書き込み
    • ゲーム画面の情報を書き込み
    • ゲームのポーズ画面の情報を書き込み
    • ゲーム画面の情報を更新
  3. game.c
    • ゲームパラメーターの初期化
    • ゲーム状態の管理
    • ライフの管理
    • 経過時間の管理
    • クールタイムの管理
    • ボールの位置の管理
    • ボールの速度の管理
    • ボールの移動方向の管理
    • ユーザー入力の処理(ボタン入力の取得と、タイミング判定)
  4. handler_func.c
    • 割り込みハンドラーでボタン入力だけ受理
  5. tone.c
  6. 大域変数
    • btn_states[6]: loop 関数で updaate し続ける btn 情報を格納。index03 は num03btn, inddex4=ioa, index5=ioc
    • enable_interrupt: handler 関数の処理を行うかの enable フラグ。割り込みをされたくない場合は false に設定
    • handler_cnt: handler 関数が何回呼ばれたか。HANDLER_INTERVAL で定義した ms おきに++1。sleep やタイミング調整で活用
    • game_state: game の状態を管理するための変数
    • ball_index: ボールの横方向の位置を記録
  7. main
    • LCD 描画の class のインスタンスを作成
    • LCD 描画の class を使用して、LCD に描画する情報を更新する class のインスタンスを作成
    • ゲーム内容の管理をする class のインスタンスを作成
    • 割り込みハンドラーの登録
    • メインループ(state を用いた状態遷移)
      • 0: ゲーム開始前、画面とゲームの init を呼び出す
      • 1: テロップ表示、ユーザーの入力待ち
      • 2: ゲーム中、ゲームの loop を呼び出す
      • 3: ゲーム終了、テロップ表示。ユーザーの入力待ち

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •