Ja in meinem Fall soll es eine Version mit totem Rand sein.
Aber nur mal rein von dem Code her wie würde man so eine allgemeine Funktion schreiben?Unter 80 x 50 ist es eigentlich kaum interessant
Ja in meinem Fall soll es eine Version mit totem Rand sein.
Aber nur mal rein von dem Code her wie würde man so eine allgemeine Funktion schreiben?Unter 80 x 50 ist es eigentlich kaum interessant
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)
Grüße, BernhardCode: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
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
Lesezeichen