key()命令を使うと、いま押されているキーボードの番号(キーコード)を 調べることができます。
次のプログラムは、車がキーにあわせて、上下左右に動くプログラムです。
1: /** 2: * キーに対応して車が動くプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class HandleKey extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new HandleKey()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: hide();//タートルを消す 18: 19: int keycode;//キー番号を入れておく変数 20: int x;//x座標を入れておく変数 21: int y;//y座標を入れておく変数 22: 23: //車を生成 24: ImageTurtle car = new ImageTurtle("car.gif"); 25: 26: while (true) { 27: 28: // --- 待つ --- 29: sleep(0.1); 30: 31: // --- 処理 --- 32: 33: //今押されているキーを取得する 34: keycode = key(); 35: 36: //車が今いる位置を取得する 37: x = car.getX(); 38: y = car.getY(); 39: 40: //上下左右キーが押されていたら,車を動かす 41: if (keycode == 37) { //左 42: car.warp(x - 5, y); 43: } else if (keycode == 38) { //上 44: car.warp(x, y - 5); 45: } else if (keycode == 39) { //右 46: car.warp(x + 5, y); 47: } else if (keycode == 40) { //下 48: car.warp(x, y + 5); 49: } 50: 51: // --- 再描画 --- 52: update(); 53: } 54: } 55: 56: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
いま押されているキーボードの番号(キーコード)を調べることができます。
何も押されていない時は、キーコードが -1 になります。
キーボードのキーに対応するキーコードを調べるには、 次のプログラムを使うと良いでしょう。
1: /** 2: * キー番号を調べるプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class CheckKeycode extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new CheckKeycode()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: hide();//タートルを消す 18: 19: int keycode;//キー番号を入れておく変数 20: 21: //文字(太郎)を生成 22: TextTurtle taro = new TextTurtle(); 23: 24: while (true) { 25: 26: // --- 待つ --- 27: sleep(0.1); 28: 29: // --- 処理 --- 30: 31: //今押されているキーを取得する 32: keycode = key(); 33: 34: //押されているキー番号を文字にして表示する 35: taro.text(keycode); 36: 37: // --- 再描画 --- 38: update(); 39: } 40: } 41: 42: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
mouseX()、mouseY() 命令を使うと, マウスが今どこにいるのかを調べることができます。
下のプログラムは、マウスの位置に車が移動するプログラムです。
1: /** 2: * マウスの位置に車が動くプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class HandleMouse extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new HandleMouse()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: hide();//タートルを消す 18: 19: int mx;//マウスのx座標を入れておく変数 20: int my;//マウスのy座標を入れておく変数 21: 22: //車を生成 23: ImageTurtle car = new ImageTurtle("car.gif"); 24: 25: while (true) { 26: 27: // --- 待つ --- 28: sleep(0.1); 29: 30: // --- 処理 --- 31: 32: //車をマウスの位置に移動 33: mx = mouseX();//マウスのx座標を取得する 34: my = mouseY();//マウスのy座標を取得する 35: car.warp(mx, my); 36: 37: // --- 再描画 --- 38: update(); 39: } 40: 41: } 42: 43: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
x()、y()、mouseX()、mouseY()命令で取得した座標は, わざわざ変数に入れなくても、そのまま他の命令で使う値として使うこともできます。
1: /** 2: * マウスの位置に車が動くプログラム 3: * (変数省略版) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/23 7: */ 8: public class HandleMouse2 extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new HandleMouse2()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: hide();//タートルを消す 19: 20: //車を生成 21: ImageTurtle car = new ImageTurtle("car.gif"); 22: 23: while (true) { 24: 25: // --- 待つ --- 26: sleep(0.1); 27: 28: // --- 処理 --- 29: 30: //車をマウスの位置に移動 31: car.warp(mouseX(), mouseY()); 32: 33: // --- 再描画 --- 34: update(); 35: } 36: 37: } 38: 39: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
mouseDown()命令を使うと、マウスが押されているか調べることができます。 mouseX()、mouseY() 命令と組み合わせて使うと、どこで押されているかも調べられます。
下のプログラムは、マウスをクリックした所に車が移動するプログラムです。
1: /** 2: * マウスの押した位置に車が動くプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class HandleMouse3 extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new HandleMouse3()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: hide();//タートルを消す 18: 19: //車を生成 20: ImageTurtle car = new ImageTurtle("car.gif"); 21: 22: while (true) { 23: 24: // --- 待つ --- 25: sleep(0.1); 26: 27: // --- 処理 --- 28: 29: //もし,マウスが押されていたら, 30: if (mouseDown()) { 31: car.warp(mouseX(), mouseY());//車をマウスの位置に移動 32: } 33: 34: // --- 再描画 --- 35: update(); 36: } 37: 38: } 39: 40: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
マウスボタンの左右や、ダブルクリックを調べる場合は, 次のようなプログラムを書きます。
1: /** 2: * マウスの押した位置に車が動くプログラム 3: * (右クリック,左クリック判定版) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/23 7: */ 8: public class HandleMouse4 extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new HandleMouse4()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: hide();//タートルを消す 19: 20: //車を生成 21: ImageTurtle car = new ImageTurtle("car.gif"); 22: 23: while (true) { 24: 25: // --- 待つ --- 26: sleep(0.1); 27: 28: // --- 処理 --- 29: 30: //もし,左マウスボタンが押されていたら, 31: if (leftMouseDown()) { 32: car.warp(mouseX(), mouseY());//車をマウスの位置に移動 33: } 34: //もし,右マウスボタンがダブルクリックされたら, 35: if (rightMouseDown() && doubleClick()) { 36: car.show(!car.isShow());//車を(現す/隠す) 37: } 38: 39: // --- 再描画 --- 40: update(); 41: } 42: 43: } 44: 45: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
intersects()命令を使うと、2つのオブジェクトが当たっているかどうか、 調べることができます。
下のプログラムは、車がドラえもんに当たると、ドラえもんが小さくなるプログラムです(マウスで車を動かせます)。
1: /** 2: * あたり判定をするプログラム 3: * (車がドラえもんにあたると,ドラえもんが小さくなる) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/23 7: */ 8: public class IntersectsJudge extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new IntersectsJudge()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: hide();//タートルを消す 19: 20: //車を生成 21: ImageTurtle car = new ImageTurtle("car.gif"); 22: //doraという名前のドラえもんを生成 23: Doraemon dora = new Doraemon(); 24: 25: car.warp(200, 200);//車を移動 26: 27: while (true) { 28: 29: // --- 待つ --- 30: sleep(0.1); 31: 32: // --- 処理 --- 33: 34: //もし,マウスが押されていたら, 35: if (mouseDown()) { 36: car.warp(mouseX(), mouseY());//車をマウスの位置に移動 37: } 38: 39: //もし,どらえもんが車に当たっていたら 40: if (dora.intersects(car)){ 41: dora.small(5);//ドラえもんを小さくする 42: } 43: 44: // --- 再描画 --- 45: update(); 46: } 47: 48: } 49: 50: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
2つのオブジェクトのあたり判定でなく、マウスの位置が、オブジェクトと当たっているか判定したい時があります。
下のプログラムは、マウスが車の上に来る(マウスの座標が車の領域に含まれる)と、車が小さくなるプログラムです。
1: /** 2: * マウスのあたり判定をするプログラム 3: * (マウスが車にあたると,車が小さくなる) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/23 7: */ 8: public class ContainsJudge extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new ContainsJudge()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: hide();//タートルを消す 19: 20: //車を生成 21: ImageTurtle car = new ImageTurtle("car.gif"); 22: 23: while (true) { 24: 25: // --- 待つ --- 26: sleep(0.1); 27: 28: // --- 処理 --- 29: 30: //もし,車がマウスの位置に含まれていたら 31: if (car.contains(mouseX(), mouseY())){ 32: car.small(5);//車を小さくする 33: } 34: 35: // --- 再描画 --- 36: update(); 37: } 38: 39: } 40: 41: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
これで,このテキストの内容はすべておしまいです。 ここまでの内容を駆使して、面白いソフトウエアを作ってくださることを期待します。
プレイヤーの画像を用意し、キーボードの矢印(↑→←↓)キーを使って、プレイヤーを上下左右に操作するプログラムを作りましょう。
プレイヤーの画像は、ネットのフリー素材集などから好みのものを探し、ダウンロードして使ってください。
アイテム(画像タートル)と得点板(テキストタートル)をつくり、プレイヤーを操作してアイテムを取る(アイテムに触れる)と得点が増えるプログラムを作りましょう。
アイテムの画像は、ネットのフリー素材集などから好みのものを探し、ダウンロードして使ってください。
自由な発想で、簡単なオリジナルゲームを作りましょう。
最後に、シューティングゲームのサンプルプログラムを贈ります。操作方法はプログラムを読めばわかります。GOOD LUCK!
1: /** 2: * シューティングゲーム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class ShootingGame extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new ShootingGame()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: hide();//タートルを消す 18: 19: //画面の調整 20: window.size(640, 480); 21: window.warp(100, 100); 22: 23: int score; //得点を入れる変数 24: 25: //キャラクターの生成 26: Star enemy = new Star(); //enemyという名前の星を生成 27: Doraemon player = new Doraemon(); //playerという名前のドラえもんを生成 28: Circle bullet = new Circle(); //bullet(弾)という名前の円を作成 29: 30: //得点板の生成 31: TextTurtle scoreBoard = new TextTurtle(); //scoreBoardという名前のTextTurtleを生成 32: 33: //弾を適切な大きさに調整 34: bullet.size(20, 20); 35: 36: //キャラクターの位置を調整 37: enemy.warp(200, 100); 38: player.warp(320, 350); 39: bullet.warp(-100, -100);//弾は最初見えない位置に置いておく 40: 41: //得点板の位置を調整 42: scoreBoard.warp(600, 50); 43: 44: //得点を初期化 45: score = 0; 46: 47: while (true) { 48: 49: // --- 待つ --- 50: sleep(0.025); 51: 52: // --- 処理 --- 53: 54: //敵を動かす(流れ星と一緒) 55: enemy.warp(enemy.x() + 5, enemy.y()); 56: enemy.rt(10); 57: 58: //もし,敵が右端だったら 59: if(enemy.x() > 640){ 60: enemy.warp(0, enemy.y());//左端にワープ 61: } 62: 63: //ドラえもんを左右に動かす 64: if (key() == 37) { //左 65: player.warp(player.x() - 5, player.y()); 66: } else if (key() == 39) { //右 67: player.warp(player.x() + 5, player.y()); 68: } 69: 70: //上が押されたら, 71: if (key() == 38){ 72: //弾を出す(弾をドラえもんと同じ位置にする) 73: bullet.warp(player.x(), player.y()); 74: } 75: 76: //弾を上に動かす 77: //(見えなくても,上に動かしつづける) 78: bullet.warp(bullet.x(), bullet.y() - 5); 79: 80: //もし,弾が敵に当たっていたら 81: if (bullet.intersects(enemy)){ 82: score++;//得点を増やす 83: } 84: 85: //得点板の数字を更新 86: scoreBoard.text(score); 87: 88: // --- 再描画 --- 89: update(); 90: } 91: 92: } 93: 94: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。