![]() |
Re: Spiel des Lebens
Bevor ich mich an die Rechnung der nächsten Generation mache muss ich zunächst einmal ein anderes problem lösen!!!
Bei unserem Programm kann man ja per Button das Spielfeld in der Höhe und Breite verändern! Nun soll das StringGrid (Spielfeld) die Felder die Belegt sind aber ausserhalb des Spielfeldes liegen deaktiviert (also 'nicht besetzt') werden! Z.B. [ ] [ ] [ ] [ ] [ ] [ ] [ ] [#] [ ] [ ] [ ] [#] [ ] [#] [ ] ---> Sichtbarer bereich ( 5x5 ) [ ] [ ] [#] [ ] [ ] [ ] [ ] [ ] [ ] [ ] Und dann das Spielfeld verkleinert wird..... [ ] [ ] [ ] [ ] [ ] [ ] [ ] [#] [ ] [ ] ---> Sichtbarer bereich ( 5x3 ) [ ] [#] [ ] [#] [ ] [ ] [ ] [#] [ ] [ ] --------------------------- [ ] [ ] [ ] [ ] [ ] ---> Nicht Sichtbar Wie könnte man das ganze umsetzen?? Das Programm ist in 4 Units aufgeteilt. Eine für die Typen, eine für die Spielfeldvarianten,die HauptUnit mit dem Formular und dem StringGrid und eine Unit die die Spiellogik enthält( also das Array(boolean) ist dort deklariert)! Wie könnte man das ganze Programmieren sodass, wenn in der Spiellogik Unit ein Feld belegt ist aber ausserhalb des Sichtbaren Bereiches des StringGrids liegt(HauptUnit) das Feld im Stringgrid nicht besetzt wird??? Hauptunit uses Spiellogik. Spiellogik hat keinen Zugriff auf Hauptunit Versteht ihr mein Problem?? *THX* |
Re: Spiel des Lebens
Problem hat sich gelöst!!!!
So nun zur Berechnung der Nächsten Generation! Wenn mann die ganze Rechnung mit den (x+1,x-1,y+1,y-1) aufbauen würde so hätten wir aber das Problem mit einem Feld das am Rand liegt bei dem es dann kein x+1 oder y+1 analog x-1 oder y-1 gibt, würde man ja ein Range Check Error bekommen da man Operationen ausserhalb des Arrays durchführen möchte! Hätte einer von euch eine Lösung für diese Problem??? *THX* |
Re: Spiel des Lebens
Zitat:
Thread-Beitrag #9 ! |
Re: Spiel des Lebens
Ja den hab ich gelesen!
Sry hab vergessen zu erwähnen das wir ein springen eines Steines nicht Programmieren müssen! Also die Steinchen springennicht vom Ende zum Anfang! |
Re: Spiel des Lebens
Zitat:
![]() Zitat:
Möchte man dies nicht, dann muss man doch nur in der Function FnkNachbarn prüfen, ob X und Y noch auf dem Spielfeld sind:
Delphi-Quellcode:
Function FnkNachbarn(i,j:integer):integer;
function IstBelegt(x,y:integer):boolean; begin result := (x>=MIN_X) and (x<=MAX_X) and (y>=MIN_Y) and (y<=MAX_Y) and curGen[x,y]; end; var Nachbarn :integer; Begin Nachbarn:= 0; if IstBelegt(i,j+1) then //unten Nachbarn:= Nachbarn + 1; ... |
Re: Spiel des Lebens
Hi!!
Ich hab noch eine Frage zur genauen Berechnung der Nächsten Generation! Wann passiert bei wievielen Nachbarn was?? Wir haben eine kleine case Anweisung geschrieben die aber irgendwie Fehlerhaft sein muss, kann da mal jemand rüber schauen??
Code:
*THX*
for i := (low(UTypes.cMaxWidth)+1) to UTypes.cMaxWidth do
Begin for j := (low(UTypes.cMaxHeight)+1) to UTypes.cMaxHeight do Begin FeldNachbarn := Nachbarn(i,j); case FeldNachbarn of 0..1: curGen[i,j] := false; //weniger als Zwei Nachbarn 3: curGen[i,j] := true; //Zelle mit drei Nachbarn --> NeuGeboren 2: curGen[i,j] := curgen[i,j];// Nix tun 4..8: curGen[i,j] := false; end; end; end; |
Re: Spiel des Lebens
Deine Schleifenanfangswerte sind sehr suspekt: (low(UTypes.cMaxWidth)+1) sieht für mich falsch aus.
Du brauchst doch ZWEI Arrays: curGen[] und newGen[]. Ich sehr hier nur curGen[]. Das ist auf jeden Fall der Hauptfehler. |
Re: Spiel des Lebens
Zitat:
|
Re: Spiel des Lebens
Zitat:
Delphi-Quellcode:
2: curGen[i,j] := curgen[i,j];// Nix tun
// dann müsste es aber so sein 2: curGen[i,j] := OldGen[i,j];// Lebewesen kopieren |
Re: Spiel des Lebens
Hallo,
meinst Du so was: ![]() bei ![]() Ein Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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