我正在尝试为康威的生活游戏编写代码,但它一直在消失。我不知道我应该写什么,而不是像代码一样进行所有计算,它应该只存储代码所说的内容然后进行更改。为了澄清,我不希望我的代码对一个单元格做出一个决定并对其进行更改,然后转到下一个单元格,但我希望它做出决定转到下一个单元格并在我的代码末尾希望它一次更改所有单元格。
这是创建世界的按钮:
private void btnSVActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
for (rad = 0; rad < 15; rad++){
for (kolumn = 0; kolumn < 15; kolumn++){
int x = 10 + 20 * kolumn;
int y = 10 + 20 * rad;
int diameter = 20;
int liv = (int) (Math.random()+0.5);
Cirkel cirkel = new Cirkel(x, y, diameter, liv);
cirklar.add(cirkel);
}
}
repaint();
}
这是制作下一代的按钮:
private void btnNGActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
for (i=0; i<=225; i++){
rad=(i/15+1);
kolumn=(i%15+1);
if (rad==1 && kolumn==1) {
int levandeGrannarH1=cirklar.get(i+1).kollaLevande()
+cirklar.get(i+15).kollaLevande()
+cirklar.get(i+16).kollaLevande();
if ((levandeGrannarH1!=2 && levandeGrannarH1!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarH1==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad==1 && kolumn==15 ) {
int levandeGrannarH2=cirklar.get(i-1).kollaLevande()+cirklar.get(i+14).kollaLevande()+cirklar.get(i+15).kollaLevande();
if ((levandeGrannarH2!=2 && levandeGrannarH2!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarH2==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad==15 && kolumn==1 ) {
int levandeGrannarH3=cirklar.get(i+1).kollaLevande()+cirklar.get(i-14).kollaLevande()+cirklar.get(i-15).kollaLevande();
if ((levandeGrannarH3!=2 && levandeGrannarH3!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarH3==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad==15 && kolumn==15 ) {
int levandeGrannarH4=cirklar.get(i-1).kollaLevande()+cirklar.get(i-15).kollaLevande()+cirklar.get(i-16).kollaLevande();
if ((levandeGrannarH4!=2 && levandeGrannarH4!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarH4==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad==1 && kolumn>1 && kolumn<15) {
int levandeGrannarR1=cirklar.get(i-1).kollaLevande()+cirklar.get(i+1).kollaLevande()+cirklar.get(i+14).kollaLevande()+cirklar.get(i+15).kollaLevande()+cirklar.get(i+16).kollaLevande();
if ((levandeGrannarR1!=2 && levandeGrannarR1!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarR1==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad>1 && kolumn==15 && rad<15) {
int levandeGrannarR2=cirklar.get(i-15).kollaLevande()+cirklar.get(i-16).kollaLevande()+cirklar.get(i-1).kollaLevande()+cirklar.get(i+14).kollaLevande()+cirklar.get(i+15).kollaLevande();
if ((levandeGrannarR2!=2 && levandeGrannarR2!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarR2==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad==15 && kolumn>1 && kolumn<15) {
int levandeGrannarR3=cirklar.get(i-1).kollaLevande()+cirklar.get(i+1).kollaLevande()+cirklar.get(i-14).kollaLevande()+cirklar.get(i-15).kollaLevande()+cirklar.get(i-16).kollaLevande();
if ((levandeGrannarR3!=2 && levandeGrannarR3!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarR3==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad>1 && kolumn==1 && rad<15 ) {
int levandeGrannarR4=cirklar.get(i-15).kollaLevande()+cirklar.get(i-14).kollaLevande()+cirklar.get(i+1).kollaLevande()+cirklar.get(i+15).kollaLevande()+cirklar.get(i+16).kollaLevande();
if ((levandeGrannarR4!=2 && levandeGrannarR4!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannarR4==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
if (rad>1 && kolumn>1 && rad<15 && kolumn<15) {
int levandeGrannar = cirklar.get(i-16).kollaLevande()+cirklar.get(i-15).kollaLevande()+cirklar.get(i-14).kollaLevande()+cirklar.get(i-1).kollaLevande()+cirklar.get(i+1).kollaLevande()+cirklar.get(i+14).kollaLevande()+cirklar.get(i+15).kollaLevande()+cirklar.get(i+16).kollaLevande();
if ((levandeGrannar!=2 && levandeGrannar!=4) && cirklar.get(i).kollaLevande()==1)
cirklar.get(i).gorDod();
else if ((levandeGrannar==3) && cirklar.get(i).kollaLevande()==0 )
cirklar.get(i).gorLevande();
}
repaint();
}
}
这是对细胞应该是什么样子以及它们是否活着的解释。
public class Cirkel {
private int x = 0;
private int y = 0;
private int diameter = 10;
private int liv = 1;
public Cirkel(int x, int y, int diameter, int liv){
this.x = x;
this.y = y;
this.diameter = diameter;
this.liv = liv;
}
public void rita(Graphics g){
if (this.liv==1)
g.setColor(Color.green);
else
g.setColor(Color.white);
g.fillOval(this.x, this.y, this.diameter, this.diameter);
}
public int kollaLevande(){
return this.liv;
}
public void gorLevande(){
this.liv=1;
}
public void gorDod(){
this.liv=0;
}
}
我将不胜感激任何形式的帮助,如果我的问题有什么问题,请尽管问,我会尝试以其他方式解释。