Я делаю «Игру жизни» Джона Конвея и использую 2 булевых 2D-массива в своей игре вместе с операторами «If», чтобы определить, какой следующий ход должен воспроизводиться для ячеек в моей игре, исходя из текущего хода и количествасоседи по каждой клетке.Первый логический 2D-массив называется текущим движением, и он отслеживает количество ячеек в сетке и их конкретное местоположение, отображая их как истинные, если в сетке, и ложь, если в этой конкретной лактации в сетке нет ячеек во втором логическом 2Dмассив с именем next move и операторы if определяют, каким должен быть следующий текущий ход, с помощью операторов if, определяющих, достаточно ли их соседей для формирования новой ячейки или останутся ли ячейки в том же месте и можно ли сформировать новую ячейку илиячейки остаются в том же месте, следующее движение становится истинным, делая текущее движение истинным для следующего поколения, и тот же процесс повторяется снова и снова.Мой вопрос заключается в том, как я могу манипулировать своим кодом для подсчета количества живых ячеек в моей игре, я добавил переменную intpopulation для подсчета количества ячеек в указанных точках, увеличивая значение при рождении ячейки и уменьшая при смерти ячейки, ноЯ знаю, что сделал это неправильно, потому что он не отображает правильное количество ячеек, и я не могу понять мою проблему.Также текущее движение становится истинным в этом конкретном месте, если щелкнуть мышью по квадрату сетки на сетке, чтобы текущее движение стало истинным в этом конкретном месте.Я отображаю значение intpopulation в поле jtext, и есть jbutton, который сбрасывает значение intpopulation и избавляется от всех ячеек в сетке, создавая новый текущий 2d массив.Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.
public class GameOfLife extends javax.swing.JFrame {
int timelength = 100;
int wid = 500, hei = 250;
boolean[][] currentMove = new boolean[hei][wid], nextMove = new boolean[hei][wid];
boolean play;
public static int intpopulation = 0;
Image offScrImg;
Graphics offScrGraph;
public static int intGeneration = 0;
public GameOfLife() {
initComponents();
offScrImg = createImage(jPanel2.getWidth(), jPanel2.getHeight());
offScrGraph = offScrImg.getGraphics();
Timer time = new Timer();
TimerTask task = new TimerTask(){
public void run() {
if(play == true){
intGeneration++;
for(int i = 0; i < hei; i++){
for(int j = 0; j < wid; j++){
nextMove[i][j] = decide(i,j);
}
}
for(int i = 0; i < hei; i++){
for (int j = 0; j < wid; j++){
currentMove[i][j] = nextMove[i][j];
}
}
repain();
}
}
};
time.scheduleAtFixedRate(task, 0,timelength);
repain();
}
private boolean decide(int i, int j){
int neighbors = 0;
if(j > 0){
if(currentMove[i][j-1]) neighbors++;
if(i>0) if(currentMove[i-1][j-1]) neighbors++;
if(i<hei-1) if(currentMove[i+1][j-1]) neighbors++;
}
if(j < wid - 1){
if(currentMove[i][j+1]) neighbors++;
if(i>0) if(currentMove[i-1][j+1]) neighbors++;
if(i<hei-1) if(currentMove[i+1][j+1]) neighbors++;
}
if(i>0) if(currentMove[i-1][j]) neighbors++;
if(i<hei-1) if(currentMove[i+1][j]) neighbors++;
if(currentMove[i][j] && neighbors < 2) intpopulation--;
if(neighbors > 3) intpopulation--;
if(neighbors == 3) return true; intpopulation++;
if(currentMove[i][j] && neighbors == 2) return true;intpopulation++;
return false;
}
private void repain(){
offScrGraph.setColor(Color.BLACK);
offScrGraph.fillRect(0, 0, jPanel2.getWidth(), jPanel2.getHeight());
for (int i = 0; i < hei; i++){
for (int j = 0; j < wid; j++){
if(currentMove[i][j])
{
offScrGraph.setColor(Color.getHSBColor((float) Math.random(), .8f, .8f));
int x = j * jPanel2.getWidth()/wid;
int y = i * jPanel2.getHeight()/hei;
offScrGraph.fillRect(x, y, jPanel2.getWidth()/wid, jPanel2.getHeight()/hei);
}
}
}
offScrGraph.setColor(Color.BLACK);
for (int i = 1; i < hei; i++){
int y = i * jPanel2.getHeight()/hei;
offScrGraph.drawLine(0, y, jPanel2.getWidth(), y);
}
for (int j = 1; j < wid; j++){
int x = j * jPanel2.getWidth()/wid;
offScrGraph.drawLine(x, 0, x, jPanel2.getHeight());
}
jPanel2.getGraphics().drawImage(offScrImg, 0, 0, jPanel2);
}
private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) {
int j = wid * evt.getX() / jPanel2.getWidth();
int i = hei * evt.getY() / jPanel2.getHeight();
currentMove[i][j] = !currentMove[i][j];
intpopulation++;
repain();
}
private void jPanel2MouseDragged(java.awt.event.MouseEvent evt) {
int j = wid * evt.getX() / jPanel2.getWidth();
int i = hei * evt.getY() / jPanel2.getHeight();
if(SwingUtilities.isLeftMouseButton(evt)){
currentMove[i][j] = true;
intpopulation++;
}else currentMove[i][j] = false;
}
private void jFormattedTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
if(play)
{
String myString = Integer.toString(intpopulation);
jFormattedTextField2.setText( "population: " + myString);
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
currentMove = new boolean[hei][wid];
intGeneration = 0;
intpopulation = 0;
jFormattedTextField1.setText( "Generation: " + intGeneration );
jFormattedTextField2.setText( "population: " + intpopulation );
repain();
}