- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 18

Thema: Conway's Game of Life auf einem ATmega32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355

    Conway's Game of Life auf einem ATmega32

    Hallo ihr Programmier-Spezialisten!

    Ich möchte Conway's Game of Life auf einem ATmega32 zum laufen bekommen. Zuerst einmal: Was ist das?

    Conway's Game of Life ist eine Bevölkerungsimulation. Es gibt n-Zellen auf einem Feld das idealerweise unbegrenzt groß ist. Eine Zelle x hat immer 8 Nachbarn die sie umgeben. Eine Zelle kann sich nur in einem von zwei Stadien befinden: tot oder lebend. Welche Zellen im ersten Zyklus leben und welche nicht werden einfach festglegt.

    Das Spiel läuft weiterhin immer in Zyklen ab.

    Das Stadium in dem sich eine Zelle befindet wird durch das Befolgen von 4 Regeln bestimmt:

    1. Eine tote Zelle mit genau drei lebenden Nachbarn wird in der Folgegeneration (im nächsten Zyklus) neu geboren.

    2. Lebende Zellen mit weniger als zwei lebenden Nachbarn sterben in der Folgegeneration an Einsamkeit.

    3. Eine lebende Zelle mit zwei oder drei lebenden Nachbarn bleibt in der Folgegeneration lebend.

    4. Lebende Zellen mit mehr als drei lebenden Nachbarn sterben in der Folgegeneration an Überbevölkerung.

    So nun zu meinem Problem:

    Um das ganze ein wenig einzugrenzen möchte ich das "Spielfeld" 3*3 LEDs groß sein lassen. Damit nun aber die Bedingung erfüllt ist, dass jede Zelle 8 Nachbarn hat, kann man sich das auch wie eine 5*5 Matrix vorstellen. Die 9 LEDs befinden sich in der Mitte der 5*5 Matrix und die Felder (Zellen) außen herum befinden sich immer im Status "tot" (deshalb werden diese auch nicht mit LEDs dargestellt).

    Nun muss man natürlich für jede der 9 dargestellten Zellen alle 4 Regeln überprüfen. Ich habe mir das so gedacht, dass man die Zellen in einem Array darstellt und dann mit schleifen immer Zelle für Zelle durchlaufen lässt und dies dann am Ende mit den LEDs darstellt.

    Wie könnte das Programm aussehen, dass die Stadien der 9 dargestellten Zellen überprüft und die Stadien der Zellen dann eben entsprechend der Regeln auf den Status tot = 0 oder lebend = 1 setzt?

    Vielen Dank!

    Torrent
    MfG Torrentula

  2. #2
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.061
    Das Spiel lebt von unterschiedlichen Verteilungen und der Dynamik die sich daraus ergibt. Sieh Dir lieber vorher noch einmal Abläufe des Spiels an. Unter 80 x 50 ist es eigentlich kaum interessant eher so 320 x 240. Man kann die Fläche mit totem Rand oder als Toroid ausführen und von Zufallsverteilungen mit 0,5% - 5% lebender Zellen starten.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Ja in meinem Fall soll es eine Version mit totem Rand sein.

    Unter 80 x 50 ist es eigentlich kaum interessant
    Aber nur mal rein von dem Code her wie würde man so eine allgemeine Funktion schreiben?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    hab das gerade in Blitzplus (das wird wohl kaum einer kennen^^) programmiert und es läuft für ein 100x75-Feld. (Könnte auch eine exe daraus erzeugen falls erwünscht)
    Code:
    Graphics 400,300,16,2;Grafikauflösung
    SeedRnd MilliSecs();Zufallszahlen
    
    Const width=99
    Const height=74
    Dim bit(width,height) ;Bitfeld
    Dim alt(width,height) ;Backup
    
    ; ein paar Teilchen aussäen
    For c=0 To 500
        bit(Rand(1,width-1),Rand(1,height-1))=1
    Next
    
    ;Schleife
    Repeat
    
        Cls
    
        Color 255,255,255
        ;Alle Positionen durchgehen
        For a=1 To width-1
            For b=1 To height-1
                ;in andere Matrix kopieren
                alt(a,b)=bit(a,b)
                ;Nachbarn checken
                anz=0
                anz=anz+alt(a-1,b-1)+alt(a,b-1)+alt(a+1,b-1)    
                anz=anz+alt(a-1,b  )+          +alt(a+1,b  )    
                anz=anz+alt(a-1,b+1)+alt(a,b+1)+alt(a+1,b+1)
                ;Wiedergeburt
                If anz=3 And bit(a,b)=0 Then bit(a,b)=1
                ;Einsamkeit
                If anz<2 And bit(a,b)=1 Then bit(a,b)=0
                ;bleibt am Leben
                If (anz=2 Or anz=3)And bit(a,b)=1 Then bit(a,b)=1
                ;Überbevölkerung
                If anz>3 Then bit(a,b)=0
            Next
        Next    
    
        ;Anzeige
        For a=0 To width
            For b=0 To height
                If bit(a,b)=1 Then Rect 4*a,4*b,4,4
            Next
        Next
        
        Color 255,0,0
        Text 0,0,"Beenden mit ESC"
        
        ;Wartezeit
        Delay 100
        
        Flip
        
    Until KeyHit(1) ;ESC
    
    End
    Grüße, Bernhard

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Eigentlich meinte ich ein Programm in der Sprache C

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    das lässt sich leicht portieren Es geht ja erst mal nur um die prinzipielle Vorgehensweise.
    Ein Bitfeld erzeugen, zufällige Punkte setzen, Backup vom Bitfeld erzeugen, im Backup für jeden Punkt die Anzahl der aktiven Nachbarn bestimmen und dann die Aktion wählen (ins urspr. Bitfeld eintragen), anzeigen.

Ähnliche Themen

  1. Temperatur und DCF77 an einem ATMEGA32 ?
    Von infosystems im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 14.04.2011, 22:04
  2. Ersatz des atmega8 mit einem atmega32
    Von inka im Forum Asuro
    Antworten: 102
    Letzter Beitrag: 24.01.2008, 14:00
  3. Erste Schritte: Probleme mit einem ATmega32
    Von Bääääär im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 09.07.2007, 16:19
  4. Game Boy Kamera
    Von moud im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 20.04.2005, 18:52
  5. Game Boy Programmieren ?
    Von khazad im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 30.11.2004, 20:05

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test