Prosta gra Kółko i Krzyżyk

0

Metoda movementComputer() losuje liczbę, a następnie sprawdza czy JButton w tabeli o indeksie tej wylosowanej liczby jest zajęty przez któryś znak. Jeśli nie to wstawia tu swój znak, a jeśli tak to losuje znowu liczbę i sprawdza jeszcze raz. Problem w tym, ze nie bardzo to działa. Program zachowuje się w taki sposób, że komputer wstawia swój znak chyba gdzie chce. Nawet tam, gdzie gracz postawi swój znak np. X, to komputer stawia tam potem swój znak. Czemu tak się dzieje?

JButton[] tabButtons = new JButton[9];
	public void drawBoard() {
		panelBoard.removeAll();
		
		for(int i = 0; i < 9; ++i) {
			tabButtons[i] = new JButton();
			panelBoard.add(tabButtons[i]);
			final int index = i;
			tabButtons[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					if(tabButtons[index].getText().equals("")) {
						tabButtons[index].setText(yourChar);
						tabButtons[index].setBackground(Color.CYAN);
						tabButtons[index].addActionListener(null);
						
						movementComputer();
					} else {
						JOptionPane.showMessageDialog(null,  "In this box is another sign!", "", JOptionPane.WARNING_MESSAGE);
					}
					
					
				}
				
			});
		}
		
		panelBoard.repaint();
	}
	
	public void movementComputer() {
		Random random = new Random();
		int randomNumber;
		
		while(true) {
			randomNumber = random.nextInt(9);
			
			if(!(tabButtons[randomNumber].equals(yourChar) && !(tabButtons[randomNumber].equals(computerChar)))) {
				tabButtons[randomNumber].setText(computerChar);
				tabButtons[randomNumber].setBackground(Color.RED);
				tabButtons[randomNumber].addActionListener(null);
				
				break;
			}
		}
	}
0

Myśle, że tu jest błąd:

(!(tabButtons[randomNumber].equals(yourChar) && !(tabButtons[randomNumber].equals(computerChar))))

Jeśli ustawiłeś nawiasy chyba.

0

Źle mi się kliknęło (sorry za tamten post), tak chyba powinno być:

(!(tabButtons[randomNumber].equals(yourChar)) && !(tabButtons[randomNumber].equals(computerChar)))

Świetny Mleczasz

0

Zamiast skomplikowanego i błędnego (porównujesz przycisk ze znakiem)

if(!(tabButtons[randomNumber].equals(yourChar) && !(tabButtons[randomNumber].equals(computerChar))))

daj proste

if(tabButtons[randomNumber].getText().isEmpty())

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