/*-M*/;/*-I*/;/*-L*/;S=8000; /* Roulette-Simulation (c) 6.12.92 - KIO ! Angriff auf die Transversalen .... die Erste ! */ MODULE R; SYSTEM; A1; RDAT: LD/5,0/.RDAT (NE) <->; PROBLEM; TYPE FIX FIXED, LONG FIXED(31); SPC (A1,RDAT) DATION INOUT ALPHIC CONTROL(ALL); SPC RANF ENTRY RETURNS(FLOAT) GLOBAL; DCL (S1,S2) FIXED(31); DCL (TRUE,FALSE) INV BIT INIT('1'B,'0'B); /* ------------------------------------------------------------------ */ /* Gespielt wird auf alle 6-6er Kombinationen der Transversalen (ca 900) Für jede dieser einfachen Chancen wird 1-2-4 progressiert (wählbar) Start je Linie nach Wechsel nach ≥4er Serie. Gespielt wird auf den ungewechselten, alten Wert. Wegen Spiegelbildlichkeit von 450 zu 450 der möglichen Linien, wird je Linie nur auf 4er Serie Gewinnspiele getestet. Einsatzstart nach Initierung durch erstes Verlustspiel nach 4er Serie Gewinnspiele. Gespielt wird natürlich auf das, was in den Augen dieser Linie "Gewinnspiele" sind. */ DCL LINIE(1000) BIT(12); /* SETZKOMBINATIONEN DER LINIEN */ DCL LINES FIX; DCL STATUS(1000) FIX; /* STATUS JE LINIE 0 = WARTEN AUF STARTKRITERIUM (LETZTES SPIEL: FEHLZÜNDUNG) -1 = WARTEN AUF STARTKRITERIUM (LETZTE SPIELE: 1ER SERIE) -2 = WARTEN AUF STARTKRITERIUM (LETZTE SPIELE: 2ER SERIE) -3 = WARTEN AUF STARTKRITERIUM */;/* (LETZTE SPIELE: 3ER SERIE) -4 = WARTEN AUF STARTKRITERIUM (LETZTE SPIELE: ≥4ER SERIE) 1 = STARTKRITERIUM ERFÜLLT! (LETZTES SPIEL: ZÜNDUNG) GESETZT: 1 2 = GESETZT: 2 4 = GESETZT: 4 */ /* STATISTIKEN JE DURCHGANG */ DCL (ZAHL, /* GEFALLENE ZAHL */ ZERO, /* ANZ. LINIEN IN WARTESTELLUNG */ ONE, /* ANZ. LINIEN MIT EINSATZ = 1 */ TWO, /* ANZ. LINIEN MIT EINSATZ = 2 */ FOUR, /* ANZ. LINIEN MIT EINSATZ = 4 */ GEWINNSPIELE, /* ANZ. LINIEN MIT +1 ABSCHLUSS */ VERLUSTSPIELE) FIX; /* ANZ. LINIEN MIT -7 ABSCHLUSS */ /* ZUGANWEISUNGEN JE DURCHGANG */ DCL TRANSV(12) FIX; /* EINSATZANWEISUNG JE TRANSVERSALE */ DCL PASSE FIX; /* EINSATZANWEISUNG FÜR PASSE */ DCL MANQUE FIX; /* EINSATZANWEISUNG FÜR MANQUE */ /* GESAMTSTATISTIK */ DCL (SALDO, /* GESAMT EINSATZ-GEWINN-SALDO */ MAX_SALDO, /* HÖCHSTER SALDO IM SPIELVERLAUF */ MIN_SALDO, /* NIEDRIGSTER SALDO IM SPIELVERLAUF*/ EINSATZ) LONG; /* GESAMT EINGESETZTE STÜCKE */ DCL MAX_EINSATZ FIX; /* HÖCHSTER EINSATZ BEI EINEM SPIEL */ /* Alle Kombinationen von Satzmöglichkeiten auf die 12 Transversalen berechnen, bei denen sich eine einfache Chance (6 zu 6) ergibt. */ C_LINES: PROC; DCL B BIT(12), N FIX; LINES=0; FOR I FROM TOFIXED('100000000000'B) BY 16 TO TOFIXED('011111111110'B) REPEAT; B=TOBIT(I);N=0; FOR J TO 12 REPEAT;IF B.BIT(J) THEN N=N+1;FIN;END; IF N==6 THEN LINES=LINES+1;LINIE(LINES)=B; /* PUT B TO RDAT BY B(12),SKIP; */ FIN; END; END; /* Kesselwurf über Zufallsgenerator */ R_WURF: PROC RETURNS(FIX); RETURN(1+(ENTIER(RANF(S1,S2)*36))); END; /* Auswertung eines Kesselwurfes */ SPIEL: PROC (VERBOSE BIT); DCL (M,N) FIX, S REF FIX, B BIT(12), (TOTO,ERTRAG) FIX; /* STATISTIKEN LÖSCHEN */ ZERO=0; ONE=0; TWO=0; FOUR=0; GEWINNSPIELE=0; VERLUSTSPIELE=0; TOTO=0; ERTRAG=0; /* ZUGANWEISUNGEN LÖSCHEN */ FOR I TO 12 REPEAT;TRANSV(I)=0;END; PASSE=0; MANQUE=0; /* "... RIEN NE VAS PLUS ..." */ ZAHL=R_WURF; /* ZUGANWEISUNGEN GEMÄß STATUS ERZEUGEN UND STATISTIKEN FÜHREN */ FOR L TO LINES REPEAT; S=STATUS(L); B=LINIE(L); CASE S+5 ALT /* -4 ((wartet auf Zündung)) */ ZERO=ZERO+1; ALT /* -3 ((wartet auf 4. Gewinnwurf für Serie)) */ ZERO=ZERO+1; ALT /* -2 ((wartet auf 3. Gewinnwurf für Serie)) */ ZERO=ZERO+1; ALT /* -1 ((wartet auf 2. Gewinnwurf für Serie)) */ ZERO=ZERO+1; ALT /* 0 ((wartet auf 1. Gewinnwurf für Serie)) */ ZERO=ZERO+1; ALT /* 1 ((Einsatz: 1 Stück)) */ FOR I TO 12 REPEAT;IF B.BIT(I) THEN TRANSV(I)=TRANSV(I)+1;FIN;END; ONE=ONE+1; ALT /* 2 ((Einsatz: 2 Stück)) */ FOR I TO 12 REPEAT;IF B.BIT(I) THEN TRANSV(I)=TRANSV(I)+2;FIN;END; TWO=TWO+1; ALT /* 3 ((kommt nie vor)) */ ALT /* 4 ((Einsatz: 4 Stück)) */ FOR I TO 12 REPEAT;IF B.BIT(I) THEN TRANSV(I)=TRANSV(I)+4;FIN;END; FOUR=FOUR+1; OUT /* ((kommt nie vor)) */ FIN; END; /* MINIMUM-ABGLEICH ALLER TRANSVERSALEN-EINSÄTZE */ N=9999; FOR I TO 12 REPEAT;IF TRANSV(I)M THEN MANQUE=N-M; FOR I TO 6 REPEAT;TRANSV(I)=TRANSV(I)-MANQUE;END; FIN; IF M>N THEN PASSE=M-N; FOR I FROM 7 TO 12 REPEAT;TRANSV(I)=TRANSV(I)-PASSE;END; FIN; /* ÜBERPRÜFE AUF MAX_EINSATZ */ TOTO=PASSE+MANQUE; FOR I TO 12 REPEAT;TOTO=TOTO+TRANSV(I);END; IF TOTO>MAX_EINSATZ THEN MAX_EINSATZ=TOTO;FIN; /* GESAMT-EINSATZ UPDATEN */ EINSATZ=EINSATZ+TOTO; /* SALDO FÜHREN */ SALDO=SALDO-TOTO; /* ÜBERPRÜFEN AUF MIN_SALDO */ IF SALDO' TO RDAT BY F(2),A; FOR I TO 12 REPEAT;PUT TRANSV(I) TO RDAT BY F(4);END; IF PASSE/=0 THEN PUT PASSE TO RDAT BY F(8); ELSE IF MANQUE /=0 THEN PUT MANQUE TO RDAT BY F(5),X(3); ELSE PUT TO RDAT BY X(8);FIN;FIN; PUT TOTO TO RDAT BY F(6); PUT ZERO,ONE,TWO,FOUR TO RDAT BY F(6),(3)F(4); FIN; /* STATUS ÄNDERN LT. STATUS UND WURF UND STATISTIKEN UPDATEN */ FOR L TO LINES REPEAT; S=STATUS(L); B=LINIE(L); IF B.BIT((ZAHL+2)//3) THEN /* *** GEWINNSPIEL *** */ CASE S+5 ALT /* -4 ((wartet auf Zündung)) */ ALT /* -3 ((wartet auf 4. Gewinnwurf für Serie)) */ CONT S=S-1; ALT /* -2 ((wartet auf 3. Gewinnwurf für Serie)) */ CONT S=S-1; ALT /* -1 ((wartet auf 2. Gewinnwurf für Serie)) */ CONT S=S-1; ALT /* 0 ((wartet auf 1. Gewinnwurf für Serie)) */ CONT S=S-1; ALT /* 1 ((Einsatz: 1 Stück)) */ GEWINNSPIELE=GEWINNSPIELE+1; CONT S=0; ALT /* 2 ((Einsatz: 2 Stück)) */ GEWINNSPIELE=GEWINNSPIELE+1; CONT S=0; ALT /* 3 ((kommt nie vor)) */ ALT /* 4 ((Einsatz: 4 Stück)) */ GEWINNSPIELE=GEWINNSPIELE+1; CONT S=0; OUT /* ((kommt nie vor)) */ FIN; ELSE /* *** VERLUSTSPIEL *** */ CASE S+5 ALT /* -4 ((wartet auf Zündung)) */ CONT S=1; ALT /* -3 ((wartet auf 4. Gewinnwurf für Serie)) */ CONT S=0; ALT /* -2 ((wartet auf 3. Gewinnwurf für Serie)) */ CONT S=0; ALT /* -1 ((wartet auf 2. Gewinnwurf für Serie)) */ CONT S=0; ALT /* 0 ((wartet auf 1. Gewinnwurf für Serie)) */ CONT S=0; ALT /* 1 ((Einsatz: 1 Stück)) */ CONT S=2; ALT /* 2 ((Einsatz: 2 Stück)) */ CONT S=4; ALT /* 3 ((kommt nie vor)) */ ALT /* 4 ((Einsatz: 4 Stück)) */ CONT S=0; VERLUSTSPIELE=VERLUSTSPIELE+1; OUT /* ((kommt nie vor)) */ FIN; FIN; END; /* ERTRAG BERECHNEN */ IF ZAHL<=16 THEN ERTRAG=2*MANQUE; ELSE ERTRAG=2*PASSE;FIN; ERTRAG=ERTRAG+12*TRANSV((ZAHL+2)//3); /* STATISTIKEN FÜHREN */ SALDO=SALDO+ERTRAG; IF SALDO>MAX_SALDO THEN MAX_SALDO=SALDO;FIN; /* STATISTIKEN AUSGEBEN */ IF VERBOSE THEN PUT GEWINNSPIELE,VERLUSTSPIELE,ERTRAG-TOTO TO RDAT BY F(6),F(4),F(8),SKIP; FIN; END; /* ****************** */ /* *** SIMULATION *** */ /* ****************** */ R: TASK; OPEN RDAT;CALL REWIND(RDAT); /* 6-6 SATZVARIANTEN BERECHNEN */ CALL C_LINES; /* GESAMTSTATISTIK LÖSCHEN */ SALDO=0; MAX_SALDO=0; MIN_SALDO=0; EINSATZ=0; MAX_EINSATZ=0; /* STATUS DER LINIEN LÖSCHEN */ FOR I TO LINES REPEAT; STATUS(I)=0; /* WARTEN AUF SERIE */ END; /* KOPF DRUCKEN */ PUT 'Roulette-Angriffssimulation ...... (c) KIO ! 12`92', 'Angriff über die Transversalen', 'Progression je Linie 1-2-4, Start nach ++++-', '*** künstliche Permanenzen ***','' TO RDAT BY A,SKIP; PUT 'Wurf T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12', ' ManPas Toto 00 01 02 04', ' +++ --- Saldo' TO RDAT BY SKIP,A,A,A,SKIP,SKIP; /* SIMULATION: 100 SPIELE VERBOSE */ FOR I TO 1000 REPEAT; PUT TOCHAR(13),I TO A1 BY A,F(4); CALL SPIEL(TRUE); END; /* SIMULATION: 10000 SPIELE QUIET */ /* FOR I FROM 101 TO 10000 REPEAT; PUT TOCHAR(13),I TO A1 BY A,F(5); CALL SPIEL(FALSE); END; */ /* GESAMTSTATISTIK DRUCKEN */ PUT TO RDAT BY SKIP; PUT 'Anzahl 6-6er Kombinationen auf Transversalen :',LINES, 'Saldo nach 1000 Spielen: .....................',SALDO, 'Höchster Saldo im Verlauf von 1000 Spielen: ..',MAX_SALDO, 'Niedrigster Saldo im Verlauf von 1000 Spielen:',MIN_SALDO, 'Gesamteinsatz für 1000 Spiele: ...............',EINSATZ, 'Höchster Einsatz bei irgendeinem Spiel: ......',MAX_EINSATZ TO RDAT BY A,F(8),SKIP; CLOSE RDAT; PUT '*** TERMI ***' TO A1 BY A,SKIP; END; MODEND;