Autor Beitrag
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: So 03.05.15 22:58 
@Delphi-Laie

Man sollte nie einen Satz aus dem Kontext nehmen.

_________________
Popov
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1577
Erhaltene Danke: 223


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 03.05.15 23:07 
user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
@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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 400
Erhaltene Danke: 93

Win 7
D6 Prof, XE2 Prof
BeitragVerfasst: Mi 06.05.15 23:22 
Ich wäre an der Version mit dem Memo interessiert.
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Quizmaster
Beiträge: 2608
Erhaltene Danke: 1386

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 06.05.15 23:28 
Ich habe auch eine Variante, in Turbo Pascal mit Textausgabe: :lol:
ausblenden volle Höhe Quelltext
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. :wink:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 400
Erhaltene Danke: 93

Win 7
D6 Prof, XE2 Prof
BeitragVerfasst: Mi 06.05.15 23:34 
Also Mathematiker...

an meine Version in Assembler damals auf dem C64 würde ich gerne noch hinweisen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10061
Erhaltene Danke: 1194

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.1
BeitragVerfasst: 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... :lupe: verdammt, ich find´s einfach nicht mehr... :motz: :eyes: 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... :angel:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10061
Erhaltene Danke: 1194

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.1
BeitragVerfasst: Do 07.05.15 00:13 
Moin!

user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
So langsam gehen mir die Ideen aus welche Version ich noch programmieren könne.
Boah, und ich dachte schon... :zwinker:

user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
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? :suspect: :schmoll:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Quizmaster
Beiträge: 2608
Erhaltene Danke: 1386

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 07.05.15 00:14 
Hallo,
ich kann es besser. Das schlägt keiner!
Eine Game of Life mit Menüeinträgen:

gol

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1577
Erhaltene Danke: 223


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Do 07.05.15 08:37 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe auch eine Variante, in Turbo Pascal mit Textausgabe: :lol:
ausblenden Quelltext
1:
Program gameoflife;					


Das soll funktioniert haben? Mußte nach meiner Erinnerung doch der interne Programmname gleich dem Dateinamen (vor dem Trennpunkt) sein, ansonsten wäre der Compiler doch gleich an der ersten Zeile stehengeblieben. Unter DOS waren maximal 8 Zeichen möglich, "gameoflife" hat derer aber 10. "gameoflife.pas" konnte es unter DOS demnach nicht geben.
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 455
Erhaltene Danke: 85

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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 :beer:

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 519
Erhaltene Danke: 212

W7
Delphi 6 pro
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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;{ zuletzt ge„ndert am 3.11.1989 }
 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(31END;
 PROCEDURE REVERSE;
  BEGIN TEXTBACKGROUND(7);TEXTCOLOR(0END;
 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;{ OF LOESCHEN_NF }
 PROCEDURE AUSGABE(VAR LEBEN:WORD);
  BEGIN
    ASM
             MOV BX,SCREEN
             MOV ES,BX
             MOV DI,OFFSET F
             XOR DX,DX  { LEBEN:=0 }
             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;{ OF AUSGABE }
 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>1AND (Y<NS-1THEN BEGIN DEC(X);INC(Y) END;
     PGDN   : IF (X<NZ-1AND (Y<NS-1THEN BEGIN INC(X);INC(Y) END;
     HOME   : IF (X>1AND (Y>1THEN BEGIN DEC(X);DEC(Y) END;
     ENDE   : IF (X<NZ-1AND (Y>1THEN 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  { SI = Zeiger auf ZAEHL im Codesegment }
           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;{ OF ZŽHLEN }
 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;{ OF BERECHNEN }
 BEGIN{ OF MAIN }
  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<10OR (NZ>23THEN 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<10OR (NS>80THEN OK:=FALSE
  UNTIL OK;
  GOTOXY(5,17);WRITE('Lifeversion : ');
  REPEAT
   OK:=TRUE;GOTOXY(34,17);MODUS:=2333;READWORD(MODUS,4);
   IF (MODUS<2222OR (MODUS>8888THEN OK:=FALSE
   ELSE
    BEGIN
     LOW_LEBEN:=MODUS DIV 1000;HIGH_LEBEN:=(MODUS DIV 100)MOD 10;
     LOW_GEBURT:=(MODUS DIV 10MOD 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<0OR (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); { WARTE;}
   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=0OR (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=9AND 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 :wink:
Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 694
Erhaltene Danke: 92



BeitragVerfasst: 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 :lol: .).
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Quizmaster
Beiträge: 2608
Erhaltene Danke: 1386

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 07.05.15 18:12 
Hallo,
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Ich rufe auf zum Wettbewerb :lol: .).

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1577
Erhaltene Danke: 223


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 08.05.15 07:57 
user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1562
Erhaltene Danke: 268


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 08.05.15 08:21 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
(13 Zeilen ohne Variablendeklaration - Ich rufe auf zum Wettbewerb :lol: .).

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 :wink:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1577
Erhaltene Danke: 223


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 08.05.15 08:29 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
(13 Zeilen ohne Variablendeklaration - Ich rufe auf zum Wettbewerb :lol: .).


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 694
Erhaltene Danke: 92



BeitragVerfasst: Fr 08.05.15 09:35 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:

Das ist nur dann einigermaßen sinnvoll, wenn es eine Restriktion gibt, so z.B. eine Anweisung / Zeile.
Das hatte ich mal ehrenhalber vorausgesetzt.

@user profile iconNersgatt:
Die einfachen Ideen sind immer die Besten! :D

ub60
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Fr 08.05.15 11:27 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
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