Autor |
Beitrag |
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: So 03.05.15 22:58
@Delphi-Laie
Man sollte nie einen Satz aus dem Kontext nehmen.
_________________ Popov
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 03.05.15 23:07
Popov hat folgendes geschrieben : | @Delphi-Laie
Man sollte nie einen Satz aus dem Kontext nehmen. |
Einen Kontext gab es nicht. Ich zitierte den ersten der beiden Sätze, den m.E. wichtigeren Satz nur, weil er Deiner Behauptung widerspricht. Solche unredlichen Mogeleien liegen mir fern. Über die (Un)Eignung von Shapes zu Lösung der Aufgabe kann ich mich nicht äußern, ich kannte diese zuvor nicht mal. Dir die alternative Hilfestellung in Ninis Diskussion in der Weise zu verwehren, daß Dein Beitrag und Deine Programmveröffentlichung dort hierher verbannt wurden, empfand ich allerdings auch nicht als die feine englische Art, das ist nicht Sinn eines Diskussionsforums.
|
|
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 06.05.15 23:13
Sorry, konnte mich nicht zurückhalten. Hab noch schnell ein Game of Life mit SpeedButtons programmiert. Wollte es zuerst mit ComboBoxen machen, aber die nehmen zu viel Platz weg.
Zitat: | Einen Kontext gab es nicht. Ich zitierte den ersten der beiden Sätze, den m.E. wichtigeren Satz nur, weil er Deiner Behauptung widerspricht. |
Evtl. hast du mich falsch verstanden. Ist aber inzwischen egal.
Einloggen, um Attachments anzusehen!
_________________ Popov
|
|
mandras
Beiträge: 430
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Mi 06.05.15 23:22
Ich wäre an der Version mit dem Memo interessiert.
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 06.05.15 23:28
Ich habe auch eine Variante, in Turbo Pascal mit Textausgabe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| Program gameoflife; uses crt; var feld1,feld2 : array[0..21,0..21] of boolean; i,j:integer; taste:char;
procedure anfangswerte; begin for i:=0 to 21 do for j:=0 to 21 do begin feld1[i,j]:=false; feld2[i,j]:=false; end; {Ausgangssituation Fünfer-Gruppe} feld1[5,5]:=true; feld1[6,5]:=true; feld1[6,6]:=true; feld1[7,6]:=true; feld1[6,7]:=true; end;
procedure anzeige; begin for i:=1 to 20 do for j:=1 to 20 do begin gotoxy(i+30,j); if feld1[i,j]=true then write('*') else write(' '); end; end;
procedure neuegeneration; var nachbarn:integer; begin feld2:=feld1; for i:=1 to 20 do for j:=1 to 20 do begin nachbarn:=0; if feld2[i-1,j-1]=true then nachbarn:=nachbarn+1; if feld2[i,j-1]=true then nachbarn:=nachbarn+1; if feld2[i+1,j-1]=true then nachbarn:=nachbarn+1; if feld2[i-1,j]=true then nachbarn:=nachbarn+1; if feld2[i+1,j]=true then nachbarn:=nachbarn+1; if feld2[i,j+1]=true then nachbarn:=nachbarn+1; if feld2[i-1,j+1]=true then nachbarn:=nachbarn+1; if feld2[i+1,j+1]=true then nachbarn:=nachbarn+1; if nachbarn<2 then feld1[i,j]:=false; if nachbarn>3 then feld1[i,j]:=false; if nachbarn=3 then feld1[i,j]:=true; end; end;
begin clrscr; anfangswerte; repeat anzeige; repeat taste:=readkey; until taste in ['e',' ']; {Taste ‚e’ für Abbruch, Leertaste … neue Generation} neuegeneration; until taste='e'; end. |
Kann man bestimmt noch optimieren.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
mandras
Beiträge: 430
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Mi 06.05.15 23:34
Also Mathematiker...
an meine Version in Assembler damals auf dem C64 würde ich gerne noch hinweisen!
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 06.05.15 23:49
Moin! ich wollte zwar heute nix mehr schreiben, aber was soll´s - ist eh ein Insider-Joke *g*
Ich suche jetzt schon seit bestimmt 2 Tagen nach dem Silberpapier-Thermodrucker-Fetzen, auf dem meine ZX81-Version von damals steht... verdammt, ich find´s einfach nicht mehr... wenn das Ding noch auftaucht, scanne ich das ein und lade das hoch, das muss man einfach gesehen haben... Sinclair-Basic... das waren noch Zeiten...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Do 07.05.15 00:09
So langsam gehen mir die Ideen aus welche Version ich noch programmieren könne. Ich glaube ich programmiere als nächstes ein Game of Life mit TForm-Fenstern. Mal sehen ob das System 800 Fenster aushält.
_________________ Popov
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 07.05.15 00:13
Moin!
Popov hat folgendes geschrieben : | So langsam gehen mir die Ideen aus welche Version ich noch programmieren könne. |
Boah, und ich dachte schon...
Popov hat folgendes geschrieben : | Ich glaube ich programmiere als nächstes ein Game of Life mit TForm-Fenstern. Mal sehen ob das System 800 Fenster aushält. |
Man man man, auf das Naheliegendste ("einfacher Ansatz", du erinnerst dich sicher) kommst du erst jetzt?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 07.05.15 00:14
Hallo,
ich kann es besser. Das schlägt keiner!
Eine Game of Life mit Menüeinträgen:
Mathematiker
Einloggen, um Attachments anzusehen!
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Für diesen Beitrag haben gedankt: Narses
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Do 07.05.15 08:37
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Do 07.05.15 10:39
Ähm... Wurde der Dateiname nicht ohnehin vom DOS einfach kommentarlos gekappt ? Ergo ist "gameofli" übriggeblieben, ohne das es jemand merkt.
Ehrlich, die ZX81-Version würde mich brennend interessieren. Wäre doch mal cool, meinem hier stehenden ZX81 mal wieder was zu tun zu geben
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Fiete
Beiträge: 611
Erhaltene Danke: 347
W7
Delphi 6 pro
|
Verfasst: Do 07.05.15 12:53
Moin,
es ist schon lange her, auf einem TI 59 und PET 2001 liefen meine ersten Versionen
Die DOS-Version mit Assembler Anno 1989:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257:
| {$R+,G+} PROGRAM GAME_OF_LIFE_NACH_ARTHUR_CONWAY; USES CRT,READEXT; CONST ZE=25;SP=82;ZEICHEN:ARRAY[FALSE..TRUE]OF CHAR=('.','*'); TYPE FELD=ARRAY[1..ZE,1..SP]OF BOOLEAN; VAR F,NF:FELD; RUNTER,RECHTS,MZ,MS,NZ,NS,ZEILE,SPALTE:BYTE; LOW_LEBEN,HIGH_LEBEN,LOW_GEBURT,HIGH_GEBURT,OZZI:BYTE; ANZAHL,MODUS,GZ,LEBENDIG,A,G:WORD; TASTE:CHAR; OK,ABBRUCH,GLEICH:BOOLEAN; SCREEN:WORD; FUNCTION HERC_CARD:BOOLEAN; VAR KARTE:BYTE ABSOLUTE $40:$49; BEGIN HERC_CARD:=KARTE=7 END; PROCEDURE BLINK; BEGIN TEXTBACKGROUND(0);TEXTCOLOR(31) END; PROCEDURE REVERSE; BEGIN TEXTBACKGROUND(7);TEXTCOLOR(0) END; PROCEDURE NORMAL; BEGIN NORMVIDEO;TEXTCOLOR(YELLOW);TEXTBACKGROUND(BLACK) END; PROCEDURE RAND; VAR Z,S:BYTE; BEGIN FOR S:=2 TO NS DO BEGIN F[MZ,S]:=F[2,S];F[1,S]:=F[NZ,S] END; FOR Z:=2 TO NZ DO BEGIN F[Z,MS]:=F[Z,2];F[Z,1]:=F[Z,NS] END; END; PROCEDURE LOESCHEN_NF; VAR Z,S:BYTE; BEGIN FOR Z:=1 TO MZ DO FOR S:=1 TO MS DO NF[Z,S]:=FALSE; END; PROCEDURE AUSGABE(VAR LEBEN:WORD); BEGIN ASM MOV BX,SCREEN MOV ES,BX MOV DI,OFFSET F XOR DX,DX XOR BX,BX MOV BL,RECHTS ADD BL,BL MOV AL,RUNTER MOV CL,160 MUL CL ADD AX,BX XCHG AX,BX ADD DI,83 MOV CL,NZ DEC CL @FOR_Z: PUSH BX PUSH DI MOV AH,14 MOV CH,NS DEC CH @FOR_S: MOV AL,[DI] CMP AL,1 JNE @UNTEN INC DX MOV AL,'*' JMP @AUSGB @UNTEN: MOV AL,'.' @AUSGB: MOV ES:[BX],AL INC BX MOV ES:[BX],AH INC BX INC DI DEC CH JNE @FOR_S POP DI POP BX ADD BX,160 ADD DI,82 DEC CL JNE @FOR_Z LDS DI,LEBEN MOV [DI],DX END END; PROCEDURE EINGABE; CONST HOCH=#72;CRUNTER=#80;LINKS=#75;CRECHTS=#77; PGUP=#73;PGDN=#81;HOME=#71;ENDE=#79;ENTER=#13; VAR Z:CHAR; X,Y:BYTE; BEGIN CLRSCR;AUSGABE(LEBENDIG);X:=NZ DIV 2;Y:=NS DIV 2; REPEAT GOTOXY(Y+RECHTS,X+RUNTER); Z:=READKEY; IF Z=#0 THEN IF KEYPRESSED THEN Z:=READKEY; CASE Z OF HOCH : IF X=1 THEN X:=NZ-1 ELSE DEC(X); CRUNTER: IF X=NZ-1 THEN X:=1 ELSE INC(X); LINKS : IF Y=1 THEN Y:=NS-1 ELSE DEC(Y); CRECHTS: IF Y=NS-1 THEN Y:=1 ELSE INC(Y); PGUP : IF (X>1) AND (Y<NS-1) THEN BEGIN DEC(X);INC(Y) END; PGDN : IF (X<NZ-1) AND (Y<NS-1) THEN BEGIN INC(X);INC(Y) END; HOME : IF (X>1) AND (Y>1) THEN BEGIN DEC(X);DEC(Y) END; ENDE : IF (X<NZ-1) AND (Y>1) THEN BEGIN INC(X);DEC(Y) END; ENTER : BEGIN F[X+1,Y+1]:=NOT F[X+1,Y+1];WRITE(ZEICHEN[F[X+1,Y+1]]) END END UNTIL Z=#27; AUSGABE(LEBENDIG) END; PROCEDURE ZAEHLEN(Z,S:BYTE;VAR A:BYTE); BEGIN ASM MOV DI,OFFSET F MOV SI,OFFSET @ZAEHL MOV AL,Z DEC AL DEC AL MOV BL,82 MUL BL MOV BL,S DEC BL DEC BL XOR BH,BH ADD AX,BX ADD DI,AX MOV CX,8 XOR AL,AL @FOR_Z: MOV BL,CS:[SI] MOV AH,[DI+BX] ADD AL,AH INC SI LOOP @FOR_Z JMP @ENDE @ZAEHL: DB 0,1,2,82,84,164,165,166 @ENDE: LES BX,A MOV ES:[BX],AL END END; PROCEDURE WARTE; VAR C:CHAR; BEGIN REPEAT C:=READKEY UNTIL C=' ' END;
PROCEDURE BERECHNEN; VAR L,Z,S:BYTE; BEGIN GLEICH:=TRUE; FOR Z:=2 TO NZ DO FOR S:=2 TO NS DO BEGIN ZAEHLEN(Z,S,L); IF F[Z,S] THEN NF[Z,S]:=(L>=LOW_LEBEN) AND (L<=HIGH_LEBEN) ELSE NF[Z,S]:=(L>=LOW_GEBURT) AND (L<=HIGH_GEBURT); GLEICH:=GLEICH AND (F[Z,S]=NF[Z,S]); END END; BEGIN RANDOMIZE;CLRSCR; IF HERC_CARD THEN SCREEN:=$B000 ELSE SCREEN:=$B800; BLINK;WRITE('Game of Life nach Arthur Conway (Life 2333)':60);NORMAL;WRITELN; WRITELN('Dieses Programm simuliert primitive Lebensvorg„nge. Gegeben ist'); WRITELN('ein rechteckiger Lebensraum. Jedes Feld dieses Lebensraumes kann'); WRITE('von einem ');REVERSE;WRITE('lebendem');NORMAL; WRITELN(' Individuum besetzt sein oder nicht. Alle Felder'); WRITE('des Lebensraumes werden ');REVERSE;WRITE('gleichzeitig');NORMAL; WRITELN(' nach folgenden Regeln ver„ndert :');WRITELN; WRITE('1. Ein Lebewesen ');REVERSE;WRITE('berlebt');NORMAL; WRITELN(', wenn auf den 8 Nachbarfeldern zusammen'); WRITELN(' mindestens 2 oder h”chstens 3 Lebewesen existieren.'); WRITE('2. Ein Lebewesen ');REVERSE;WRITE('stirbt');NORMAL; WRITELN(', wenn auf den 8 Nachbarfeldern zusammen'); WRITELN(' weniger als 2 Lebewesen existieren (sterben an Isolierung)'); WRITELN(' oder mehr als 3 Lebewesen existieren (sterben an šberbev”lkerung.)'); WRITE('3. Ein Lebewesen wird auf ein leeres Feld '); REVERSE;WRITE('geboren');NORMAL;WRITELN(', wenn auf den'); WRITELN(' 8 Nachbarfeldern zusammen genau 3 Lebewesen existieren.'); GOTOXY(5,15);WRITE('Anzahl der Zeilen (10-23) : '); REPEAT OK:=TRUE;GOTOXY(32,15);NZ:=0;READBYTE(NZ,3); IF (NZ<10) OR (NZ>23) THEN OK:=FALSE UNTIL OK; INC(NZ);MZ:=NZ+1; GOTOXY(5,16);WRITE('Anzahl der Spalten (10-80) : '); REPEAT OK:=TRUE;GOTOXY(32,16);NS:=0;READBYTE(NS,3); IF (NS<10) OR (NS>80) THEN OK:=FALSE UNTIL OK; GOTOXY(5,17);WRITE('Lifeversion : '); REPEAT OK:=TRUE;GOTOXY(34,17);MODUS:=2333;READWORD(MODUS,4); IF (MODUS<2222) OR (MODUS>8888) THEN OK:=FALSE ELSE BEGIN LOW_LEBEN:=MODUS DIV 1000;HIGH_LEBEN:=(MODUS DIV 100)MOD 10; LOW_GEBURT:=(MODUS DIV 10) MOD 10;HIGH_GEBURT:=MODUS MOD 10; IF LOW_LEBEN>HIGH_LEBEN THEN OK:=FALSE; IF LOW_GEBURT>HIGH_GEBURT THEN OK:=FALSE; IF LOW_GEBURT=0 THEN OK:=FALSE END UNTIL OK; INC(NS);MS:=NS+1;LOESCHEN_NF;F:=NF; RUNTER:=(ZE-1-NZ) DIV 2;RECHTS:=(SP-1-NS) DIV 2; GOTOXY(5,19);WRITE('Lebewesen eingeben (J/N) ? '); REPEAT TASTE:=UPCASE(READKEY) UNTIL TASTE IN['J','N'];WRITELN(TASTE); IF TASTE='N' THEN BEGIN A:=0; GOTOXY(5,21);WRITE('Anzahl der Lebewesen (0-',(NS-1)*(NZ-1),') : '); REPEAT OK:=TRUE;GOTOXY(39,21);READWORD(A,4); IF (A<0) OR (A>(NS-1)*(NZ-1)) THEN BEGIN OK:=FALSE;A:=0 END UNTIL OK; GOTOXY(20,23);BLINK;WRITE('Ich');NORMAL;WRITE(' '); REVERSE;WRITE('rechne');NORMAL;WRITE(', bitte warten !'); FOR G:=1 TO A DO BEGIN REPEAT ZEILE:=RANDOM(NZ-1)+2;SPALTE:=RANDOM(NS-1)+2; UNTIL (ZEILE IN[2..NZ]) AND (SPALTE IN[2..NS]) AND NOT F[ZEILE,SPALTE]; F[ZEILE,SPALTE]:=TRUE END;CLRSCR;AUSGABE(LEBENDIG) END ELSE BEGIN GOTOXY(10,21);WRITE('Lebewesen setzen oder l”schen mit <ENTER>.'); GOTOXY(10,22);WRITE('Das Eingeben wird mit <ESC> verlassen.'); GOTOXY(25,24);WRITE('Weiter mit der Leertaste !'); REPEAT TASTE:=READKEY UNTIL TASTE=' '; EINGABE END; GZ:=0;ABBRUCH:=FALSE;LEBENDIG:=0;OZZI:=0;RAND; REPEAT ANZAHL:=LEBENDIG;BERECHNEN;F:=NF;RAND; AUSGABE(LEBENDIG);INC(GZ); IF ANZAHL=LEBENDIG THEN INC(OZZI); GOTOXY(20,MZ+RUNTER);CLREOL; WRITE(GZ:3,'-te Generation ',LEBENDIG,' Lebewesen !'); IF KEYPRESSED THEN ABBRUCH:=TRUE UNTIL ABBRUCH OR GLEICH OR (LEBENDIG=0) OR (OZZI=9); GOTOXY(1,MZ+RUNTER);CLREOL; IF LEBENDIG=0 THEN BEGIN GOTOXY(20,MZ+RUNTER); WRITE('Nach der ',GZ,'-ten Generation ausgestorben !') END; IF (OZZI=9) AND NOT GLEICH THEN BEGIN GOTOXY(20,MZ+RUNTER); WRITE('Nach der ',GZ,'-ten Generation ozzilierend unver„ndert!') END; IF GLEICH THEN BEGIN GOTOXY(17,MZ+RUNTER); WRITE('Nach der ',GZ,'-ten Generation unver„ndert geblieben!') END; IF ABBRUCH THEN BEGIN GOTOXY(23,MZ+RUNTER); WRITE('Abbruch nach der ',GZ,'-ten Generation!') END; REPEAT TASTE:=READKEY UNTIL TASTE=#27 END. |
Die C64-Version muss noch im Keller liegen
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Do 07.05.15 17:37
Zuerst einmal möchte ich sagen, dass ich erfreut bin, dass sich der Ton hier wieder in gemäßigten Bahnen bewegt.
Außerdem bin ich besonders erfreut über die "just for fun"-Game of Live-Varianten.
Da ich am Anfang des GoL-Threads Nini meine Hilfe bezüglich ihrer StringGrid-Idee angeboten hatte, möchte ich diese Idee (nur die Ansteuerung des Grids, nicht das komplette Spiel) hier auch noch einmal kurz vorstellen, da ich der Meinung bin, dass man das nicht viel kürzer hinbekommt (13 Zeilen ohne Variablendeklaration - Ich rufe auf zum Wettbewerb .).
Dabei werden allerdings die kompletten Daten direkt in der StringGrid-Eigenschaft Cells gespeichert, was natürlich Software-technisch ein "Verbrechen" ist.
ub60
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker, Narses
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 07.05.15 18:12
Hallo,
ub60 hat folgendes geschrieben : | Ich rufe auf zum Wettbewerb .). |
Bin dabei. Während mein Versuch mit den Menüeinträgen ein 5Minuten-Programm nach Mitternacht(!) war, d.h. also ziemlicher Unfug mit Fehlern im Text, habe ich jetzt eine weitere Lösung.
Dieses Mal nehme ich eine Checklistbox. Hier kann man sogar mit der Maus eine Startsituation anklicken.
Viel Spaß beim Testen.
Mathematiker
Nachtrag: In der Revision 1 kann man wahlweise auf eine Torus-Spielfläche schalten.
Einloggen, um Attachments anzusehen!
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Fr 08.05.15 07:57
Popov hat folgendes geschrieben : | So langsam gehen mir die Ideen aus welche Version ich noch programmieren könne. Ich glaube ich programmiere als nächstes ein Game of Life mit TForm-Fenstern. Mal sehen ob das System 800 Fenster aushält. |
Probieren wir es aus, lieber Popov, wenn auch nicht mit dem Game of Life, sondern mit etwas simpleren.
Das angehängte (Delphi-2-)Programm ist mein erfolgreiches Experiment, ein Programm zu schreiben, daß sich selbst anhand eines sichtbaren Elementes, eines Formulares, vollständig fortpflanzt und auf diese Weise vervielfältigt, also inkl. seinem Fortpflanzungs-/Vermehrungsverhalten. Ein solches Verhalten beherrscht ja leider nicht nur etliche Schadsoftware, sondern ist auch eine Voraussetzung für dauerhaftes Leben, aber auch für eine evtl. sich selbst verselbständigende technische Evolution ("Machtübernahme der Roboter"). John von Neumann bewies, daß ein solches Verhalten prinzipiell immer für die Information oder beliebige Systeme möglich ist, sofern eine "gewisse", hinreichend große Komplexität erreicht wird. Nun, diese Komplexität scheint nicht immer gar so groß sein zu müssen.
Was auf dem Bildschirm als farbige Pixel daherkommt (ich wählte derer Größe 2*2, damit sie besser zu sehen sind), sind in Wirklichkeit Mikroformulare (Formulare sind "nackte" Fenster). Nur das Startformular hat eine bedienbare Größe und zeigt auch die aktuelle Anzahl der Formulare an. Es sind demnach deutlich mehr als nur ein paar hundert möglich.
Das Timerintervall beträgt random(1000). Interessant ist auch, daß das Wachstum der Formularanzahl exponentiell ist, was anfangs auch spürbar ist, Windows jedoch sehr schnell damit überfordert ist und das ganze sich dann sogar selbst behindert und verlangsamt.
Von sich aus beenden läßt sich das Programm durch Schließen des Hauptformulares. Auch damit hat Windows ordentlich zu tun, wenn es recht viele Formulare sind, die alle daraufhin zerstört sein wollen, s. auch im Taskmanager das langsame Programmsterben.
Eine ähnliche interessante - und lösbare - Aufgabe ist übrigens, ein Programm seinen eigenen Quelltext komplett ausgeben zu lassen.
Dieser Selbstbezug ist übrigens das zentrale Denken, ja geradezu das Lebenswerk Douglas Hofstadters.
Ergänzung: Den Nachweis, daß viele Formulare generiert werden können, hätte ich auch ohne diese Programmselbstvervielfältigung zeigen können (das eine hat mit dem anderen im Grunde nichts zu tun), nur hatte ich dieses Program gerade zur Hand.
Ergänzung 2: Spätestens nach wenigen tausend Formularen ist allerdings Schluß, das Programm beendet sich daraufhin (oder wird von Windows beendet?).
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Delphi-Laie am Fr 08.05.15 18:23, insgesamt 9-mal bearbeitet
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 08.05.15 08:21
ub60 hat folgendes geschrieben : | (13 Zeilen ohne Variablendeklaration - Ich rufe auf zum Wettbewerb .). |
Wenn Du nur Zeilen sparen willst, dann geht da noch was.
Ich hab mir die Initialisierung mit '0' gespart und ausgenutzt, dass im Stringgrid immer erst '' drin steht. 3 Zeilen gespart.
Und dann hab ich die Vorberechnung von Zeile und Spalte rausgenommen. Dadurch wird der Code natürlich deutlich hässlicher, aber es ging ja ums Zeilen sparen
Einloggen, um Attachments anzusehen!
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: ub60
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Fr 08.05.15 08:29
ub60 hat folgendes geschrieben : | Zuerst einmal möchte ich sagen, dass ich erfreut bin, dass sich der Ton hier wieder in gemäßigten Bahnen bewegt. |
Das beeinträchtigt allerdings den Unterhaltungwert.
ub60 hat folgendes geschrieben : | (13 Zeilen ohne Variablendeklaration - Ich rufe auf zum Wettbewerb .). |
Das ist nur dann einigermaßen sinnvoll, wenn es eine Restriktion gibt, so z.B. eine Anweisung / Zeile.
Viele (?) Programmiersprachen, so auch Pascal und Delphi erlauben ja die Komprimierung des Codes in Form mehrerer Anweisungen pro Zeile.
Deshalb bin ich auch immer wieder "amüsiert" über die Pressemitteilungen, wenn sich z.B. Winzigweich so sehr damit brüstet, wieviele hundert Millionen Codezeilen im neuen, ach so tollen Windows mal wieder hinzugekommen sind. Man kann den Code nämlich auch "strecken".
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Fr 08.05.15 09:35
Delphi-Laie hat folgendes geschrieben : |
Das ist nur dann einigermaßen sinnvoll, wenn es eine Restriktion gibt, so z.B. eine Anweisung / Zeile.
|
Das hatte ich mal ehrenhalber vorausgesetzt.
@ Nersgatt:
Die einfachen Ideen sind immer die Besten!
ub60
|
|
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Fr 08.05.15 11:27
Delphi-Laie hat folgendes geschrieben : | Probieren wir es aus, lieber popov |
Dein Wunsch ist mir Befehl. Hier Game of Life mit Dialogfenstern.
Kurzanleitung: Programm starten, Dialogfenster bauen sich auf. Mit Mausklick auf die einzelnen Dialogfenster kann man die Farbe des Fensters setzten. Mit dem Main-Formular dann den Ablauf starten.
Einloggen, um Attachments anzusehen!
_________________ Popov
|
|
|