Gra w statki. ArrayList - dodawanie/usuwanie koordynatów statków

0

W ramach zadania szkolnego muszę stworzyć w Javie grę w statki.
Moja plansza składa się ze 100 przycisków JButton(umieszczonych w dwuwymiarowej tablicy o nazwie "grid") na których możemy je rozmieścić.
Postawienie statku odbywa się poprzez naciśnięcie jeden raz na wybrany JButton i tym samym zmienienie jego koloru. Położenie statku jest zapisywane w ArrayList( PatrolBoatElementsx oraz PatrolBoatElementsy). Statki możemy stawiać tak długo, aż ich ilość w ArrayList nie przekroczy tej ustawionej przeze mnie.

Usunięcie statku odbywa się poprzez dwukrotne naciśnięcie na zamalowany już JButton oraz usunięcie jego koordynatów z ArrayList.
Po tym jak rozstawie wszystkie możliwe statki i usunę jeden wybrany przeze mnie, a następnie z powrotem go rozmieszczę na planszy, wszystko działa poprawnie.

Problem pojawia się w chwili gdy usunę więcej niż jeden statek naraz i chcę je z powrotem rozmieścić. Wtedy program umożliwia mi umieszczenie z powrotem tylko jednego, a ArrayList wciąż przechowuje wszystkie wartości tak jakby nie zostały wcześniej usunięte. Mogę liczyć na jakaś wskazówkę, radę jak rozwiązać ten problem?

Tak wygląda mój kod dla 1 masztowców:

import java.awt.Color;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PatrolBoatO implements Observer {
	JPanel ships;
	JFrame f;
	ActionEvent e;
	JButton[][] grid;
	MouseListener[][] listeners;
	
	ArrayList<Integer> PatrolBoatElementsx = new ArrayList<Integer>(3);
	ArrayList<Integer> PatrolBoatElementsy = new ArrayList<Integer>(3);
	public PatrolBoatO(JPanel ships,JFrame f,ActionEvent e,JButton[][] grid) {
		this.ships=ships;
		this.f=f;
		this.e=e;
		this.grid=grid;
		listeners = new MouseListener[grid.length][grid[0].length];
	}
	
	@Override
	public void update() {
		
		for (int row = 0; row < grid.length; row++) {
		    for (int col = 0; col < grid[row].length; col++){ 
			grid[row][col].setEnabled(true);
			
			final int thisRow = row;
			final int thisCol = col;
			
			listeners[row][col] = new MouseAdapter() {
				public void mouseClicked(MouseEvent event){		
					
					System.out.println(thisRow + " "+thisCol);
					
		 if (event.getClickCount() == 2) {
			  ((JButton)event.getSource()).setBackground(null);
			  grid[thisRow+1][thisCol].setEnabled(true);
			  grid[thisRow+1][thisCol].addMouseListener(listeners[thisRow+1][thisCol]);
			  grid[thisRow-1][thisCol].setEnabled(true);
			  grid[thisRow-1][thisCol].addMouseListener(listeners[thisRow-1][thisCol]);
			  grid[thisRow][thisCol-1].setEnabled(true);
			  grid[thisRow][thisCol-1].addMouseListener(listeners[thisRow][thisCol-1]);
			  grid[thisRow][thisCol+1].setEnabled(true);
			  grid[thisRow][thisCol+1].addMouseListener(listeners[thisRow][thisCol+1]);
			  PatrolBoatElementsx.remove((Integer)thisRow);
			  PatrolBoatElementsy.remove((Integer)thisCol);
			  
		  }
		  else if((event.getClickCount() == 1)&&(PatrolBoatElementsx.size()<4)) {
			  ((JButton)event.getSource()).setBackground(Color.green);
			  PatrolBoatElementsx.add(thisRow);
			  PatrolBoatElementsy.add(thisCol);
			  grid[thisRow+1][thisCol].setEnabled(false);
			  grid[thisRow+1][thisCol].removeMouseListener(listeners[thisRow+1][thisCol]);
			  grid[thisRow-1][thisCol].setEnabled(false);
			  grid[thisRow-1][thisCol].removeMouseListener(listeners[thisRow-1][thisCol]);
			  grid[thisRow][thisCol-1].setEnabled(false);
			  grid[thisRow][thisCol-1].removeMouseListener(listeners[thisRow][thisCol-1]);
			  grid[thisRow][thisCol+1].setEnabled(false);
			  grid[thisRow][thisCol+1].removeMouseListener(listeners[thisRow][thisCol+1]);
			  for(Integer number : PatrolBoatElementsx){
				  System.out.println("Number = " + number);
			  }
			  
			 
		  }}};
		  
		  grid[row][col].addMouseListener(listeners[row][col]);
		    
		    }}
			f.revalidate();
			f.repaint();
			
				}}
0

Temat do zamknięcia. Sam sobie poradziłem kilka dni temu:)
Jeśli to, kogoś interesuje to:
Stworzyłem jeszcze jedną dwuwymiarową tablicę i w niej przechowuję informacje gdzie jest statek ustanawiając wartosc 1/0.
Stawianie statku:

 BoatPartIsHere[thisCol][thisRow]=1;   }

Usuwanie:

 BoatPartIsHere[thisCol][thisRow]=0;   }

Sprawdzenie czy gracz może postawić więcej statków:

int sum =0;
					for (int rowa = 0; rowa < BoatPartIsHere.length; rowa++) {
					    for (int cola = 0; cola < BoatPartIsHere[rowa].length; cola++){ 
					 sum+=BoatPartIsHere[rowa][cola];
					    }

ArrayList PatrolBoatElementsx oraz ArrayList PatrolBoatElementsy usunąłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1