Я делаю это игровое приложение для проекта. Я собрал некоторые общие коды, которые я нашел в Интернете для игровой механики крестики-нолики и тому подобное, но я изменил / добавил некоторый код, чтобы вы могли выбирать между сеткой 3х3, сеткой 4х4 или сеткой 5х5. Все дело в GridLayout, который меняет размер в зависимости от того, что пользователь выбирает в первом JOptionPane.
Моя текущая проблема с окончанием, когда появляется JOptionPane с "YES" и "NO". Если вы нажмете «ДА», я хочу, чтобы код вернулся к самой первой JOPtionPane, где вы снова выбираете размер сетки.
Я не совсем уверен, как двигаться дальше с этой проблемой. Пожалуйста помоги.
Существует также код для проверки того, заполнена ли доска и никто не выиграл, но он похож на оператор playerWins if, поэтому я не думаю, что он имеет большое значение.
public TicTacToe(){
startGame();
}
`````````\\other methods
public void startGame(){
setGridSize(); \\JOptionPane where you choose between 3x3, 4x4, 5x5
setNames(); \\set player names
setTotalButtons();
setLayout(new GridLayout(gridSize,gridSize));
initializeButtons();
}
`````````
private class buttonListener implements ActionListener{
`````````
if(turnCounter%2 == 0){
buttonClicked.setText("X");
buttonClicked.setEnabled(false);
buttonClicked.setBackground(colorX);
} else {
buttonClicked.setText("O");
buttonClicked.setEnabled(false);
buttonClicked.setBackground(colorO);
}
`````````\\call methods to check for win
if (playerWins == true){
String winner;
if (turnCounter%2 == 0)
winner = playerX;
else
winner = playerO;
int reply = JOptionPane.showConfirmDialog(null, winner + " wins! New game?", "Game Over", JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.NO_OPTION)
System.exit(0);
else
resetButtons();\\currently just clears board, but it still remains as a 3x3 grid (or whichever you chose)
}
А вот и главный метод.
public static void main(String[] args) {
JFrame window = new JFrame("Tic-Tac-Toe");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(new TicTacToe(), BorderLayout.CENTER);
JLabel gameInfo = new JLabel("TIC-TAC-TOE");
gameInfo.setHorizontalAlignment(SwingConstants.CENTER);
window.add(gameInfo, BorderLayout.NORTH);
window.setBounds(300,200,300,300);
window.setVisible(true);
}
}
РЕДАКТИРОВАТЬ: Вот часть кода resetButtons ().
public void resetButtons(){
for(int i = 0; i <= totalButtons; i++)
{
buttons[i].setText("");
buttons[i].setEnabled(true);
buttons[i].setBackground(backgroundColor);
buttons[i].setOpaque(false);
buttons[i].setContentAreaFilled(true);
}
}