JAVAプログラミング講座 宇宙のJAVAさん 第2部

- 第4話 恐怖くまさん -


<これまでのあらすじ>

宇宙世紀0091年、スペシャルゲスト「爆裂健」を探すため、クマ先生は「サイド6」に降り立った。
爆裂健 に、JAVAプログラムについて熱く語ってもらうためである。


 

くま先生 さて・・・・ 住所はここのはずだが・・・

くま先生 ごめんください!!

爆裂健やぁ、くまじゃないか・・・ 久しぶりだな・・・

くま先生 やぁ!爆裂健・・・ ここは?

爆裂健ジャンク屋と言うところは情報を集めるのに便利なのでな。
ここに住み込みをさせてもらっている。

 

5   SCREEN 0
10  I$=INKEY$
15  IF I$="" THEN 10
20  IF I$="2" THEN Y=Y+1
30  IF I$="8" THEN Y=Y-1
40  IF I$="4" THEN X=X-1
50  IF I$="6" THEN X=X+1
60  LOCATE X,Y:PRINT"@"
90  GOTO 10

爆裂健このプログラムを、Bakuretu Online の移動ルーチンに取りつけろ。
市販のゲームのアルゴリズムを参考に開発したものだ。

くま先生( こんな古いものを・・・  爆裂健、酸素欠乏症にかかって・・・ )

爆裂健すごいぞ、BOの移動処理能力は数倍に跳ね上がる。 さぁ、もってけ。
そしてすぐ取りつけて、試すんだ!

くま先生 はい・・・ でも、爆裂健は?

爆裂健プログラミング中のものがまだまだいっぱいある。
また連絡は取る。 ささ、行くんだ!

くま先生 ・・・・

・・・

・・

 

 

 


くま先生 と、いう訳で、スペシャルゲストは無しです。

ミャンちゃん 全力で、役に立たないみゃん!!

うし君 まったくだも〜。 おまけにネタがわかりずらすぎるも〜。

ミャンちゃん まったくだみゃん!! そのうち抗議のメールが来るみゃん!!

 


 

くま先生 では、気を取りなおしてJAVA講座を始めます。

ミャンちゃん はーい!!

うし君 も〜!!

くま先生 前回、「障害物処理」と「キャラのアニメ処理」を行いましたね。

うし君 みごとに「山」と「海」に入れなくなったも〜!!

くま先生 さて、今回は今まで作ったプログラムにさらに手を加えて、ゲームとして遊べるようにしてみましょう。

くま先生 製作するゲームは 「くまさん 帰宅ゲーム」 です。

うし君 よ、よ、よく、わかりませんが・・・・???

くま先生 私が家を探して帰宅するという、大スペクタクルゲーム!!

うし君ミャンちゃん ・・・

 

くま先生 では、早速作っていきましょう。

うし君ミャンちゃん はーい。

くま先生 まず、マップ座表上にゴール「家」を1つだけ置きます。
家の座標もランダムにします。

くま先生 init() のマップ配列の初期化のすぐ下に追加しましょう。
今まで使わなかった 背景5(家)を始めて使います。

        map = new int[300][300];
    
        for (int yy=0; yy<300; yy++){
            for (int xx=0; xx<300; xx++){
                map[xx][yy] = (int) (4 * Math.random());
                if( xx<4 ) map[xx][yy] = 4;
                if( xx>295 ) map[xx][yy] = 4;
                if( yy<4 ) map[xx][yy] = 4;
                if( yy>295 ) map[xx][yy] = 4;
            }
        }
       
        int house_x = (int) (290 * Math.random());
        int house_y = (int) (290 * Math.random());
        map[house_x+5][house_y+5] = 5;
     

ミャンちゃん マップのサイズは一辺が 300 のはずだったみゃん・・・
なんで、0 から 289 までのランダムを発生させるんだみゃん???

 くま先生 

        int house_x = (int) (300 * Math.random());
        int house_y = (int) (300 * Math.random());

このようして、家の座標を決定すると、周りの海の部分に家が置かれてしまう可能性があるのです。
そうなったら、だれもその家には入れません。

うし君 孤島の家だも〜 (T_T)

くま先生 そこでX,Y座標とも 0 から 289 までのランダム数字を発生させて、
背景5(家)を配置する時、

    map[house_x+5][house_y+5] = 5;

家のX,Y座標に5を足して、周りの海の部分に家が置かれるのを防いでいるのです。

ミャンちゃん なるほどみゃん!

くま先生 次にゴールしたかどうかを知るために、グローバル変数を用意しましょう。
ゴールした、しない、の2種類しか必要無いので、boolean 型で宣言します。
変数名は isGoal としましょう。

    // グローバル変数
   
    Image haikei[];
    Image player1, player2;
    int map[][];

    int cx, cy;
    int oldcx, oldcy;

    boolean kuma;
 
    boolean isGoal;

くま先生 次に init() isGoal の初期状態を入れます。
ゲームスタート時には当然ゴールしていませんので、false を入れます。

        cx=50; cy=50;

        kuma=true;
  
        isGoal = false;
       
    } // init()

くま先生 さて、ゴールした時点でゲームは終了です。
ゴールしたら、それ以上動けないようにしましょう。
ゴール後マウスをクリックしても、キャラクタが移動しないようにします。
mouseDown() に次の1行を追加します。

    public boolean mouseDown(Event e, int x, int y) { // マウスダウン
       
        if ( isGoal ) return true;
       

うし君 なるほど、isGoal 真(true) だったら、マウスを押しても何もしないで mouseDown() をぬけだすのかも〜。

くま先生 そのとおりです。
さて、次に家に着いたかどうか調べるプログラムを作ります。
前回、mouseDown() で、移動先が山や海だったら、キャラ座標を保存した座標に戻すプログラムを書きましたね。

ミャンちゃん 書いたみゃん!! それによって、山と海に入れなくなったんだみゃん!!

くま先生 そのプログラムの下に、家についたかどうか調べるプログラムを追加します。

        if ( map[cx][cy]==3 || map[cx][cy]==4 ) {
            cx = oldcx;
            cy = oldcy;
        }
      
        if ( map[cx][cy]==5 ) isGoal = true;

くま先生 もし、家に着いたら isGoal 変数を 真(true) にします。

くま先生 これで、家に着いたら isGoal が 真 になり、それ以上マウスを押しても動かなくなります。

うし君 ひょっとして、これでゲームは完成かも〜

くま先生 一応完成なのですが、ゴールをした時に画面上に「文字」を出しましょう。
みゃあちゃん、文字を作画する場合、何処にプログラムを書きますか?

ミャンちゃん 作画は paint() だみゃん!!

くま先生 正解です。 じゃウシ君、もしゴールしていたら画面中央に 「家に着いた!」 という文字を出してみましょう!!

うし君 えーと・・・・

くま先生 忘れた場合は、第1部の STORY3 を見てください。

うし君 えーと、なになに。 あ、おもいだしたも〜
文字の色は何色が良いかも〜

くま先生 今回は白色で良いでしょう。 文字サイズは30にしてください。

うし君 paint() の最後に追加するも〜

        if ( isGoal ){
            g.setFont(new Font("TimesRoman", Font.BOLD, 30 ));
            g.setColor(Color.white);
            g.drawString("家に着いた!", 100, 150);
        }
       

    } // paint()

くま先生 これでゲームは完成です!!!

うし君ミャンちゃん わーーーい!!!! さっそくあそぼ〜

うし君ミャンちゃん ・・・・・・・・

 

くま先生 どうしました???

ミャンちゃん  300 x 300 だとマップが広すぎるみゃん!!!!
マウスクリックしまくっているのに、全然家がみつからないみゃん!!

うし君 こんなに広いマップは、ラストハルマゲドン 以来だも〜

くま先生 やはり、そうでしたか! わたしも広すぎるなぁ〜と感じておりました。
早速マップサイズを 100 x 100 に変更しましょう!!

(カチ、カチ、カチ ・・・・)

くま先生 100 x 100 になりました!!

うし君 あと、キャラクタがちらつくも〜

くま先生 キャラクタが動くたびに画面を書き換えているので、どうしてもちらついてしまうのです。

くま先生 ご安心を!!! そういう場合はぁ????

うし君ミャンちゃん ダブルバッファリング!!!

くま先生 そのとおり!!! さっそく、ダブルバッファリング で作画するようにしましょう。

(カチ、カチ、カチ ・・・・)

 

 

くま先生 ついに完成!!! 「くまさん 帰宅ゲーム」 MapPrint.javaMapPrint.classダウンロード

 

 

ミャンちゃん  しかし、100 x 100 でも広いみゃん! ゲームやっていてイライラするみゃん!!

うし君 このプログラムを改良して、目的地を複数のチェックポイントに変えて、「オリエンテーリングゲーム」ができそうだも〜

ミャンちゃん  だったら、順番にチェックポイントをクリアしていくほうが面白そうだみゃん!!
順番に到着しないと、チェックされないって具合に・・・ で、最後にゴールだみゃん!

うし君 そうだね・・・ 「「チェックポイント5」が見つからない!!」とか言って、うろうろしてるユーザーが目に浮かぶも〜 (ももも・・・(笑))

ミャンちゃん  世界中に散らばる、七つのボールを集めるゲームはどうかみゃ?

くま先生 またそういう、ナイスネタを・・・

ミャンちゃん  こういうゲームはネットワークでみんなで遊べた方が面白そうだみゃん!!
さっそくネットワーク対応にするみゃん!!!

くま先生 (ガクッ)

ミャンちゃん  みゃあ〜?

くま先生 ・・・

 

くま先生 「難しい質問」と「熊」に出会ったときは、死んだふりに限ります。

うし君 あんたが「熊」でしょうが・・・・

くま先生 私のやる気があれば、そのうちに「JAVAネットワーク講座」を始めるかもしれませんが、現時点で未定です。 なにせ、爆裂健は謎の情緒不安定野郎ですから・・・
ネットワークいまだに良く解らないし〜 説明面倒だし〜 みたいなぁ〜

ミャンちゃん  先行き不安な講座だみゃん・・・・

くま先生 では、多分あるであろう「第3部」でまたお会いしましょう!!!

うし君ミャンちゃん またねー!!!

 

 

 

 

 

 

くま先生 宇宙のJAVAさん 第2部 製作ゲーム 「くまさん 帰宅ゲーム」

 

 

 

 

 

くま先生    君は帰宅することができるか?

 

君は帰宅して何を見るか?

 

- 第弐部 完 -


戻る