Document

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,
1,1,1,1,
0,1,1,0,
};
改善方法

マウスの挙動を遅くするには
→座標の更新の際に、保持しておいた移
動前の座標と移動後の座標からマウス
のX方向、Y方向の移動量を求め、それら
をシフト演算で何分の一かにする。移動
前の座標にその値を加えた先の座標を
真の移動後の座標とする。
送受信について

データを受信するときに、最初に受信した
値が1であれば、点数が入ったと認識する
→最初にX座標の値を送信するが、両側に
壁を作っているため、パックのX座標が1
となることがない
壁
開始時の条件



双方ともデータ受信状態で、受信するとフ
ラグが立つ
先にクリックすると送信し、受信した側はフ
ラグの値を書き換えて、データを送信
先にクリックしたほうがデータを受信すると、
ゲーム開始となっている