Handel-Cによる エアホッケー
発表項目 プログラムの説明 仕様、制約 工夫した点 デモンストレーション 結果、考察 評価、感想
プログラムの説明 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, };
改善方法 マウスの挙動を遅くするには →座標の更新の際に、保持しておいた移 動前の座標と移動後の座標からマウス のX方向、Y方向の移動量を求め、それら をシフト演算で何分の一かにする。移動 前の座標にその値を加えた先の座標を 真の移動後の座標とする。
送受信について データを受信するときに、最初に受信した 値が1であれば、点数が入ったと認識する →最初にX座標の値を送信するが、両側に 壁を作っているため、パックのX座標が1 となることがない 壁
開始時の条件 双方ともデータ受信状態で、受信するとフ ラグが立つ 先にクリックすると送信し、受信した側はフ ラグの値を書き換えて、データを送信 先にクリックしたほうがデータを受信すると、 ゲーム開始となっている