Eigentlich meinte ich ein Programm in der Sprache C![]()
Eigentlich meinte ich ein Programm in der Sprache C![]()
das lässt sich leicht portierenEs 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.
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
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
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
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
Mein Code sieht jetzt so aus:
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?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; }
Am besten wahrscheinlich einfach if-schleifen die abfragen, wann welches Feld an ist und dementsprechend die LEDs einschaltet...
MfG Torrentula
Lesezeichen