ブロック運びゲーム
発表項目 プロジェクトの目的 ゲーム概要 問題点と改善点 工夫した部分 まとめ
プロジェクトの目的 ・高位システム記述言語 Handle-C ・FPGA開発ボード(RC10) これらを用いてハードウェアの設計方法を学ぶ。 ・並列処理を用いたプラグラムを行う。 ・通信機能を使ったゲームを製作する。
ゲームの概要 最初の状態は縦5マス、横11マスのフィールドの 左端に自機が、右端に敵機、真ん中にブロックが配置してあります。 最初の状態は縦5マス、横11マスのフィールドの 左端に自機が、右端に敵機、真ん中にブロックが配置してあります。 このブロックは弾をあてることによって相手の陣地に1マス移動させることができます。 自機 ブロック 敵機
WIN ゲームのルール 機体は縦ラインの5マスしか動けない。 一つの横ラインに弾は同時に2発まで撃てる。 ブロックを敵陣地の端まで移動できれば勝利 敵に自陣の端まで移動させられたら負け WIN
問題点と改善点 弾がブロックに当たりにくい。 →画面をマス目状に分割することで、操作しやすくした。 ひとつのラインで同時に弾がブロックに当たったときに、弾がブロックを透過する。 →ブロックを通りこした場合でも当たったのと同等の判定とした。 通信の状態により対戦で多少のずれが生じる。 → 弾の発射状態を逐一通信しあうことでブレを少なくした。 これ以上の正確に同期をとろうとすると、さらにブロック の状態や弾の正確な位置を通信するべきだが、どうしてもブレが出るのは避けられない気がする。
工夫した部分 弾を一つの横ラインにつき2発まで撃てるようにした。 フィールドをマス目状にし、それぞれマスにゲームの状態を振り分けた。 画像のサイズを大きくなるよう調整した。 通信時に弾を発射したかの他に現在の発射状況も送るようにした。 これは弾用の変数を2個用意することで解決した。このことでゲームの戦略性が広がった。 このことで、マス毎に状態を割り振ることができて、設計しやすくした。
工夫した部分(マスの説明) 弾とブロックの配置、マス目を基準とした動きの説明。 (例) Beam[行]=列となるように作成する。 弾の位置 ブロックの位置 Block[1]=2 Block[2]=3 0 1 2 3 0 1 2 3
まとめ 原型のゲームを作ることはそれほど難しくはなかったが、通信で同期をとることが非常に難しかった。特にリアルタイムに動くゲームだったので、少しのズレが生じると左右の結果がずれてしまうこともあった。 機体やブロックの画像や、色など非常にゲームらしく仕上がった。 通信として課題は残るものの、ゲームらしくなって良かった。
質問用 通信の仕方 最初の3ビットで今いる横ラインの弾の有無 最後の3ビットで今いる位置を送信 受け取ったデータを見て、もし相手の弾の数が自分の持ちデータと異なっていたら弾の数を修正(不足分を発射)
質問用 通信の誤差について 実際のブロックの位置を互いに把握していないため左右の結果が違う。 弾の発射ルーチン 弾用の変数を2個用意 1個目が発射されていることを確認して2発目を発射、それぞれ固有のIDを持つ
質問用 弾の発生 弾は画面外に存在している。発射されれば 移動して画面内に現れる。 消滅し次第、またもとの位置に戻る。 弾の移動 Beam[Y]=X Xの部分を増減させる。