Conway's Game of Life

    • Release
    • Closed Source

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Plexian.

      Conway's Game of Life

      Guten Morgen Community, ich hab mal einen kleinen Game of Life Simulator gebastelt.
      Vielleicht macht es ja jemandem genauso viel Spaß wie mir :)

      Name:
      Game of Life

      Beschreibung:
      Wer das Spiel nicht kennt, hier sind die Regeln: de.wikipedia.org/wiki/Conways_Spiel_des_Lebens
      Viele der Ideen für Settings habe ich aus folgender Seite: bitstorm.org/gameoflife/lexicon/

      Screenshot(s):




      Verwendete Programmiersprache(n) und IDE(s):
      Visual Basic Express 2015

      Download(s):
      game of Life.zip [13,72kB]

      Die Textfiles in der Zip lassen sich als Settings im Spiel laden.

      Lizenz/Weitergabe:
      Closed Source

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dr_Gre“ ()

      Sieht garnicht mal verkehrt aus. Funktioniert soweit, nur ekelig anzusehen ist das invalidaten der Form beim Klick. Musst du noch ein paar Performanceoptimierungen vornehmen, DoubleBuffered und so mal testen. Des Weiteren ist dein Speicherformat nicht schön. Was sollen die ganzen LineFeeds, einfach alle 0 und 1en in eine Zeile und feddich.
      Ich darf vllt dir raten, einen Blick in meine Signatur zu werfen ;)

      Ach, und deine Timer-Tick Methode interessiert mich mal, sah beim Decompilen merkwürdig aus :D
      »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
      Wenn man bei der InputBox von SetSpeed auf abbrechen drückt kriegt man folgende Fehlermeldung:

      Spoiler anzeigen
      Informationen über das Aufrufen von JIT-Debuggen
      anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

      ************** Ausnahmetext **************
      System.InvalidCastException: Ungültige Konvertierung von der Zeichenfolge in Typ Integer. ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
      bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
      bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
      --- Ende der internen Ausnahmestapelüberwachung ---
      bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
      bei Game_of_Life.Form1.SetSpeedToolStripMenuItem_Click(Object sender, EventArgs e)
      bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
      bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
      bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
      bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      bei System.Windows.Forms.Control.WndProc(Message& m)
      bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
      bei System.Windows.Forms.MenuStrip.WndProc(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


      Mfg
      Conway's Game Of Life Monogame Sample: 80%

      Conway's Game Of Life Monogame Sample
      @Plexian: ich habe 2 Timer:
      Timer 1 ist dazu da um das Feld beim initialisieren der Form1 zu zeichnen - es funktioniert in der Form1_Load schlecht bis nicht - darum ist da ein 100ms Timer der sich selbst deaktiviert nachdem er initial das Fled gezeichnet hat.

      Im richtigen Timer steht dann folgendes:
      picbox.Refresh()
      initialisieren des feldes (81*81 boolean array)
      überprüfen welche felder nexte generation aktiv sein werden
      diese felder anfärben

      Ich hoffe das beantwortet deine Frage.

      Das mit doubleBuffered möchte ich echt mal probieren - ich kannte das noch nicht.
      derzeit habe ich einfach eine picture box (picbox1)
      und die grafik erzeuge ich mit dim g as graphics = picbox1.createGraphic oder so ähnlich
      jeden Life cycle wird dann picbox.refresh() gemacht und die lebenden zellen mit g.draw_rectangle oder so ähnlich gezeichnet
      Ich würde anstatt picbox.refresh() zu benutzen, lieber picbox.invalidate() und diesem einen Rectangle mitgeben. Dadurch zeichnet er nur den Bereich neu, der mit der PictureBox mitgegeben wurde.
      Beispiel:

      VB.NET-Quellcode

      1. ​picbo.invalidate(New Rectangle(new point(0,0), new size(20,20))

      damit würde er nur die obere rechte Ecke im maß 20x20px neuzeichnen.

      Mfg.
      Conway's Game Of Life Monogame Sample: 80%

      Conway's Game Of Life Monogame Sample
      Danke für eure Anmerkungen!
      ich habe folgendes eingebaut:

      es wird nicht mehr das ganze feld redrawed sondern:
      picbox.Invalidate(New Rectangle(New Point(x * 10 + 1, y * 10 + 1), New Size(9, 9)))
      picbox.Update()

      setspeed ergibtkeine fehlermeldung mehr
      alles wird in einer zeile gespeichert und geladen.

      die aktualisierte Version findet sich in der neuen .zip file im ersten Beitrag
      Kann man sonst noch was verbessern?
      Das sieht schon mal besser aus. Vllt wäre es noch ganz nett wenn man Zellen schneller togglen kann, also MouseClick und dann bewegen, und dann werden alle markiert. Sowas halt.

      Wie gesagt, hab ja das gleiche mal programmiert, feel free to take a look. Hab ja sowohl Source Code und EXE bereitgestellt, und guck was du auch haben willst ;)
      »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais