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
になりました!!
あと、キャラクタがちらつくも〜
キャラクタが動くたびに画面を書き換えているので、どうしてもちらついてしまうのです。
ご安心を!!! そういう場合はぁ????

ダブルバッファリング!!!
そのとおり!!! さっそく、ダブルバッファリング
で作画するようにしましょう。
(カチ、カチ、カチ ・・・・)
しかし、100 x 100
でも広いみゃん! ゲームやっていてイライラするみゃん!!
このプログラムを改良して、目的地を複数のチェックポイントに変えて、「オリエンテーリングゲーム」ができそうだも〜
だったら、順番にチェックポイントをクリアしていくほうが面白そうだみゃん!!
順番に到着しないと、チェックされないって具合に・・・ で、最後にゴールだみゃん!
そうだね・・・ 「「チェックポイント5」が見つからない!!」とか言って、うろうろしてるユーザーが目に浮かぶも〜 (ももも・・・(笑))
世界中に散らばる、七つのボールを集めるゲームはどうかみゃ?
またそういう、ナイスネタを・・・
こういうゲームはネットワークでみんなで遊べた方が面白そうだみゃん!!
さっそくネットワーク対応にするみゃん!!!
(ガクッ)
みゃあ〜?
・・・
「難しい質問」と「熊」に出会ったときは、死んだふりに限ります。
あんたが「熊」でしょうが・・・・
私のやる気があれば、そのうちに「JAVAネットワーク講座」を始めるかもしれませんが、現時点で未定です。 なにせ、爆裂健は謎の情緒不安定野郎ですから・・・
ネットワークいまだに良く解らないし〜 説明面倒だし〜 みたいなぁ〜
先行き不安な講座だみゃん・・・・
では、多分あるであろう「第3部」でまたお会いしましょう!!!

またねー!!!
宇宙のJAVAさん
第2部 製作ゲーム 「くまさん 帰宅ゲーム」
君は帰宅することができるか?
君は帰宅して何を見るか?
- 第弐部 完 -
![]()