Greenfoot(グリーンフット)を試してみよう(その3)
Greenfoot を(プログラミングを知らない人でも)簡単に始められる手順を説明しています。前回の「Greenfoot(グリーンフット)を試してみよう(その2)」では Greenfoot のワールドに追加したネズミを Java プログラムで右に動かす方法について説明しました。
ネズミは右には動きますが端(ハシ)に当たると止まってしまいます。とてもさみしいプログラムなので今度はキーボードの上下左右を押した時にその方向に移動するようにプログラムを修正したいと思います。
ネズミがキーボード操作で自由に動き回れるようにする
その前に、、、Act と Run の違いは?
話しを進める前にもう気づいた方もいるかもしれませんが、Act と Run ボタンの違いは分かりましたか?
Act と Run ボタンは画面の下の方のボタンです。前回は Run を押してネズミを動かしていましたが今度は Act ボタンをクリックしてみましょう。
既にネズミが右端まで移動してしまっているならマウスで真ん中あたりまでドラッグ&ドロップして戻してやって下さい。Act を押した時はネズミがちょっとだけ動いたと思います。実は Act は前回書いた次のコードの内の act() の中を 1回だけ実行したのです。
[java] import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/** * Write a description of class Rat here. * * @author (your name) * @version (a version number or a date) */ public class Rat extends Actor { /** * Act - do whatever the Rat wants to do. This method is called whenever * the ‘Act’ or ‘Run’ button gets pressed in the environment. */ public void act() { // Add your action code here. move(4); } } [/java]
一方で Run は act() を何度も何度も繰り返し実行します。これは Pause(ポーズ)を押すと初めて act() を実行するのをやめます。
これで Act と Run の違いは理解できたでしょうか?
ネズミにキーボード入力時の動きを追加しよう
さあ、いよいよキーボードを入力した時のプログラムです。Greenfoot では基本的な動きは move() という命令(関数)で行います。
また、ネズミは何もしなければ右を向くように設定されています。右を向いた状態で move(4) を命令するから右へ 4歩進むわけですね。
そして右が 0度の状態です。右が 0度なので下を向くと 90度、左を向くと 180度、上を向くと 270度ですね。このことも後で使う重要なポイントです。
例えば act() 部分のコードを次のように変えてみましょう。
[java] public void act() { // Add your action code here. setRotation(90); move(4); } [/java]
setRotation(90) というのは「90度に向きを変える」という意味です。これも move() や act() 同じように関数の仲間です。
setRotation(90) を追加したらまた「Ctrl+s」を入力して保存し、Compile(コンパイル)してからネズミを背景に追加して Run を実行してみましょう。
今度はネズミが下へ移動するようになりましたか?
うまく行ったなら次はキーボードの上下左右を押した時の動きを付けてみましょう。上で変更したコードをさらに次のように変えてみましょう。
[java] public void act() { if (Greenfoot.isKeyDown(“down”)){ setRotation(90); move(4); } } [/java]
if や Greenfoot.isKeyDown(“down”) というキーワードが増えていてそれが { }(大カッコ)で setRotation() や move() を囲むようになりました。この状態でまたソースを保存し、Compile してネズミを背景に追加して Run を実行してみましょう。
今度は動かなくなりましたか?ところがどっこいキーボードの下を押すとネズミは下に移動するようになったと思います。
これはもちろん上の変更部分が影響しています。if はそのまま「もしも〜」を表します。
if(<条件文>) { } の場合 <条件文> に一致した時に { } の中の処理を実行します。
[java] if (<条件文>){ <命令文>; } [/java]
今回はこの条件文に Greenfoot.isKeyDown(“down”) と書いてありますね。
Greenfoot.isKeyDown(“down”) はこれも act() や move() と同じように Greenfoot が用意している関数の一つで「“down” キーが押されたかどうか」を返します。“down” キーはそのままキーボードの下キーを意味しています。
そんな訳でこの if (Greenfoot.isKeyDown(“down”)) の行は「もし “down” キーが押されていれば { } 内の命令を実行する」になるわけですね。
次は上・左・右の処理も追加してみましょう。
[java] public void act() { if (Greenfoot.isKeyDown(“left”)){ // 左キーが押された時は 180度を向いて移動する setRotation(180); move(4); } if (Greenfoot.isKeyDown(“right”)){ // 右キーが押された時は 0度を向いて移動する setRotation(0); move(4); } if (Greenfoot.isKeyDown(“up”)){ // 上キーが押された時は 270度を向いて移動する setRotation(270); move(4); } if (Greenfoot.isKeyDown(“down”)){ // 下キーが押された時は 90度を向いて移動する setRotation(90); move(4); } } [/java]
今度はコードの中に説明を書いておきました。コードの中の // はコメントといい、// より右の文は何を書いても命令として扱われなくなります。コードの説明を書くには便利ですね。
ではまた保存・コンパイル・ネズミの背景への追加をしてから Run を実行してみましょう。ネズミはキーボード操作で上下左右に動くようになりましたか?
ここでコード全文も下に掲載しておきます。次回の「Greenfoot(グリーンフット)を試してみよう(その4)」でいよいよネズミにエサを与えてみます。
[java] import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/** * Write a description of class Mouse here. * * @author (your name) * @version (a version number or a date) */ public class Mouse extends Actor { /** * Act - do whatever the Mouse wants to do. This method is called whenever * the ‘Act’ or ‘Run’ button gets pressed in the environment. */ public void act() { if (Greenfoot.isKeyDown(“left”)){ // 左キーが押された時は 180度を向いて移動する setRotation(180); move(4); } if (Greenfoot.isKeyDown(“right”)){ // 右キーが押された時は 0度を向いて移動する setRotation(0); move(4); } if (Greenfoot.isKeyDown(“up”)){ // 上キーが押された時は 270度を向いて移動する setRotation(270); move(4); } if (Greenfoot.isKeyDown(“down”)){ // 下キーが押された時は 90度を向いて移動する setRotation(90); move(4); } } } [/java]