私の最終的なJavaクラスでは、十分な時間がないため、公式のものより単純なバージョンを除いて、小惑星ゲームを作っています。Java小惑星ゲームどのように最初のショットを消さずに複数のショットを発射できるようにするには?
私たちの船がショット(SPACEバー)を追加(ショット、x、y)すると問題になりますが、SPACEバーを再度クリックするとそのショットが元のx、yに戻されます。だから、今は一度に1発ずつしか発砲することができません。私たちは、複数のショットを発射してそれらをすべて目に見えるようにすることができるようにしたいと考えています。
これを行う方法がわかりません。どんな助けもありがとうございます。
P.S.必要に応じてコードを追加します。 P.S.S.私はコードを含むのではなく、明らかにそうではないことを、私は後で投稿を編集できると思った。
package week7Homework;
import acm.program.GraphicsProgram;
import java.util.*;
import java.awt.event.*;
import acm.graphics.*;
import java.awt.Color;
import java.awt.Image;
public class space8bit extends GraphicsProgram
{
/* Initialize everything that is needed */
final int WIN_HEIGHT = 800;
final int WIN_WIDTH = 1900;
GImage space = new GImage("/College/IT219/Week7/src/week7Homework/outerspace.png");
GImage ship = new GImage("/College/IT219/Week7/src/week7Homework/ship.png");
GImage explosion = new GImage("/College/IT219/Week7/src/week7Homework/explosion.png");
GImage [] ast = new GImage[6];
Random rand = new Random();
pewpew shots = new pewpew();
int shipx;
int shipy;
public void init()
{
setSize(WIN_WIDTH, WIN_HEIGHT);
add(space);
ship.setLocation(50,330);
ship.scale(.8);
add(ship);
addKeyListeners();
//scale explosion
explosion.scale(.5);
}
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
if (key == KeyEvent.VK_UP)
{ ship.move(0, -15); }
/*else if (key == KeyEvent.VK_SPACE)
{ xMove = MV_AMT; }*/
else if (key == KeyEvent.VK_DOWN)
{ ship.move(0, 15); }
else if (key == KeyEvent.VK_SPACE)
{shipx = (int)ship.getX()+195;
shipy = (int)ship.getY() + 80;
add(shots,shipx,shipy);
}
}
public void asteriods()
{
GImage ast1 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1300,100);
GImage ast2 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1750,250);
GImage ast3 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1650,350);
GImage ast4 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1550,650);
GImage ast5 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1450,600);
GImage ast6 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1350,750);
ast [0] = ast1;
ast [1] = ast2;
ast [2] = ast3;
ast [3] = ast4;
ast [4] = ast5;
ast [5] = ast6;
add(ast[0]);
add(ast[1]);
add(ast[2]);
add(ast[3]);
add(ast[4]);
add(ast[5]);
}
public void run()
{
asteriods();
while(true)
{
pause(120);
int random1x = rand.nextInt(-1+1+6)-9;
int random2x = rand.nextInt(-1+1+6)-15;
int random3x = rand.nextInt(-1+1+6)-25;
int random4x = rand.nextInt(-1+1+6)-16;
int random5x = rand.nextInt(-1+1+6)-8;
int random6x = rand.nextInt(-1+1+6)-13;
ast[0].move(random1x, 0);
ast[1].move(random2x, 0);
ast[2].move(random3x, 0);
ast[3].move(random4x, 0);
ast[4].move(random5x, 0);
ast[5].move(random6x, 0);
shots.move(50, 0);
for (int i = 0; i < ast.length; i++)
{
//integer that gets bounds of all rectangles and ovals in the arrays.
GRectangle asteroidBounds = ast[i].getBounds();
//check for collision with other objects
if (shots.getBounds().intersects(asteroidBounds))
{
int shotX = (int)shots.getX();
int shotY = (int)shots.getY();
pause(10);
remove(ast[i]);
add(explosion, shotX-100, shotY - 50);
remove(shots);
pause(25);
remove(explosion);
}
else if (ship.getY() <= 0)
{
ship.move(0, 15);
}
else if (ship.getY() >= WIN_HEIGHT - 168)
{
ship.move(0, -15);
}
}
}
}
}
サンプルコードは、これよりもはるかに短く同じことをしています。スペースバーを押すだけで、あなたは何を話しているのか分かります。
package week7Homework;
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.awt.event.*;
public class collisionTry extends GraphicsProgram
{
final int WIN_WIDTH = 500;
final int WIN_HEIGHT = 500;
GOval ship = new GOval(100, 250, 50, 50);
GImage bullet = new GImage("/College/IT219/Week7/src/week7Homework/bullet.gif", 50, 50);
GImage bullet2;
boolean bulletFired;
public void init()
{
setSize(WIN_WIDTH, WIN_HEIGHT);
addKeyListeners();
}
public void run()
{
GRect rect = new GRect(400, 200, 50, 150);
add(rect);
rect.setColor(Color.BLACK);
rect.setFilled(true);
add(ship);
ship.setColor(Color.BLACK);
ship.setFilled(true);
while (true)
{
pause(50);
rect.move(-1, 0);
//bullet.move(5, 0);
if (bulletFired == true)
{
bullet.move(5, 0);
}
if (bullet.getBounds().intersects(rect.getBounds()))
{
remove(rect);
remove(bullet);
}
}
}//run
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
if(key == KeyEvent.VK_SPACE)
{
int shipX = (int)ship.getX();
int shipY = (int)ship.getY();
add(bullet, shipX+50, shipY+25);
bulletFired = true;
}
else if (key == KeyEvent.VK_UP){
ship.move(0, -5);
}
}
}
ここにサンプルコードがあります。スペースを数回押すと、何を意味するのかが正確にわかります。 – Eddy
[重複を投稿しない](https://stackoverflow.com/questions/45625436/java-asteroids-game-how-to-beable-to-fire-multiple-shots-without-having-the- fi)追加する情報がある場合は、元の投稿を編集します。 – shmosel
申し訳ありませんが、私はすぐにそれを見ていませんでした、私はそれをgoogledが、それは投稿を編集する特権(私はそれも自分の記事に当てはまると思った)残念です。そして、今私はハハをブロックし、さらに質問があると思った。 fml。 – Eddy