// オプション課題 跳ね返り雪達磨 // // 画面上のカーソルをうまく動かして雪だるまを破壊して高得点を狙う!! // というゲームがあったら面白いかも知れないということで // それのもとになりそうなものを作ってみました // // 操作はIが上,Mが下,Jが左,Lが右,Uが左上,Oが右上,Nが左下,「,」が右下 // Kでカーソルの移動速度が0になります // スペースで赤い色のマーカーがセットされ // 画面上を動いている雪達磨にそのマーカーがうまく合ったら // 達磨の移動方向が変わるようにしてあります // import java.awt.*; import java.awt.event.*; public class Kadai1120_3 extends Frame implements Runnable { // Window の大きさ private int FrameWidth = 300; private int FrameHeight = 300; // カーソルの位置,速度,加速度,最大速度 private int x, y; private double vx, vy; private double ax, ay; private double maxspeed; // ショットの位置 private int shootx, shooty; // ブロック // たくさんの達磨を配置することも可能です private dalmaBlock block[]; // フライングですがスレッド使います Thread Thread1; // コンストラクタ public Kadai1120_3() { super("跳ね返り達磨"); int i; // 初期設定 x = FrameWidth/2; y = FrameHeight/2; vx = 0; vy = 0; ax = 0.5; ay = 0.5; maxspeed = 3; shootx = -10; shooty = -10; // ブロックの初期設定 block = new dalmaBlock[1]; for( i=0; i -maxspeed ) vx-=ax; else if( (key==KeyEvent.VK_L || key==KeyEvent.VK_O || key==KeyEvent.VK_COMMA)&& vx < maxspeed ) vx+=ax; if( (key==KeyEvent.VK_I || key==KeyEvent.VK_U || key==KeyEvent.VK_O )&& vy > -maxspeed ) vy-=ay; else if( (key==KeyEvent.VK_M || key==KeyEvent.VK_N || key==KeyEvent.VK_COMMA)&& vy < maxspeed ) vy+=ay; if( key==KeyEvent.VK_K ) { vx = 0; vy = 0; } if( key == KeyEvent.VK_SPACE ) { shootx = x; shooty = y; hit();//当り判定へ } // repaint(); } }); setResizable(false); setBackground( Color.white ); setVisible(true); setSize(FrameWidth, FrameHeight); Thread1 = new Thread( this ); Thread1.start(); } //////////// 当り判定 ///////////// public void hit() { int i; for( i=0; iFrameWidth ) x = 0; if( y<10 ) y = FrameHeight; if( y>FrameHeight ) y = 10; for( i=0; i