ブロックゲーム

  1. 内容

    ボールを打ち返して、ブロックを消します。

  2. ゲームの構成

    1. 原版
      //www5.kannet.ne.jp/~matusita/Block.txt より

    2. 変更履歴
      Jbuilderに移植
      パッドの位置データ変更
      ボール速度、待ち時間変更
      offScreen=createImage(d.width,d.height);をstartに移動
      MouseをMouseMotionListenerに変更

  3. 手法

    1. マウスの位置
      MouseListenerとMouseMotionListenerのインターフェースを組み込みます。
      前者では次の4種のメソッド
       public void mouseClicked(MouseEvent e){} //スイッチがクリックされた
       public void mouseEntered(MouseEvent e){ }
       public void mousePressed(MouseEvent e){ }
       public void mouseReleased(MouseEvent e){ }
       public void mouseExited(MouseEvent e){ }
      後者では、次に2種のメソッドを組み込む必要があります。
       public void mouseMoved(MouseEvent e){}  //マウスの移動があった
       public void mouseDragged(MouseEvent e){}  //マウスのドラッグがあった
      不要な関数もこのまま定義だけ残してしておく必要があります。

    2. ブロックの当たり判定
      少し強引ですが、球とすべてのブロックとの当たり判定をしています。&&がANDの論理演算です。衝突したブロックに対応する配列の値は0にして、ブロックを無効にします。

      for(int i=0;i<6;i++){
       for(int j=0;j<10;j++){
        if(b[j][i]==1 && x>(j*30)-3 && x<((j+1)*30)-5
          && y>(i*16)+21 && y<((i+1)*16)+23){
        //球とブロックが重なった
        if(my==-step){
         my=step;
        }else{
         my=-step;
        }
        b[j][i]=0;//ブロックを無効にする
        score+=1+stage;
      }

    3. ゲームのシミュレーション

      1. startボタンで実行開始
        初期設定、スレッド開始

      2. paint()でステージを表示する
        オフスクリーンで表示する
        ブロックを表示する
        ボールを表示する
        パッドを表示する

      3. 単位時間の移動をする:Run()
        move()によりボールとパッドを移動する
        ボールのy座標が420を越えると、失敗と判断する
        restが>0なら、マウスクリックで再開する
        rest==0なら、ゲームオーバーで、startボタンで再開する

      4. ボールの処理
        上と左右の壁で、移動方向を反転する。
        1の値のブロックに衝突したら方向を反転し、ブロックの値を0にする。値が0のブロックは存在しないことになりあmす。

  4. プロジェクト

    1. レイアウト
      下部にメッセージ、得点、残り回数を表示するtextFieldとラベルを配置します。

    2. 定数、変数

      1. ボードサイズ
        幅 300 高さ 400(原版から変更)
      2. パッドの位置 
        px,py 330<py<360
      3. ボールの早さ
        ballsleep=30
      4. 失敗できる数
        rest=5
      5. ステージの数
        stage=0
        終了なし
      6. int b[][];
        値が1のときブロックが有効、0のとき無効
      7. x,y
        ボールの位置
      8. step
        単位時刻当たりのボールの移動量
      9. score
        得点
    3. 手法

      1. d_set()
        配列b[][]を1にしてブラックを生成します。
      2. start()
        imageクラスを生成し、ダブルバッファ表示をします
      3. paint()
        背景色で塗りつぶします。
        値が1のブロックを表示します。
        ボールとパッドを表示します。
      4. run()
        ゲームの終了判定をします。
        終了した場合、0.1秒間隔でwaitrがfalseになる(マウスクリックが起こる)のを待ちます。
        ステージをクリアした場合、残り回数を1増やします。
      5. mov()
        壁に衝突したら移動方向を反転します。
        ブロックに衝突したら、ブロックに対応する配列を0にし、移動方向を反転します。
        ステージをクリアしていない場合unclearを1にします。
      6. mouseClicked
        waitrをfalseにして、ゲームを再開します。

  5. 実行

    startボタンで開始
    マウスの左右の動きでパッドが動きます
    失敗したら、マウスクリックで再開します




  6. ダウンロード

    このプロジェクトをダウンロードできます。次の行をクリックして、blockgame.exeファイルを適当なフォルダに保存します。
    ダウンロード開始
    このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。