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

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

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

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Die Leerzeichen haben keine Bedeutung, dient nur der Übersichtlichkeit.
    Ein logisches AND in C geht mit && (ja, zwei mal!) , das brauchst du hier

    Der Vollständigkeit halber:
    Bitweises AND geht mit & (nur eins) , das brauchst du hier aber nicht

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Mein Code sieht jetzt so aus:

    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    #include "rn-control.h"
    
    #define width 5         // Breite des Spielfelds
    #define height 5        // Höhe des Spielfelds
    
    int bit[width][height]; // Bitfeld
    int alt[width][height]; // Backup
    
    int main(void){
    
    //#######################Initialisierungen#######################
    
    // Deklarieren der Input/Output-Pins
    
    //###############################################################
    
    int a;
    int b;
    
    bit[2][2] == 1;
    
    while(1){
        for (a = 1; a <= (width-1); ++a){
            for (b = 1; b <= (height-1); ++b){
                // in andere Matrix kopieren
                alt[a][b] = bit[a][b];
    
                // Nachbarn Checken
    
                int 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];
    
                // Stadien bestimmen
    
                // Wiedergeburt
                       if (anz == 3){
                           if (bit[a][b] == 0){
                            bit[a][b] = 1;
                        }
                    }
                // Einsamkeit
                    if (anz < 2){
                        if(bit[a][b] == 1) {
                            bit[a][b] = 0;
                        }
                    }
    
                // bleibt am Leben
                    if (anz == 2){
                        if (bit[a][b] == 1){
                            bit[a][b] = 1;
                        }
                    }
    
                // bleibt am Leben
                    if (anz == 3){
                        if (bit[a][b] == 1){
                            bit[a][b] = 1;
                        }
                    }
    
                // Überbevölkerung
                    if (anz > 3){
                        bit[a][b] = 0;
                    }
    
    
            }
        }
    
        // Ausgebeben
    
        for (a = 0; a = width; ++a){
            for (b = 0; b = height; ++b){
                if ( bit[a][b] == 1){
    
                }
            }
        }
    
    }
        return 0;
    }
    Da müssen jetzt halt noch die Pindefinitionen rein. Wie kann ich das dann Ausgeben dass er mir auch die LED anschaltet, die im Spielfeld 1 ist?
    Am besten wahrscheinlich einfach if-schleifen die abfragen, wann welches Feld an ist und dementsprechend die LEDs einschaltet...
    MfG Torrentula

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Ein paar if-Abfragen dürften hier das einfachste sein.
    Die letzten zwei Schleifen passen nicht wegen a=width, das sollte eher a<=width oder a<width heißen, das wirst du aber bzgl. der Ausgabe sowieso in if umbauen.
    Noch etwas: Zu Beginn hast du nur die mittlere LED auf 1 gesetzt, die wird beim ersten Schritt einfach an Einsamkeit ausgehen Da musst du schon ein paar mehr setzen!

    Die Variablen a und b kannst du als unsigned char machen, das spart Speicherplatz.
    Bei den Bitfeldern könnte eventuell bool[width][height] klappen.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Au stimmt

    Vielen Dank!
    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