Hi Leute,
hab folgendes Problem: Habe ein Programm mit dem ich bei einer wahlweise begrenzten oder unbegrenzten Welt ein Spielfeld erzeugen kann und davon die Generationen berechne und auf der Konsole ausgebe. Es funktioniert bisher alles bis auf, dass er mir die Generationen falsch berechnet..
Den Fehler finde ich leider nicht und daher würde ich euch bitten, ob ihr ihn seht und mir weiterhelfen könnt
[Java] ...
/** Startet das Spiel und entwickelt die naechste Generation
*/
public void start() {
/** Zunaechst muss eine Kopie der Welt erstellt werden,
* die aber nur zur Entwicklung der Generation gebraucht
* wird und sonst keine weitere Anwendung hat
* @param zeile: Laufvariable zum Durchlauf aller Zeilen
* @param spalte: Laufvariable zum Durchlauf aller Spalten
*/
this.welt_kopie = new boolean[this.z][this.s];
for (int zeile = 0; zeile < this.z; zeile++) {
for (int spalte = 0; spalte < this.s; spalte++) {
welt_kopie[zeile][spalte] = this.welt[zeile][spalte];
}
}
/** Durchlaufe das Spielfeld nach Zeilen und Spalten
*/
for(int zeile = 0; zeile < this.z; zeile++) {
for(int spalte = 0; spalte < this.s; spalte++) {
/** Berechne die Nachbar der Zellen und nach den Spielregeln schließlich die naechste Generation
* Spielregeln: 1. Eine Zelle bleibt lebendig, wenn sie 2 oder 3 lebendige Nachbarn besitzt
* 2. Eine Zelle wird geboren, wenn sie genau 3 lebendige Nachbarn besitzt
* 3. Eine Zelle stirbt, wenn sie 0, 1 oder mehr als 3 Nachbarn besitzt
*/
if(welt[zeile][spalte] == true) {
/** Regel 1 */
if(getNachbarn(zeile, spalte)==2 || getNachbarn(zeile, spalte)==3) welt_kopie[zeile][spalte] = true;
/** Regel 3 */
else welt_kopie[zeile][spalte] = false;
}
else {
/** Regel 2 */
//if(getNachbarn(zeile, spalte)==3) welt_kopie[zeile][spalte] = true;
}
}
}
this.welt = this.welt_kopie;
}
/** get-Methoden */
public boolean showNachbarn(int z, int s) {
if(begrenzt == true) {
if(z==-1 || s==-1 || s==getSpalten() || z==getZeilen()) {
return false;
}
else return getZelle(z, s);
}
else {
if(s==-1)
{
s=getSpalten()-1;
}
if(z==-1)
{
z=getZeilen()-1;
}
if(s==getSpalten())
{
s=0;
}
if(z==getZeilen())
{
z=0;
}
return getZelle(z, s);
}
}
/** Methode zur Bestimmung der Nachbarn
* @param z: Zeile der Zelle
* @param s: Spalte der Zelle
* @param nachbar: Anzahl der lebendigen Nachbarn einer Zelle
* @return nachbar-1: Ausgabe aller lebendigen Nachbarn abzueglich der Zelle selbst
*/
public int getNachbarn(int z, int s) {
int nachbar = 0;
if((z+this.z)%this.z!=0 && (s+this.s)%this.s!=0) {
for (int zeile = z-1; zeile <= z+1; zeile++) {
for (int spalte = s-1; spalte <= s+1; spalte++) {
if (showNachbarn(zeile, spalte) == true) nachbar++;
}
}
return nachbar-1;
}
else return nachbar;
}
... [/Java]
hab folgendes Problem: Habe ein Programm mit dem ich bei einer wahlweise begrenzten oder unbegrenzten Welt ein Spielfeld erzeugen kann und davon die Generationen berechne und auf der Konsole ausgebe. Es funktioniert bisher alles bis auf, dass er mir die Generationen falsch berechnet..
Den Fehler finde ich leider nicht und daher würde ich euch bitten, ob ihr ihn seht und mir weiterhelfen könnt
[Java] ...
/** Startet das Spiel und entwickelt die naechste Generation
*/
public void start() {
/** Zunaechst muss eine Kopie der Welt erstellt werden,
* die aber nur zur Entwicklung der Generation gebraucht
* wird und sonst keine weitere Anwendung hat
* @param zeile: Laufvariable zum Durchlauf aller Zeilen
* @param spalte: Laufvariable zum Durchlauf aller Spalten
*/
this.welt_kopie = new boolean[this.z][this.s];
for (int zeile = 0; zeile < this.z; zeile++) {
for (int spalte = 0; spalte < this.s; spalte++) {
welt_kopie[zeile][spalte] = this.welt[zeile][spalte];
}
}
/** Durchlaufe das Spielfeld nach Zeilen und Spalten
*/
for(int zeile = 0; zeile < this.z; zeile++) {
for(int spalte = 0; spalte < this.s; spalte++) {
/** Berechne die Nachbar der Zellen und nach den Spielregeln schließlich die naechste Generation
* Spielregeln: 1. Eine Zelle bleibt lebendig, wenn sie 2 oder 3 lebendige Nachbarn besitzt
* 2. Eine Zelle wird geboren, wenn sie genau 3 lebendige Nachbarn besitzt
* 3. Eine Zelle stirbt, wenn sie 0, 1 oder mehr als 3 Nachbarn besitzt
*/
if(welt[zeile][spalte] == true) {
/** Regel 1 */
if(getNachbarn(zeile, spalte)==2 || getNachbarn(zeile, spalte)==3) welt_kopie[zeile][spalte] = true;
/** Regel 3 */
else welt_kopie[zeile][spalte] = false;
}
else {
/** Regel 2 */
//if(getNachbarn(zeile, spalte)==3) welt_kopie[zeile][spalte] = true;
}
}
}
this.welt = this.welt_kopie;
}
/** get-Methoden */
public boolean showNachbarn(int z, int s) {
if(begrenzt == true) {
if(z==-1 || s==-1 || s==getSpalten() || z==getZeilen()) {
return false;
}
else return getZelle(z, s);
}
else {
if(s==-1)
{
s=getSpalten()-1;
}
if(z==-1)
{
z=getZeilen()-1;
}
if(s==getSpalten())
{
s=0;
}
if(z==getZeilen())
{
z=0;
}
return getZelle(z, s);
}
}
/** Methode zur Bestimmung der Nachbarn
* @param z: Zeile der Zelle
* @param s: Spalte der Zelle
* @param nachbar: Anzahl der lebendigen Nachbarn einer Zelle
* @return nachbar-1: Ausgabe aller lebendigen Nachbarn abzueglich der Zelle selbst
*/
public int getNachbarn(int z, int s) {
int nachbar = 0;
if((z+this.z)%this.z!=0 && (s+this.s)%this.s!=0) {
for (int zeile = z-1; zeile <= z+1; zeile++) {
for (int spalte = s-1; spalte <= s+1; spalte++) {
if (showNachbarn(zeile, spalte) == true) nachbar++;
}
}
return nachbar-1;
}
else return nachbar;
}
... [/Java]