ブロック崩しゲーム 内部仕様書

ブロック崩しゲーム
内部仕様書
V1. 00
: 2004 年 4 月 30 日
2 班:D・M(班長)、Y・O、Y・K、A・S
承認
審査
審査
作成
1.目的.................................................................................................................................................................. 2
2.ユースケース .................................................................................................................................................... 2
2-1.図........................................................................................................................................................ 2
2-2.ユースケースの記述........................................................................................................................... 2
3.オブジェクト図 ................................................................................................................................................... 4
4.ステートチャート図............................................................................................................................................. 4
5.配置図.............................................................................................................................................................. 5
6.コントローラ基盤配置図..................................................................................................................................... 5
7.コントローラ基盤回路図..................................................................................................................................... 6
8.使用ポート ........................................................................................................................................................ 6
9.マイコン 関数仕様一覧 .................................................................................................................................... 7
10.PC アプリケーション...................................................................................................................................... 10
10-1.概要............................................................................................................................................... 10
10-2.ファイル構成 ................................................................................................................................ 10
10-3. 構造体定義一覧 ............................................................................................................................. 11
10-4.関数仕様一覧 ................................................................................................................................ 12
11.改定履歴...................................................................................................................................................... 21
1
1.目的
ソフト、ハードの相互関係を理解し、基本的な入出力プログラミングを学習することを目的とする.
まず、ワンチップマイコンに各種電子部品を組み込み、拡張することで電子回路について学ぶ.さらに、マ
イコンと拡張した電子回路および USB 接続されたパソコンを連動させるためのプログラミングを C 言語によ
り作成する.
作成するのは AKI - H8 を用いたパソコンと USB 接続可能なゲームコントローラおよび Visual C++を用い
たゲームアプリケーション(ブロック崩しゲーム)である.
2.ユースケース
2-1.図
2-2.ユースケースの記述
1)
ユースケース: ゲームの準備をするユースケース
マイコンボード側)
事前条件:
電源 LED が消灯していること
メインフロー: 電源を ON にする
電源 LED を点灯させる
事後条件:
電源 LED が点灯している
パソコン側)
事前条件:
PC が立ち上がっていること
メインフロー: アプリケーションを起動させる(マウス、キーボードで)
事後条件:
2)
アプリケーションが起動している
ユースケース: コントローラを操作し、ブロック崩しゲームをするユースケース
2
事前条件:
ゲームを始める準備ができていること
メインフロー: コントローラを操作し、ゲームをスタートさせる(GUI を操作)
コントローラに対応した LED を点灯させる
事後条件:
ゲームがスタートしている
コントローラに対応した LED を点灯している
3)
ユースケース: ゲーム結果を確認するユースケース
事前条件:
ゲームが終了していること
メインフロー: (ゲームクリアの場合)
LCD に結果を出力させる
(ゲームオーバーの場合)
LCD に結果を出力させる
振動モータを回し、コントローラを振動させる
ブザーを鳴らす
事後条件:
(ゲームクリアの場合)
LCD に結果が出力されている
(ゲームオーバーの場合)
LCD に結果が出力されている
コントローラが振動している
ブザーが鳴っている
4)
ユースケース: ゲームを終了するユースケース
マイコンボード側)
事前条件:
電源 LED が点灯していること
メインフロー: 電源を OFF にする
電源 LED を消灯させる
事後条件:
電源 LED が消灯している
パソコン側)
事前条件:
アプリケーションが起動していること
メインフロー: アプリケーションを終了させる(マウス、キーボードで)
事後条件:
アプリケーションが終了している
3
3.オブジェクト図
4.ステートチャート図
4
5.配置図
6.コントローラ基盤配置図
5
7.コントローラ基盤回路図
8.使用ポート
部位
各部の名称
使用ポート
マイコン部
LED(出力)
Port B の 0 ~ 3
コントローラ部
黒スイッチ(入力)
右に移動
Port A の 0
黄スイッチ(入力)
スタート
Port A の 2
青スイッチ(入力)
左に移動
Port A の 3
モータ(出力)
Port B の 1
ブザー(出力)
Port B の 0
青 LED(出力)
Port B の 3
黄 LED(出力)
Port B の 5
赤 LED(出力)
Port B の 6
赤スイッチ(入力)
右に移動
Port A の 0
青スイッチ(入力)
スタート
Port A の 2
黄スイッチ(入力)
左に移動
Port A の 4
6
9.マイコン
関数仕様一覧
関数名 :main
分類:マイコン制御
定義:
機能概要 :コントローラからのゲームスタート、バーの右移動、左移動のいずれかをマイコンから
USB を通して VC(ブロック崩しゲーム)に送信し、同時にコントローラ上の LED を点灯させる.
また、VCからゲームクリア、ゲームオーバーというデータ受信し、それに応じてモータの振動や、
ブザーを鳴らす.
戻り値 :
void
Define 定義: D_TRUE (1), D_FALSE(0)
引 数 名
引
型
内 容
なし
数
一
覧
関 数 名
内 容
EnableInterrupt
割り込み許可
InitLCD
LCD 初期化、表示、クリア
PrintLCD
LCD 文字列表示
呼
PutLCD
LCD キャラクタ表示
出
InitUSB
USB 初期化
get_inbufflen
USB からのデータの受信の有無
一
write_buff
USB 出力
覧
Read_buff
データ取得
InitSCI
SCI初期化
PrintSCI
SCI文字列出力
ScanSCI
SCI入力データチェック
GetSCI
SCI入力
H8init
H8レジスタ初期化
関
数
処理内容
Define 定義、型宣言したら、適当に待機時間を置き、H8レジスタ、LCD、USB、シリアルの初期
化を上記した関数を呼び出して行う.割り込み許可を行った後、LCD に‘Ready!’を出力させる.
青,黄,赤いずれかのボタンが押されるまで(PA.DR.BIT.B0 != 0 && PA.DR.BIT.B2 != 0 &&
PA.DR.BIT.B3 != 0)、無限ループを回す.押されたとき、chBuf = ‘S’を write_buff 関数で VC に送信し、
chBuf = ‘¥0’とし、LCD に「START!!」を出力する.
以下の処理を無限ループの中で行う.
7
1 -1 .赤 、青 、黄 ボタ ンが 同時 にさ れた 時( PA.DR.BIT..B0 = 0 &&PA.DR.BIT..B2 = 0、
PA.DR.BIT..B3 = 0)、iRedBtton = D_TRUE,iBlueBotton = D_FALSE,iYelBotton = D_TRUE のフラ
グを立て、chBuf = ‘A’ を write_buff 関数で VC に送信し、chBuf = `¥0’とする.出力として、LCD に
「A」を出力し、コントローラ LED(赤)、コントローラ LED(青)
、コントローラ LED(黄)を点灯
させ、モータとブザーを動作させる.
1-2.赤、黄ボタンが同時にされた時(PA.DR.BIT..B0 = 0 &&PA.DR.BIT..B3 = 0)
、iRedBtton =
D_TRUE,iYelBotton = D_TRUE のフラグを立て、
chBuf = ‘O’ を write_buff 関数で VC に送信し、
chBuf
= `¥0’とする.出力として、LCD に「O」を出力し、コントローラ LED(赤)、コントローラ LED(黄)
を点灯させる.
1-3.赤、青ボタンが同時にされた時(PA.DR.BIT..B0 = 0 &&PA.DR.BIT..B2 = 0)
、iRedBtton =
D_TRUE,iBluBotton = D_TRUE のフラグを立て、chBuf = ‘G’ を write_buff 関数で VC に送信し、
chBuf = `¥0’とする.出力として、LCD に「G」を出力し、コントローラ LED(赤)、コントローラ LED
(青)を点灯させる.
1-4.青、黄ボタンが同時にされた時(PA.DR.BIT..B2 = 0 &&PA.DR.BIT..B3 = 0)
、iBluBtton =
D_TRUE,iYelBotton = D_TRUE のフラグを立て、
chBuf = ‘P’ を write_buff 関数で VC に送信し、
chBuf
= `¥0’とする.出力として、LCD に「P」を出力し、コントローラ LED(青)、コントローラ LED(黄)
を点灯させる.
1-5.赤ボタンが押されたとき(PA.DR.BIT..B0 = 0)、chBuf = ‘R’ を write_buff 関数で VC に送
信し、chBuf = `¥0’とする.出力として、LCD に「R」を出力し、コントローラ LED(赤)を点灯させ
る.
1-6.黄ボタンが押されたとき(PA.DR.BIT..B3 = 0)、chBuf = ‘Y’ を write_buff 関数で VC に送
信し、chBuf = `¥0’とする.出力として、LCD に「Y」を出力し、コントローラ LED(黄)を点灯させ
る.
1-7.青ボタンが押されたとき(PA.DR.BIT..B2 = 0)、chBuf = ‘B’ を write_buff 関数で VC に送
信し、chBuf = `¥0’とする.出力として、LCD に「B」を出力し、コントローラ LED(青)を点灯させ
る.
1-8.それ以外の時は、LED を点灯させない.また、ひとつ前のループでボタン入力がある時
(iRedBotton == D_TRUE || iYelBotton == D_TRUE || iBluBotton == D_TRUE)
、赤,青、黄それ
ぞれのフラグ(iRedBotton, iYelBotton, iBluBotton )を D_FALSE にし、適当な時間ウエイトし、chBuf
= ‘N’ を write_buff 関数でVCに送信し、chBuf = `¥0’とする.
2.シリアルにデータがある場合(ScanSCI() = 1)、シリアル入力(iCnt1 = GetSCI();)を行い、そ
の値を LCD に出力し(PutLCD( iCnt1 ); )、chBuf = iCnt1; とする.
3.USB からデータを受信した場合、( get_inbufflen() )、read_buff 関数でデータを取得し、その値
を LCD に出力する.取得したデータが‘1’の時 iGameOver = D_TRUE とし、
‘2’の時 iGameClear
= D_TRUE とし、PrintSCI 関数でシリアル出力を行う.
iGameClear == D_TRUE の場合、iGameClear == D_FALSE にし、LCD に「GAMECLEAR」を出
力し、適当な待ち時間後「CONTINUE?」を出力する.
iGameOver == D_TRUE の場合、iGameOver == D_FALSE にし、モータとブザーを動作させる.
LCD に「GAMEOVER」を出力し、適当な待ち時間後「CONTINUE?」を出力する.
4.次のループを回すまで適当な待ち時間を作る.
8
関数名 :H8init
分類:マイコン制御
定義:
機能概要 : H8 レジスタの初期化
戻り値 :void
引
引 数 名
数
なし
型
内 容
一
覧
呼
関 数 名
出
なし
内 容
関
数
一
覧
処理内容:
まず 8bit BUS MODE にするため、BSC.ABWCR = 0x06 と定義する
使用するポートは A と B なのでそれぞれ PA.DDR = 0xf0; PB.DDR = 0xff; とする.
関数名 :Wait
分類:マイコン制御
定義:
機能概要 : 待機時間の生成
戻り値 :void
引
引 数 名
数
なし
型
内 容
一
覧
呼
関 数 名
出
なし
内 容
関
数
一
覧
処理内容:
int で iCnt1,iCnt2 を宣言する.
for( iCnt1 = 0; iCnt1 < 1000 ; iCnt1 ++ )の条件で for 文を回し、その中で for( iCnt2 = 0; iCnt1 <
1000 ; iCnt2 ++ )だけ for 文を回す.
9
10.PC アプリケーション
10-1.概要
パソコンのブロックくずしゲームは Microsoft Visual C ++ 6.0 の MFC (exe) により作成した.
プロジェクト名
BallGame
スケルトン構成
アプリケーションの種類 SDI.
基本クラス
CFormView
リソース
ピクチャボックス
ID: IDC_GAMEVIEW
10-2.ファイル構成
図 10-1 ソースファイル
図 10-2 ヘッダファイル
USBio.lib , USBioD.lib は AKI-H8 USB ボードの USB キットに添付されている.
スプラッシュを起動時に表示し、終了まで持続する.
メニュー、ステイタス、アイコンは非表示にする.
10
10-3. 構造体定義一覧
InitSetGame.h 内に定義
構造体名 :BarData
分類:PC アプリケーション
定義:
概要 :プレイヤーが操作するバーの現在の状態を記憶する.
メ
メンバ変数名
型
内 容
ン
IX
int
バーの中心の X 軸座標
バ
IY
int
バーの中心の Y 軸座標
一
IWide
int
バーの横幅
覧
構造体名 :BallData
分類:PC アプリケーション
定義:
概要 :ゲーム画面内を動くボールの現在の状態を記憶する.
メ
メンバ変数名
型
内 容
ン
IR
int
ボールの半径
バ
IX
int
ボールの中心の X 軸座標
一
IY
int
ボールの中心の Y 軸座標
覧
IVelX
int
ボールの X 軸方向速度
IVelY
int
ボールの Y 軸方向速度
構造体名 :BlockData
分類:PC アプリケーション
概要 :ゲーム画面内のブロックの現在の状態を記憶する.
メ
メンバ変数名
型
内 容
ン
IBe
int
ブロックの存在,不在
バ
IType
int
ブロックの性質(7 種類)
一
IHP
int
ブロックの耐久性
覧
IXBeg
int
ブロック左上の X 軸座標
IYBeg
int
ブロック左上の Y 軸座標
IXEnd
int
ブロック右下の X 軸座標
IYEnd
int
ブロック右下の Y 軸座標
11
定義:
10-4.関数仕様一覧
BallGameView.cpp 内に実装
関数名 :CBallGameView::OnDraw
分類:PC アプリケーション
定義:
機能概要 :
ブロック崩しゲームを実行する.赤ボタンを押すとバーが右に動き、黄ボタンを押すとバーが左に動く.
ボールが、壁、バー、ブロックに当たると、来た方向と逆の方向に反射する.ボールが当たると、ブロ
ックは破壊される.ブロックは、無色、赤、青、緑、薄い赤、薄い青、薄い緑の7つに分かれる.色の
ついたブッロクは各アイテムとなっている.ボールは赤ブロックに当たると大きくなり、薄い赤ブロッ
クに当たると小さくなる.ボールが青ブロックに当たるとバーが上に上がり、薄い青ブロックに当たる
と下に下がる.ボールが緑ブロックに当たるとバーの幅が大きくなり、薄い緑ブロックに当たると小さ
くなる.ブロックが全て破壊されると GAMECLEAR となる.ボールがバーに当たらず下に落ちると
GAMEOVER となる.
戻り値 :
void
Define 定義:
D_GAME_VIEWX1 (0)
ゲーム画面の左上 X 座標
D_GAME_VIEWY1 (0)
ゲーム画面の左上 Y 座標
D_GAME_VIEWX2 (240) ゲーム画面の右下 X 座標
D_GAME_VIEWY2 (300) ゲーム画面の右下 Y 座標
D_BLOCKX1 (D_GAME_VIEWX1)
ゲーム画面の最左上ブロックの左上 X 座標
D_BLOCKY1 (D_GAME_VIEWY1 + 100)
ゲーム画面の最左上ブロックの左上 Y 座標
D_BLOCK_SIZEX (30)
ブロックの横幅のサイズ
D_BLOCK_SIZEY (10)
ブロックの縦幅のサイズ
引
引 数 名
数
PDC
型
内 容
一
覧
関 数 名
内 容
SetBarBall
構造体のバー,ボールの初期設定をする.
ChangeObjectState
カラーブロックを壊した時のボール,バーの状
態変化処理を行う.
呼
InputControl
入力(USB コントローラ,キーボード)に対す
出
るバーの座標変化処理.
関
赤ボタンと右キー、黄ボタンと左キーが対応.
数
Reflection
ボールがバー,壁に当たった時のボールの速度
一
覧
を変化させる.
USB バッファから文字列を取得し、先頭文字を
GetUSBChar
戻す.
処理内容
1. アプリケーション起動時の処理
12
USB スレッドを開始する.void USBstart(int, int )
CClientDC の dcOpen を宣言
dcOpen に以下の TEXT1,TEXT2 を出力する.TextOut
TEXT1
"専用コントローラの認識中です" ,"しばらくお待ち下さい"
TEXT2
"キーボードでプレイする場合は" ,"スペースキーを押して下さい"
以下の処理を無限ループの中で行う.
USB スレッドの状態を確認し bUSBState に記憶する.getUSBstat()の戻り値が 0xf で良好.
USB スレッドが良好であるとき TEXT3 を TEXT1 に上書き出力する.
TEXT3
"接続良好です","青ボタンを押して下さい"
以下の2通りの条件で無限ループを抜ける.
CASE1
USB スレッドが良好で専用コントローラの青ボタンが押された時.
(関数 GetUSBChar();の戻り値(char 型)が’B’で押下を認識)
CASE2
USB スレッドが不調でキーボードの SPACE キーが押された時.
(GetAsyncKeyState( VK_SPACE ) < 0 で押下を認識)
これ以後,プレイヤーからのバー操作入力は CASE1の時,専用コントローラで受けつける.
CASE2 の時,キーボードから受け付ける.
2. ゲームに登場するバー,ボール,ブロックの状態値の初期設定
バー,ボール,ブロックの状態を記憶する変数はそれぞれ InitSetGame.h に構造体として定義.
バーの構造体 BarData 型の変数 tBar とポインタ ptBar を宣言する.
ボールの構造体 BallData 型を変数 tBall とポインタ ptBall を宣言する.
関数 static void SetBarBall( BarData*, BallData*)で上記の構造体変数のメンバの初期化を行う,
ブロックの構造体 BlocdData 型を二次元配列変数 atBlock を宣言する.
個数は D_BLOCK_NUMX × D_BLOCK_NUMY とする.
構造体 BlocdData 型のメンバを初期化を以下のようにする.
ゲームをスタート(コンテニュー)する度ブロックの性質(メンバ iType)を変化させるため
srand((unsigned)time(NULL));とする.
二重 for ループで全てのブロックの初期化を以下のようにする.
tBlock[i][j].iBe = 1;
tBlock[i][j].iType = (int) (20.0 *rand() / RAND_MAX);
tBlock[i][j].iHP = 1;
tBlock[i][j].iXBeg = D_BLOCKX1 + i * D_BLOCK_SIZEX+1;
tBlock[i][j].iYBeg = D_BLOCKY1 + j * D_BLOCK_SIZEY+1;
tBlock[i][j].iXEnd = D_BLOCKX1 + ( i + 1 ) * D_BLOCK_SIZEX;
tBlock[i][j].iYEnd = D_BLOCKY1 + ( j + 1 ) * D_BLOCK_SIZEY;
以上で初期設定の終了.
以下の処理を無限ループ(LOOP1 とする)の中で行う.
3.バー操作入力処理
関数 void InputControl( BarData* )を呼び,プレイヤーの入力に対するバー移動の処理を行う.
13
4.ボールの中心位置の移動処理
ボール中心の位置座標に速度を加算する.
tBall.iX += tBall.iVelX;
tBall.iY += tBall.iVelY;
5.ボールとバーや壁(ゲーム画面の外枠)との衝突判定,
関数 void Reflection(BarData*, BallData*)を呼ぶ.
6.ボールとブロックとの衝突判定,カラーブロック破壊時のバー,ボールの状態変化処理
二重 for ループ内で全てのブロックに対して以下の条件に対する判定を行う.
ブロックが存在する条件.tBlock[i][j].iBe == 1
ボールがブロックと接触している条件.
tBlock[i][j].iXBeg - tBall.iR <= tBall.iX && tBall.iX <= tBlock[i][j].iXEnd + tBall.iR
tBlock[i][j].iYBeg - tBall.iR <= tBall.iY && tBall.iY <= tBlock[i][j].iYEnd + tBall.iR
以上の2条件を同時に満たす時,以下の処理を行う.
あるブロックが破壊されたことを示す bBreakBlock を true とする.
ブロックの存在を表すメンバ tBlock[i][j].iBe を 0 とする.
現ブロック数を示す変数 iBeBlockCnt を1減算する.
壊れたブロックの性質を記憶する変数 iBreakBlockType に
関数 static int ChangeObjectState( BarData*, BallData*, int)の戻り値を代入する.
関数 ChangeObjectState においてバー,ボールの状態変化処理を行う.
ある一つのブロックが破壊された時点で二重 for ループを抜ける.bBreakBlock == true
引き続き無限ループ(LOOP1)内でゲーム画面の描画処理を行う.
7.描画するデバイスコンテキスト CClientDC の宣言と画面クリア
CClientDC dcMain( this )として宣言
CClientDC のメンバ Rectangle でゲーム画面全域を指定する.
8.破壊ブロック(最新の)の種類(7種類)に対する文字列出力処理
CString 型の配列 strChangeState[]を以下のように定義する.
これら文字列はブロックを破壊した時のボール,バーの状態変化と対応している.
CString strChangeState[] = {
"煉瓦 破壊 !!!",
"球 巨大化 !!!"
"球 縮小化 !!!",
"棒 巨大化 !!!",
"棒 縮小化 !!!",
"棒 下降 !!!",
"棒 上昇 !!!",
};
14
以下のようにして strChangeState をゲーム画面下部に表示する.
dcMain.TextOut(D_GAME_VIEWX1+10,D_GAME_VIEWY2-20,strChangeState[iBreakBlockType];
なお iBreakBlockType は6.で値を取得しおり,上書きされるまで同様の出力を行う.
以上で無限ループ(LOOP1)における文字列の出力処理を終わる.
引き続き無限ループ(LOOP1)内におけるバー,ボール,ブロックの描画処理を行う.
9.バーの描画処理
バーの中心座標にペンを置く
dcMain.MoveTo( tBar.iX, tBar.iY );
バーの右端まで直線を引く
dcMain.LineTo( tBar.iX + tBar.iWide, tBar.iY );
バーの左端まで直線を引く
dcMain.LineTo( tBar.iX - tBar.iWide, tBar.iY );
10.ボールの描画処理
楕円描画メソッド Ellipse で以下のようにする.
dcMain.Ellipse( (tBall.iX - tBall.iR), (tBall.iY - tBall.iR), (tBall.iX + tBall.iR), (tBall.iY + tBall.iR));
11.ブロックの描画処理
ブロックの塗りつぶし色を決定する CBrush 型配列(brushColor)の宣言を以下のように行う
CBrush brushColor[]={ (RGB(255, 0, 0)),//赤
(RGB(255, 128, 128)),//薄赤
(RGB(0, 255, 0)),//緑
(RGB(128, 255, 128)),//薄緑
(RGB(0, 0, 255)),//青
(RGB(128, 128, 255))//薄青
};
二重 for ループ内でブロック全てに以下の条件判断と描画処理を行う.
ブロックが存在(メンバ iBe)し,種類(メンバ iType)が1~6である処理.
以下のように CRgn 型 rgnBlock を宣言し,メソッド CreateRectRgn で描画領域を指定する.
CRgn rgnBlock;
myRgn.CreateRectRgn(tBlock[i][j].iXBeg,tBlock[i][j].iYBeg, tBlock[i][j].iXEnd, tBlock[i][j].iYEnd);
以下のように色 brushColor を選択し指定領域に描画する.
pDC->SelectObject( & brushColor[tBlock[i][j].iType - 1];
pDC->PaintRgn(&myRgn);
ブロックが存在(メンバ iBe)し,種類(メンバ iType)が1~6以外である処理.
黒線の矩形枠を以下のように描画する.
dcMain.Rectangle(tBlock[i][j].iXBeg,tBlock[i][j].iYBeg, tBlock[i][j].iXEnd, tBlock[i][j].iYEnd);
以上で無限ループ(LOOP1)内の描画処理を終了する.
12.ゲームオーバー判断時の処理
15
ボールがゲーム画面の最下線に到達した時.
USB 接続が良好ならば,バッファに文字”1”を送る.write_buff("1",2);
無限ループ(LOOP1)を抜ける.
13.ゲームクリア判断時の処理
現ブロック残り数を記憶する変数 iBeBlockCnt が0である時.
USB 接続が不調ならば,バッファに文字”2”を送る.write_buff("2",2);
無限ループ(LOOP1)を抜ける.
以上で無限ループ(LOOP1)内の全ての処理が終了.
(3~13が無限ループ(LOOP1)内の全処理)
14.ゲームの再開,終了選択処理
CClientDC 型 dcEnd を this で宣言する.
(USB 接続が不調である時)
文字列"コンテニュー?","スペース / シフト"を表示する.
無限ループ(LOOP2)内でキーボードの入力を監視する.
シフトキーの入力を確認した時,無限ループ(LOOP2)を抜ける.((処理16へ移行)
スペースキーの入力を確認した時,OnDraw を再帰する.(ゲームを再開する.処理2へ移行)
(USB 接続が良好である時)
文字列"コンテニュー?","青&赤 / 青&黄"を表示する.
無限ループ(LOOP3)内で USB バッファの入力を監視する.
’P’の入力を確認した時,無限ループ(LOOP3)を抜ける.(処理16へ移行)
‘G’の入力を確認した時,OnDraw を再帰する.(ゲームを再開する.処理2へ移行)
15.アプリケーション終了
以下のようにする.
this->GetParentFrame()->SendMessage( WM_CLOSE );
16
関数名 :SetBarBall
分類:アプリケーションゲーム 定義:
機能概要 : バー,ボールの初期設定
戻り値 :static void
構造体定義:BarData、BallData
Define 定義:D_GAME_VIEWX2 (),D_GAME_VIEWX1 ()
引
引 数 名
型
内 容
数
ptBar,
BarData*
バーの座標、幅
一
ptBall
BallData*
ボールの座標と速度
覧
呼
関 数 名
出
なし
内 容
関
数
一
覧
処理内容:
バーのx座標を ptBar->iX = (int) ( D_GAME_VIEWX2 - D_GAME_VIEWX1 ) / 2 とする.
バーのy座標を ptBar->iY = D_GAME_VIEWY2 – 50 とする.
バーの幅設定を ptBar->iWide = 20 とする
ボールの半径を ptBall->iR = 5 とする.
ボールのx座標を ptBall->iX = ptBar->iX とする.
ボールのy座標を ptBall->iY = ptBar->iY - ptBall->iR とする.
ボールのx方向の速度を ptBall->iVelX = -1 とする.
ボールのy方向の速度を ptBall->iVelY = 1 とする.
17
関数名 :InputControl
分類:PC アプリケーション
定義:
機能概要 :
赤ボタンを押すとバーが右に動き、黄ボタンを押すとバーが左に動く.
戻り値 :void
引
引 数 名
型
内 容
数
*ptBar
BarData
tBar のアドレスが格納されているポインタ
一
覧
呼
関 数 名
内 容
出
GetUSBChar
USB から文字列を取得し先頭文字を戻す
関
GetAsyncKeyState
押されているキーの状態を返す関数
数
一
覧
処理内容
chDummy = GetUSBChar( )を char 型で宣言する.
以下の処理により、ボタンを押した時、またはキーを押した時におけるバーの移動の仕方を定義する.
1. chDummy = 'R' かつ ( ( ptBar -> iX + ptBar -> iWide ) < D_GAME_VIEWX2 - 2 )の時、
ptBar -> iX += 2 の処理を行うことにより、ボタンによってバーを右に移動させる.
2. chDummy =
'Y' か つ D_GAME_VIEWX1 < ( ptBar -> iX - ptBar -> iWide ) の 時 、
ptBar -> iX -= 2 の処理を行うことにより、ボタンによってバーを左に移動させる.
3. GetAsyncKeyState( VK_RIGHT ) < 0
か つ ( ptBar -> iX + ptBar -> iWide ) <
D_GAME_VIEWX2 – 2 の時、ptBar->iX += 2 の処理を行うことにより、キーによってバーを右
に移動させる.
4. GetAsyncKeyState( VK_LEFT ) < 0 かつ D_GAME_VIEWX1 < ( ptBar -> iX - ptBar -> iWide )
の時、ptBar -> iX -= 2 の処理を行うことによって、キーによってバーを左に移動させる.
18
関数名 :ChangeObjectState
分類:アプリケーションゲーム 定義:
機能概要 : カラーブロックを壊した時のボール,バーの状態変化
戻り値 :static int
構造体定義:BarData、BallData
引
引 数 名
型
内 容
数
ptBar,
BarData*
バーの座標、幅
一
ptBall
BallData*
ボールの座標と速度
覧
iBlockType
Int
アイテムブロックの種類
呼
関 数 名
出
なし
内 容
関
数
一
覧
処理内容:
ブロックを壊したときy方向の速度が反転するので ptBall->iVelY *= -1 とする.
アイテムブロック( iBlockType )の種類によって変化が異なるので switch 文 switch(iBlockType)で
分類する.
case 1:または case 2:の時 ptBall->iR += ( iBlockType == 1) ? 2 : -1 とし、ボールを大きくしたり、
小さくしたりする.Break でループを抜ける.
case 3:または case 4:の時 ptBar->iWide += ( iBlockType == 3) ? 2 : -1 とし、バーの幅を広げたり、
縮めたりする.Break でループを抜ける.
case 5:または case 6:の時 ptBar->iY += ( iBlockType == 5) ? 2 : -1 とし、バーの位置を上げたり、
下げたりする.Break でループを抜ける.
default(それ以外の時)iBlockType = 0 とし、ループを抜ける.
switch 文終了後 return iBlockType で値を返す
19
関数名 :GetUSBChar
分類:PC アプリケーション
定義:
機能概要 :
USB から文字列を取得し、先頭文字を戻す
戻り値 :USB をから送られた文字列の先頭文字
引
引 数 名
数
なし
型
内 容
一
覧
呼
関 数 名
内 容
出
GetUSBstat
USB の状態取得
関
get_inbufflen
受信データサイズ取得
数
read_buff
データ受信
一
覧
処理内容
aBuff[256] を char 型で宣言する.
iDummy を int 型で宣言する.
まず、if( getUSBstat( ) != 0xf ) により、USB ドライバが起動しているかどうかを判断する.
getUSBstat( ) = 0xf の時、USB ドライバは起動中、それ以外の時は起動していない.起動していなけ
れば、aBuff[0] = '¥0'により、送られてきた文字列の先頭に'¥0'を代入する.USB ドライバが起動して
いる時は、if( get_inbufflen( ) ) により、USB 受信バッファにデータがあるかどうかをを判断する.
if( ( iDummy = read_buff( aBuff, 256 ) ) > 0 ) の時、USB データ受信を行い、10msec 待機し、return
aBuff[0]により、送られてきた文字列の先頭文字を返す.
20
11.改定履歴
版数
V1.00
改定内容
承認
初版発行
審査
作成
2班一同
21