140 likes | 246 Views
Handel-C による エアホッケー. 発表項目. プログラムの説明 仕様、制約 工夫した点 デモンストレーション 結果、考察 評価、感想. プログラムの説明. Handel-C 言語を用いてプログラムを記述 通信を最大限にいかし、 2画面でのエアホッケー を実現 スマッシャーの 縦方向の動き の追加で、より操作性のあるゲームを実現. ゲームの仕様. 先に左クリックした方からゲーム開始 パックにスマッシャーをあて、相手に返球する 点数が入ると、入れられた側が左クリックすることでゲーム再開 3点先取したほうが勝ち. 工夫した点. 送受信のタイミングが困難
E N D
発表項目 プログラムの説明 仕様、制約 工夫した点 デモンストレーション 結果、考察 評価、感想
プログラムの説明 Handel-C言語を用いてプログラムを記述 通信を最大限にいかし、2画面でのエアホッケーを実現 スマッシャーの縦方向の動きの追加で、より操作性のあるゲームを実現
ゲームの仕様 先に左クリックした方からゲーム開始 パックにスマッシャーをあて、相手に返球する 点数が入ると、入れられた側が左クリックすることでゲーム再開 3点先取したほうが勝ち
工夫した点 送受信のタイミングが困難 →ボールを保持していない側を常に受信 状態にすることで解決 送信する座標の設定 →ぎりぎりの座標で送信すると、 エラーが起こる ※ が ぎりぎりの座標
工夫した点 スマッシャーとパックの衝突判定 →スマッシャーとパックの位置、方向、速度 を考慮して衝突後のパックの動きを決定 と が 当たり判定の領域 パック スマッシャー
結果、考察 • マウスの動きが速いので、スマッシャーがパックの動きに対応し易過ぎる →ゲーム性を向上するにはマウスの動きが遅くなるように制御する必要がある。 • スマッシャーとパックの衝突の際、画面上では一見円形の物体同士の衝突に見えるが、実際は正方形の物体同士の衝突として判定されている。リアルな挙動のためには判定条件をより細分化する必要がある。
評価、感想 グラフィックや点数表示や文字表示などのインターフェースを実装できたので、エアホッケーの体裁は整えられた。ただ、特にスマッシャーとパックの挙動に関しては改善の余地は多い。 今回の課題である通信機能の実装には最後まで苦労させられた。送受信の流れを把握するのが特に難しかった。また、並列処理という考え方はC言語には無い新しいものだったので、扱いに苦労した。
衝突判定の一例 パック vx vy+VY vy VY 衝突 vx-VX VX スマッシャー
画像表示 二次元配列に画像データが格納されており、表示したい位置の座標の相対座標で画像内の座標を指定する。色は配列の値によって指定している。また、ハードウェアリソースの節約のため、画像はビット演算による拡大を行って利用している。 rom unsigned 1 pack[4*4] = { 0,1,1,0, 1,1,1,1, 1,1,1,1, 0,1,1,0, };
改善方法 マウスの挙動を遅くするには →座標の更新の際に、保持しておいた移 動前の座標と移動後の座標からマウス のX方向、Y方向の移動量を求め、それら をシフト演算で何分の一かにする。移動 前の座標にその値を加えた先の座標を 真の移動後の座標とする。
送受信について データを受信するときに、最初に受信した値が1であれば、点数が入ったと認識する →最初にX座標の値を送信するが、両側に 壁を作っているため、パックのX座標が1 となることがない 壁
開始時の条件 双方ともデータ受信状態で、受信するとフラグが立つ 先にクリックすると送信し、受信した側はフラグの値を書き換えて、データを送信 先にクリックしたほうがデータを受信すると、ゲーム開始となっている