Проблема инопланетных захватчиков - Java - PullRequest
0 голосов
/ 05 февраля 2020

Я занимаюсь разработкой приложения космических захватчиков для задания в колледже, и я столкнулся с проблемой, когда инопланетяне меняют направление по одному, когда они ударяются о стену, а не весь массив объектов, меняющих направление, когда любой инопланетянин касается границы , У меня такое ощущение, что это проблема для меня для l oop, где мой метод 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;


public class Sprite2D{

    protected int x = 0,y = 30;
    protected Image myImage;

    public Sprite2D(Image myImage){

        this.x = x;
        this.y = y;

        this.myImage = myImage;

    }

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

    public void paint(Graphics g){

        g.drawImage(myImage, x,y, null);
    }
}

Иностранный подкласс 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);
//            }
   }
...