Нужно задать исходное состояние игры шашки, то есть определенное расположение шашек, из текстового файла и подключить это к gui типа вот так
input.txt
1 2 3 4 5 6 7 8
1 * w * w * w * w
2 w * * * w * w *
3 * w * w * w *
4 w * * * * * w *
5 * b * b * * * b
6 * * * * b * * *
7 * b * b * b * b
8 b * b * b * b *
но как это в коде сделать
помогите
вот код
import java.awt.Color;
import static java.awt.FlowLayout.RIGHT;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CheckerBoard extends JFrame implements ActionListener{
JButton[] cell;
ImageIcon red, black, currentPlayer;
JPanel boardJPanel, statJPanel, allJPanel;
JLabel statusJLabel, currentPlayerJLabel, msgJLabel, player1, player2, starter, remainingMovesToDraw;
boolean mouseClickEnable;
int firstClickedRow, firstClickedCol, mouseClicked;
boolean jumpByHumanAgent;
public CheckerBoard() {
mouseClickEnable = false;
mouseClicked = 0;
cell = new JButton[8 * 8];
red = new ImageIcon("round_red.png");
black = new ImageIcon("round_black.png");
for(int i=0; i<8; i++){
for(int j=0; j<8;j++){
if((i+j)%2 == 0){
cell[i*8 + j] = new JButton();
cell[i*8 + j].setEnabled(false);
cell[i*8 + j].setBackground(Color.lightGray);
}
else{
cell[i*8 + j] = new JButton();
cell[i*8 + j].setBackground(Color.white);
cell[i*8+j].setForeground(Color.WHITE);
cell[i*8+j].setHorizontalTextPosition(JButton.CENTER);
cell[i*8+j].setVerticalTextPosition(JButton.CENTER);
if(i<3) cell[i*8 + j].setIcon(black);
else if(i>4) cell[i*8 + j].setIcon(red);
cell[i*8 + j].putClientProperty("row", i);
cell[i*8 + j].putClientProperty("column", j);
cell[i*8 + j].addActionListener((ActionListener) this);
}
}
}
boardJPanel = new JPanel(new GridLayout(8, 8));
boardJPanel.setSize(750, 700);
for (int i = 0; i < 64; i++) boardJPanel.add(cell[i]);
JPanel statusJPanel = new JPanel(new GridLayout(10, 1));
statusJPanel.setSize(300, 700);
statusJLabel = new JLabel();
String defaultLabelFont = statusJLabel.getFont().getFontName();
statusJLabel.setFont(new Font(defaultLabelFont, Font.PLAIN, 13));
starter = new JLabel("");
player1 = new JLabel("", red, RIGHT);
player2 = new JLabel("", black, RIGHT);
remainingMovesToDraw = new JLabel();
currentPlayerJLabel = new JLabel();
msgJLabel = new JLabel();
statusJPanel.add(statusJLabel);
statusJPanel.add(starter);
statusJPanel.add(player1);
statusJPanel.add(player2);
statusJPanel.add(remainingMovesToDraw);
statusJPanel.add(currentPlayerJLabel);
statusJPanel.add(msgJLabel);
allJPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
allJPanel.setSize(1050, 700);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 8;
c.gridheight = 8;
c.weightx = 0.5;
c.weighty = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
c.fill = GridBagConstraints.VERTICAL;
allJPanel.add(boardJPanel, c);
c.gridx = 8;
c.gridy = 0;
c.gridwidth = 8;
c.gridheight = 8;
c.weightx = 0.5;
c.weighty = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
c.fill = GridBagConstraints.VERTICAL;
allJPanel.add(statusJPanel, c);
super.add(allJPanel);
}
public void boardReset(){
for(int i=0; i<8; i++){
for(int j=0; j<8;j++){
if((i+j)%2 == 0){
cell[i*8 + j] = new JButton();
cell[i*8 + j].setBackground(Color.lightGray);
}
else{
cell[i*8 + j] = new JButton();
cell[i*8 + j].setBackground(Color.white);
cell[i*8+j].setForeground(Color.WHITE);
cell[i*8+j].setHorizontalTextPosition(JButton.CENTER);
cell[i*8+j].setVerticalTextPosition(JButton.CENTER);
if(i<3) cell[i*8 + j].setIcon(black);
else if(i>4) cell[i*8 + j].setIcon(red);
cell[i*8 + j].putClientProperty("row", i);
cell[i*8 + j].putClientProperty("column", j);
cell[i*8 + j].addActionListener((ActionListener) this);
}
}
}
}
@Override
public void actionPerformed(ActionEvent ae){
if(mouseClickEnable == false) return;
JButton button = (JButton) ae.getSource();
Integer row = (Integer) button.getClientProperty("row");
Integer col = (Integer) button.getClientProperty("column");
if(mouseClicked == 0){
if(currentPlayer != button.getIcon()){
msgJLabel.setText("Invalid checker");
return;
}
else{
msgJLabel.setText("");
mouseClicked = 1;
firstClickedRow = row;
firstClickedCol = col;
}
return;
}
if(mouseClicked == 1){
//check if valid move
if(!validMove(cell, currentPlayer, row, col, firstClickedRow, firstClickedCol, true)){
msgJLabel.setText("Invalid Move");
mouseClicked = 0;
}
else{
mouseClicked = 2;
move(cell, firstClickedRow, firstClickedCol, row, col);
msgJLabel.setText("");
jumpByHumanAgent = Math.abs(firstClickedRow - row) == 2;
}
}
}
boolean validMove(JButton[]cell, ImageIcon currentPlayer, int row, int col, int fromRow, int fromCol, boolean inGUI){
if(cell[row*8+col].getIcon() != null) return false;
int drow = Math.abs(fromRow - row), dcol = Math.abs(fromCol - col);
if(drow != dcol || drow > 2 || dcol > 2) return false;
if(!"K".equals(cell[fromRow*8+fromCol].getText()) && ((currentPlayer == red && row > fromRow) ||
(currentPlayer == black && row < fromRow))) return false;
if(drow == 2){
int midRow = (fromRow+row)/2, midCol = (fromCol+col)/2;
ImageIcon midChecker = (ImageIcon) cell[midRow*8+midCol].getIcon();
if(midChecker == null || midChecker == currentPlayer) return false;
else return true;
}
return true;
}
public boolean move(JButton[]cell, int sr, int sc, int dr, int dc){
cell[dr*8+dc].setIcon(cell[sr*8+sc].getIcon());
cell[dr*8+dc].setText(cell[sr*8+sc].getText());
cell[sr*8+sc].setIcon(null);
cell[sr*8+sc].setText(null);
if(Math.abs(sr-dr) == 2){
int midRow = (sr+dr)/2, midCol = (sc+dc)/2;
cell[midRow*8+midCol].setIcon(null);
cell[midRow*8+midCol].setText(null);
}
boolean crowned = false;
if(currentPlayer == red && dr == 0 && !"K".equals(cell[dr*8+dc].getText())){
cell[dr*8+dc].setText("K");
crowned = true;
}
if(currentPlayer == black && dr == 7 && !"K".equals(cell[dr*8+dc].getText())){
cell[dr*8+dc].setText("K");
crowned = true;
}
return crowned;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пришло время дальше изучать програмированияЗнание в веб разработки у меня ограничеваются пхп и сопутствующие ему технологии не знаю что...
Есть массив показаний датчиков в оперативной памяти устройстваЕсть сервис в приложении, который обновляет эти данные и несколько Activity, которые...
У меня есть диалог сохранения файла, где нужно выбрать имя и путь для сохраненияОн сделан с помощью DialogFragment