![]() |
Spiel des Lebens
Gibt es hier einen user der sich mit der Programmierung eines Spiels namens 'Spiel des Lebens' gut auskennt und dem ich ein paar fragen stellen könnte(am liebsten über PN)???
Zum Programm:::: Erstellt werden soll ein StringGrid mit einer bestimmten Größe(Konstanten--> sollen aber veränderbar sein),Buttons zum vergrößern und verkleinern des Stringgrids. Es gibt mehrer Ausgangssituationen die über eine comboBox ausgewählt werden und natürlich den Next Generation button!! Angelegt hab ich mehrer Units. Einmal die HauptUnit mit dem Formular,eine Typen Unit wo die Typen + Ausgangssituationen deklariert werden und eine SpielLogik Unit indem ich ein Array vom Typ Boolean deklariert habe!!! Ich bräuchte nur ein paar Tips zu umsetzung!! Schreibt mir eine PN wenn ich mir helfen wollt! *THX* |
Re: Spiel des Lebens
Zitat:
...:cat:... |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist keine Multimediafrage im Sinne der Sparte ;) |
Re: Spiel des Lebens
Ich verstehe noch nicht ganz wie ich die Rechnung umsetzen könnte???
1. Eine Zelle mit drei Nachbarn wird belegt! Da muss ja zunächsteinmal der Komplette Array durchlaufen werden und dann für jedes Feld überprüft werden ob es drei Lebende(also True) nachbarn hat aber wie könnte man das umsetzen??? |
Re: Spiel des Lebens
Du braucht zwei Arrays der Grösse [x,y].
Array A enthält das aktuelle Bild; Array B die errechnete nächste Generation. Array B wird dann auf das Stringgrid visualisiert. Man könnte nun Array B -> A kopieren und eine neue Generation berechnen; schlaue Programmierer verwenden die beiden Arrays aber im Wechsel. |
Re: Spiel des Lebens
Das hab ich mir genauso gedacht, doch weiß ich leider net wie ich die Rechnung umsetzen kann??
Hab mir gedacht das ich eine Hilfsfunktion schreibe die errechnet wieviele nachbarn ein bestimmtes Feld hat und das Ergebnis(Nachbar : Integer) zurrückliefert ! Nur wie könnte man das machen??? |
Re: Spiel des Lebens
na du musst einfach die achn nachbarn ansprechen!
x, y; x+1,y, x+1, y+1 uns so weiter:) |
Re: Spiel des Lebens
Das hab ich so umgesetzt
Delphi-Quellcode:
Doch dabei tritt ja das Problem auf das wenn z.B. das Spielfeld auf die Größe 1x1 geändert wird das es ein Range Check Error gibt!
Function FnkNachbarn(i,j:integer):integer;
var Nachbarn :integer; Begin Nachbarn:= 0; if curGen[i,j+1] = True then //unten Nachbarn:= Nachbarn + 1; if curGen[i,j-1] = True then //oben Nachbarn:= Nachbarn + 1; if curGen[i-1,j-1] = True then //links Nachbarn:= Nachbarn + 1; if curGen[i-1,j] = True then //links Nachbarn:= Nachbarn + 1; if curGen[i-1,j+1] = True then //links Nachbarn:= Nachbarn + 1; if curGen[i+1,j-1] = True then //rechts Nachbarn:= Nachbarn + 1; if curGen[i+1,j] = True then //rechts Nachbarn:= Nachbarn + 1; if curGen[i+1,j+1] = True then //rechts Nachbarn:= Nachbarn + 1; FnkNachbarn:=Nachbarn; end; Doch ich wüßte jetzt nicht wie man das anders Programmieren könnte, vielleicht mit einer Bedingung die per getHoehe oder getBreite herausfindet wie groß das Spielfeld ist somit auch nur die wirklich existierenden Nachbarn überprüft(aber wie)??? |
Re: Spiel des Lebens
In deiner Funktion hast du ja die Terme i+1, i-1, j+1, j-1.
Stell dir vor, du berechnest diese Werte vorab und speicherst sie in Zwischenvariablen a,b,c,d. Bis jetzt wurde effektiv noch nichts geändert (ausser Verwendung von Zwischenvariablen) Sollte a,b,c oder d das Spielfeld verlassen, dann sollte es an der gegenüberliegenden Seite wieder auftauchen:
Delphi-Quellcode:
a := i+1;
if a > MAX_X then // MAX_X ist die höchste erlaubte X-Position a := MIN_X; b := i-1; if b < MIN_X then b := MAX_X; C := ... |
Re: Spiel des Lebens
.. oder statt x+1 (x+1+SIZE_X) Mod SIZE_X für den rechten und (x-1+SIZE_X) Mod SIZE_X für den linken Nachbarn. Das +SIZE_X muss leider sein, da -1 mod SIZE_X = -1 und damit haste ja nix gewonnen. SIZE_X wäre dann aber die Anzehl der Felder in x-Richtung, nicht der höchste Index.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz