Game of life

05/18/2018 12:51 S u n#1
Servus,
Ich brauche eure Hilfe!
Ich schriebe grade für die Uni ein Programm zum Game of Life.
Dieser Teil soll ein 2 dimensionales Array nach folgenden Regeln überprüfen:

1. Eine lebende Zelle ('X') überlebt in der nächsten Generation, wenn sie zwei oder drei Nachbarn hat. Sind es weniger bzw. mehr, so stirbt sie an Vereinsamung bzw. Überbevölkerung.
2. Eine tote Zelle (' ') wird immer dann in der nächsten Generation zum Leben erweckt, wenn sie genau drei lebendige Nachbarn hat, ansonsten bleibt sie tot.

Das Programm sollte eigentlich das aktuelle Array (feld) Feld für Feld überprüfen, bei jeder Zelle alle "Nachbarn" überprüfen und nach den regeln in ein zweites array (prueffeld) übertragen. Das ganze klappt aber nicht.

Sieht jemand zufällig einen Fehler?
Gern auch Privat für skype oder sowas melden. Stehe echt auf dem Schlauch..

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

Vielen Dank! :)
05/18/2018 15:58 warfley#2
Den einzigen Fehler im Prüfcode den ich gefunden habe ist:
Code:
for(int y=-1;y<2;y++){
  for (int x = -1; x < 2; x++) {  
    if (feld[zeilen + y][spalte + x] == 'X')
Wenn zeilen = 0 dann greifst du mit feld[-1][spalte + x] auf uninitialisiertes Memory zu (Da es keine -1te zeile gibt) und da kann alles mögliche drin stehen, da könnte überall X drin stehen (auch wenn es wahrscheinlicher ist das irgendwas random drin steht).
Wenn spalte = 0 ist versuchst du auf die -1te spalte zu zu greifen, und das wiederum ist die letzte spalte der vorherigen Zeile, verfälscht also auch deine ergebnisse.
Für Zeilen =21 oder Spalten= 78 und x,y +1 gilt natürlich ähnliches

Das ganze kann man wunderschön in einem einzeiler lösen
Code:
int Nachbarn = (zeilen && spalte && feld[zeilen-1][spalte-1] == 'X') + (spalte && feld[zeilen][spalte-1] == 'X') + (zeilen < 21 && spalte && feld[zeilen+1][spalte-1] == 'X') + (zeilen && feld[zeilen-1][spalte] == 'X') + (zeilen < 21 && feld[zeilen+1][spalte] == 'X') + (zeilen && spalte<77 && feld[zeilen-1][spalte+1] == 'X') + (spalte<77 && feld[zeilen][spalte+1] == 'X') + (zeilen < 21 && spalte<77 && feld[zeilen+1][spalte+1] == 'X')