Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Spiel des Lebens (https://www.delphipraxis.net/91603-spiel-des-lebens.html)

Stillmatic 7. Mai 2007 16:30


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*

sakura 7. Mai 2007 16:38

Re: Spiel des Lebens
 
Zitat:

Zitat von Stillmatic
Schreibt mir eine PN wenn ich mir helfen wollt!

Oder doch bitte direkt hier, eventuell hilft es auch mal anderen und das ist die Idee eines Forums!

...:cat:...

DP-Maintenance 7. Mai 2007 16:39

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist keine Multimediafrage im Sinne der Sparte ;)

Stillmatic 7. Mai 2007 18:42

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???

shmia 7. Mai 2007 18:53

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.

Stillmatic 7. Mai 2007 18:59

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???

track 7. Mai 2007 19:23

Re: Spiel des Lebens
 
na du musst einfach die achn nachbarn ansprechen!

x, y; x+1,y, x+1, y+1

uns so weiter:)

Stillmatic 7. Mai 2007 19:29

Re: Spiel des Lebens
 
Das hab ich so umgesetzt

Delphi-Quellcode:
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 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!
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)???

shmia 8. Mai 2007 09:54

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 := ...

Sidorion 8. Mai 2007 10:45

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 00:16 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz