ブロック崩しゲーム 内部仕様書 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
© Copyright 2024 Paperzz