ブロックくずしゲームを作る [仕様] 画面の上の方には、ブロックがいくつかならんでいる 画面の下には、パドルがあり、左右に移動操作可能 さらに、画面上には、ボールがあり、何かにあたると 反射する 画面の下にボールが到達するとゲームオーバー ブロックにボールが当るとブロックが消える [設計] 画面を表示しながら、操作を行うプログラム cf. ゲーム MVC という設計の基本パターン MVC : Model View Contorol Model : 情報や状態をもっている Control : Model に対して、情報や状態の変更を指示する View : 情報や状態を表示する ゲーム画面 (背景) : 一つ Contorol ない (閉じる、移動などがあるかも..) キーボードから 'q', 'Q', ESC で終了 関数 keyboard で実現 Model 画面の大きさ、位置、背景色 View Model の情報にしたがって表示する パドル : 一つ Model 水平方向の位置 # 幅 # 一度に移動できサイズ View パドルのある位置にパドル(四角形)を表示する Contorl パドルの位置を変更する 左右に移動する ( keyboard から ) ワープする ( mouse から ) ボール : 一つ Model ボールの位置 ( x, y ) ボールの速度 ( vx, vy ) View ボールの位置にボール(丸)を書く Contorl ない ( 勝手に動く ) ブロック : 複数 Model ブロックの位置 ブロックが崩れているかどうか View ブロックの位置にブロック(矩形)を表示 Contorol ブロックを崩す / 復活させる 画面表示 (座標系) 描画には、OpenGL を利用するので、基本は 座標系は実数で、-1.0 〜 +1.0 の範囲 ゲーム上では、 整数値で 0 〜 399 で原点が右下隅に設ける ゲーム画面から、OpenGL への変換は 表示の直前で処理する [プログラミング] # いきなり、完成したものを作らず、 # すこしずつ、結果を確認しながら、作り挙げる Ver-0.00 とりあえず、画面だけだす Ver-0.01 ブロック 画面上で、矩形を表示する 複数あるので、どこに、どれだけ用意するか ? 表示は、画面の上部 1/4 の部分に描画 個数は横に 10 個、縱に 5 個 表示画面上を埋め尽すようにする 10% 程度の隙間を作る +---------------+ | = = = = = = = | | = = = = = = = | <= 全体の 1/4 | = = = = = = = | 10 x 5 で表示 | | | | | | | | +---------------+ block を作るまで 1. block の状態(モデル)を表現する変数を作る char block[][] 2. (変数をつくったので..) 初期化行うプログラム (blockInit) を作り、初期化ルーチン(init) で呼び出す 3. view の部分 ( display ) で、モデルをみながら 表示を行う [ポイント] 表示を変更する場合は、モデルを変更すればよい => MVC の特徴 パドルの作成 1. パドルのモデルに対応する変数を作る paddleSpeed <= 一度に移動できるサイズ paddleLength <= パドルの幅 paddleX <= パドルの位置 2. 初期化 変数の宣言と同時 3. view の部分 ( display ) の作成 モデルを参照しながら表示を行う 4. contorol の部分 ( keyboard/mouse ) の所 モデルの内容を更新する ボール 1. ボールのモデル 2. 初期化 3. view を作る 4. contorol ? の部分 [仕様] 薬をふやす ブロックを崩すとおちてくる 一つしかでない それを取ると、パドルが長くようにする [設計] ボールと同様 あるかないか 現在の位置 X, Y 移動は、上から下におちる