Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
太空入侵者外星阵列问题-Java_Java_Arrays_Physics_Game Development - Fatal编程技术网

太空入侵者外星阵列问题-Java

太空入侵者外星阵列问题-Java,java,arrays,physics,game-development,Java,Arrays,Physics,Game Development,我正在为一个大学作业开发一个太空入侵者应用程序,我遇到了一个问题,当外星人撞到墙上时,他们会一个接一个地改变方向,而不是当任何外星人碰到边界时,所有的物体都会改变方向。我觉得这是我的for循环中的一个问题,我的move方法包含reverseDirection()方法分别作用于每个元素,但我不知道如何解决这个问题,任何帮助都将不胜感激。这是我给你的密码 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphic

我正在为一个大学作业开发一个太空入侵者应用程序,我遇到了一个问题,当外星人撞到墙上时,他们会一个接一个地改变方向,而不是当任何外星人碰到边界时,所有的物体都会改变方向。我觉得这是我的for循环中的一个问题,我的move方法包含reverseDirection()方法分别作用于每个元素,但我不知道如何解决这个问题,任何帮助都将不胜感激。这是我给你的密码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;

public class InvadersApplication extends JFrame implements Runnable {//, KeyListener {

   private static final Dimension WindowSize = new Dimension(800, 600);
   private static final int NUMALIENS = 16;
   private Alien AliensArray[] = new Alien[NUMALIENS];
   private Image alienImage;
   private Image playerImage;
   private String workingDirectory = "C:\\Users\\brads\\IdeaProjects\\Assignment3\\src\\workingDirectory\\";
   private Player playerShip;
   private BufferStrategy strategy;


   public InvadersApplication() {

       System.out.println(System.getProperty("user.dir"));

       setDefaultCloseOperation(EXIT_ON_CLOSE);
       Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();

       int x = screenSize.width / 2 - WindowSize.width / 2;
       int y = screenSize.height / 2 - WindowSize.height / 2;

       setBounds(x, y, WindowSize.width, WindowSize.height);
       this.setTitle("Alien Invaders App");


       ImageIcon playerIcon = new ImageIcon(workingDirectory + "player_ship.png");
       playerImage = playerIcon.getImage();

       ImageIcon alienIcon = new ImageIcon(workingDirectory + "alien_ship_1.png");
       alienImage = alienIcon.getImage();

       playerShip = new Player(playerImage);

       //  addKeyListener(this);

       setVisible(true);

       createBufferStrategy(2);
       strategy = getBufferStrategy();

       for (int i = 0; i < NUMALIENS; i++) {
           AliensArray[i] = new Alien(alienImage);

           AliensArray[i].setPosition(70 * (i%4), 70 * (i/4));

           AliensArray[i].setXspeed(1);
       }


       Thread thread1 = new Thread(this);

       thread1.start();
       repaint();
   }

   @Override
   public void run(){

       while(true){

       try{

             for(int i = 0; i < NUMALIENS; i++) {

                 AliensArray[i].move();

             }
                   repaint();


                   Thread.sleep(5);

       } catch (Exception e) {
           e.printStackTrace();
       }
       }
   }

 /*  public void keyPressed(KeyEvent e) {
       int KeyCode = e.getKeyCode();
       if (KeyCode == KeyEvent.VK_LEFT) {
           playerShip.movePlayer(-8);
       } else if (KeyCode == KeyEvent.VK_RIGHT) {
           playerShip.movePlayer(8);

       }

   }
*/
   public void keyReleased(KeyEvent e){
   }

   public void keyTyped(KeyEvent e){}

   public void paint(Graphics g){

       g = strategy.getDrawGraphics();

       g.setColor(Color.BLACK);
       g.fillRect(0,0,800,600);

       for(int i=0; i < NUMALIENS; i++){
           AliensArray[i].paint(g);

       }
          // playerShip.paint(g);
           //playerShip.paintPlayer(g);

           strategy.show();
       this.repaint();
   }

   public static void main(String[] args){


   InvadersApplication x = new InvadersApplication();

   }

}
sprite2D的外来亚类

import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class Alien extends Sprite2D {

   private  int xi;
   private int xj;

   public Alien(Image myImage) {

       super(myImage);
       this.myImage = myImage;
       this.x = x;
       this.y = y;
       this.xi = xi;
       this.xj = xj;

   }
//    @Override
//    public void setPosition(int xx, int yy){
//        xx = x;
//        yy = y;
//
//    }

   public void move() {

       y+=xj;
       x+= xi;

       if(x >= 750) {

           reverseDirection();

           x = x + xi;

       }

       else if (x < 0)
       {
           reverseDirection();

           x = x + xi;
       }

   }

   public void setXspeed(int xi) {
       this.xi = xi;
   }

   public void setYspeed(int xj) {
       this.xj = xj;
   }

   public void reverseDirection() {

           xi = -xi;
           System.out.println("reverse");

   }
//    @Override
//    public void paint(Graphics g) {
//
//
//                g.drawImage(myImage, xx, yy, null);
//            }
   }
import java.awt.*;
导入java.util.Random;
导入javax.swing.*;
公共类Sprite2D{
私有国际席;
私人int xj;
公共外星人(图片myImage){
超级(myImage);
this.myImage=myImage;
这个.x=x;
这个。y=y;
这是X==席;
这个.xj=xj;
}
//@覆盖
//公共无效设置位置(整数xx,整数yy){
//xx=x;
//yy=y;
//
//    }
公开作废动议(){
y+=xj;
x+=席;
如果(x>=750){
逆向();
x= x+席;
}
else如果(x<0)
{
逆向();
x= x+席;
}
}
公共void setXspeed(int xi){
这是X==席;
}
公共无效设置速度(int xj){
这个.xj=xj;
}
公共void reverseDirection(){
席=席;
系统输出打印项次(“反向”);
}
//@覆盖
//公共空间涂料(图g){
//
//
//g.drawImage(myImage,xx,yy,null);
//            }
}

您正在检查它们是否达到了单独反转它们的条件,而不是检查数组中是否有任何
Alien
符合条件,然后同时对整个数组调用
reverseDirection()
。您需要与整个阵列进行通信,告知至少一个
外星人的方向已更改。有几种不同的方法可以做到这一点。非常感谢您的回复。我觉得自己真的很愚蠢,因为我意识到了这样一个问题,即他们是单独行动的,而不是作为一个整体,但我就是想不出一种方法,让他们在满足条件的情况下都行动起来。我正在考虑在for循环中使用for循环,这样如果aliensArray[I]满足条件,那么for(int I=0;Iimport java.awt.*;
import java.util.Random;
import javax.swing.*;

public class Alien extends Sprite2D {

   private  int xi;
   private int xj;

   public Alien(Image myImage) {

       super(myImage);
       this.myImage = myImage;
       this.x = x;
       this.y = y;
       this.xi = xi;
       this.xj = xj;

   }
//    @Override
//    public void setPosition(int xx, int yy){
//        xx = x;
//        yy = y;
//
//    }

   public void move() {

       y+=xj;
       x+= xi;

       if(x >= 750) {

           reverseDirection();

           x = x + xi;

       }

       else if (x < 0)
       {
           reverseDirection();

           x = x + xi;
       }

   }

   public void setXspeed(int xi) {
       this.xi = xi;
   }

   public void setYspeed(int xj) {
       this.xj = xj;
   }

   public void reverseDirection() {

           xi = -xi;
           System.out.println("reverse");

   }
//    @Override
//    public void paint(Graphics g) {
//
//
//                g.drawImage(myImage, xx, yy, null);
//            }
   }