- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
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
    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?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    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

  3. #3
    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

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    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.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Jo hast recht macht für mich einen Sinn dein Code. Ne exe von dem Spiel zu sehen wäre auch interessant

    Wie hast du in diesem Fall den toten Rand deklariert? In C würde ich das in einem Array vordefinieren z.B. Feld[0][0]=0;

    P.S.: erinnert mich irgendwie an Basic dieses Blitzplus

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    hab jetzt eine .exe aus dem Code erstellt und gepackt (siehe Anhang). Beenden mit ESC

    Zu dem toten Rand: Meine Matrix ist von Anfang an mit Nullen gefüllt. Ich lasse danach aber nicht alle Punkte durchgehen, sondern nur von 1 bis width-1 bzw. 1 bis height-1. Damit bleibt an jedem Rand 1 Position unbeachtet.
    Diese Punkte gelten schon als Nachbar, werden aber nie aktiv. Hat auch den Vorteil, dass ich keine ungültigen Lesezugriffe bekomme, wenn ich z.B. von einem Bit in Spalte 0 noch den linken Nachbar (das wäre -1) prüfen wollte, weil ich ja eh erst ab Spalte 1 einlese.

    Blitzplus ist ein Basic-Dialekt, die ursprüngliche Version hieß Blitzbasic und war für die Spieleprogrammierung gedacht. Die Weiterentwicklung von Blitzbasic war eben Blitzplus (mit GUI) und Blitz3D (3D halt). Das neueste heißt Blitzmax.

    Grüße, Bernhard
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Sieht cool aus dein Programm!

    ok ich habe das jetzt mal versucht umzuschreiben soweit noch keine Probleme mit den Schleifen und allem. Nun aber:

    Was stellen die Leerzeichen hier dar:
    Code:
    anz=anz+alt(a-1,b  )+               +alt(a+1,b   )
    Geändert von Torrentula (13.04.2011 um 17:08 Uhr)
    MfG Torrentula

Ä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