演習ヒント

実行時の注意:blockBreakNormal という名前のフォルダを作成し、 以下の5つのファイルを置きなさい

ファイルの構成:

blockBreakNormal.pde⇒ゲーム本体(BlockBreakクラス)のインスタンスを作り実行するだけ

BlockBreak.pde⇒ゲーム本体のクラス,Bar,Ball,Blockのインスタンスを作り,配置,動かす,描画するのはこのクラスの役目

Bar.pde,Ball.pde,Bloack.pde⇒それぞれ名前の通りのクラスが書かれたファイル

blockBreakNormal.pde + ヒント

/**
 * ブロック崩し
 */
class BlockBreak {
  //ブロック数設定
  final int blockNumX = 20;                           // x軸方向のブロック数(適当に 変えてもOK) 
  final int blockNumY = 5;                            // y軸方向のブロック数(適当に 変えてもOK)
  final int blockNumAll = blockNumX * blockNumY;      // 総ブロック数
  //ブロック関連の初期値や固定値の設定
  final int blockX_init = 0;                          // ブロック位置x軸初期値
  int blockX = 0;                                     // ブロック位置x軸
  int blockY = 35;                                    // ブロック位置y軸
  // 各オブジェクト定義
  Ball ball;                                          // ボール定義
  Bar bar;                                            // バー定義
  Block[][] block;                                    // ブロック配列定義
  // コンストラクタ
  BlockBreak() {
    // ボールの生成
    ball = new Ball(width / 4, height / 3, 2, 5, 8);
    // バーの生成
    bar = new Bar(width / 5, height / 100);
    // ブロック配列を生成
    block = new Block[blockNumY][blockNumX];
    // ブロックのサイズを決定
    int blockSizeX = width / blockNumX;
    int blockSizeY = height / 30;
    // ブロック群を生成 [回答欄] 

    //各ブロックのインスタンスを作る前に配列自体を作る必要がある
    //2次元配列の作り方は以下参照
    http://www.mlab.im.dendai.ac.jp/programming/basic/03/#(13)
     
    //2次元(X,Y方向)にブロックを置いていくので,2重forループの出番
    for(int y = ???){
      for(int x = ???){
        block[y][x] = new Block(???);
      }
    }




  }
  
  /** 1フレームごとの描画処理 */
  void draw() {
    int breakBlockNum = 0;          // 壊れているブロックの数を初期化
  
    // 全てのブロックの破壊判定と描画 [回答欄]
    // クリアしているかの判定のため、壊れているブロックの数をカウントもしておく
    // ヒント: ブロックが消滅している場合、ブロックの衝突判定も描画も行わない  



    //2重forループを使ってすべてのブロックに対して壊れているかどうか調査する
    for(int y = ???){
      for(int x = ???){
        if (block[y][x].isBroken()){
          ???
        }
      }
    }






  
   // ブロックが残っているならばボール移動
  if(breakBlockNum < blockNumAll) {
      ball.move();                            // ボールの移動処理
      if(ball.collision() == false) {         // 壁との衝突判定
        fill(0, 0, 0);
        textSize(35);
        textAlign(CENTER, CENTER);
        text("Game Over!!", width / 2, height / 2);
      }
      else {
        bar.collision(ball);                    // バーとの衝突判定
      }
    }
    else {  // ブロックがすべて壊れているならば
      textSize(35);
      textAlign(CENTER, CENTER);                // テキストの配置を整える
      text("Clear!!", width / 2, height / 2);   // クリア表示
    }
    
    fill(0, 0, 0);
    textSize(12);
    textAlign(CENTER, CENTER);
    text("Block:" + (blockNumAll - breakBlockNum), width - 40, height - 25);   //  残りブロック数表示
    
    bar.show();            // ボールを打ち返すためのボードを表示
    ball.show();           // ボールの描画
  } 
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS