# 3 Scripte zusammenfassen birgt Konflikte



## Traeumerin1998 (25. Sep 2021)

hi ich habe hier 3 Scripte umgebaut/erstellt/zusammengefügt.

*1.03x Script
3.00x Script
10.00x Script*


zum Verständnis:
die Scripte wetten jeweils 50$, 1$ oder 100$ bei einem "Zufallsspiel"
Runde für Runde geht eine Zahl von 1.00 bis 9000.00 hoch und stoppt zufällig.

Die Scripte "bieten" jeweils auf die Multiplikatoren 1.03x oder 3.00x oder 10.00x.

Und sie beginnen erst, wenn das Spiel z.B. 30mal unter 3.00x stoppte.
Oder 4mal unter 1.03x
oder 70mal unter 10.00x.
Und Sie erhöhen dann jeweils den vorherigen Einsatz, bis das Spiel beim gewünschten Multiplikator stoppt.


Beim 1.03x Script Einsatz*50:
_myBet = (myBet*50)_



Beim 3.00x Script Einsatz*1.51:
_myBet = (myBet*1.51)_

Da ich zweimal 1$ auf 3.00 bieten möchte, gilt hier der "losecounter"
_if (losecounter==1){myBet =1_
und ab dann gilt automatisch wieder Einsatz*1.51 für die folgenden Runden.
_also 1, 1, 2, 4, 7, ..._


Beim 10.00x Script Einsatz*1.112
hier gilt der "losecounter" bis ==50
_if (losecounter==1){myBet =112
if (losecounter==2){myBet =125
...
if (losecounter==50){myBet =21134_


Einzeln funktionieren die Scripte sehr gut.
Sie warten und steigen im richtigen Moment ein.

Nur manchmal hab ich z.B. das 10.00x Script laufen und verpasse dann 30mal unter 3.00x
oder habe das 3.00x Script laufen und verpasse 4mal unter 1.03x

Daher versuch ich mich schon eine Weile daran, diese Scripte zusammenzufügen.


Habe nun schon viel versucht. Wenn ich mehrere der Script-Befehle ineinander füge, stimmt das mit dem losecounter leider nicht mehr, weil dann mehrere losecounter gleichzeitig aktiv sind oder garkeiner.


Problem-Beispiel beim All-In-One Script:
Angenommen es wurde 30mal unter 3.00x gestoppt, nun soll "Operation3.00x" starten und bietet in folgenden Schritten:
_Runde 30: 1$ auf 3.00x
Runde 31: 2$ auf 3.00x
Runde 32: 4$ auf 3.00x
Runde 33: 7$ auf 3.00x
Runde 34: 11$ auf 3.00x_
usw...

Nun aber, wenn der Stopp 32mal unter 3.00x ist, ist er auch manchmal gleichzeitig 70mal unter 10.00x
oder 4mal unter 1.03x.

Somit bietet das Script dann plötzlich
_Runde 30: 1$ auf 3.00x
Runde 31: 1$ auf 3.00x
Runde 32: 2$ auf 3.00x
Runde 33: *50$* auf 1.03x ..._


oder beim Start des 10.00x Script in diesem Moment:
_Runde 30: 1$ auf 3.00x
Runde 31: 1$ auf 3.00x
Runde 32: 2$ auf 3.00x
Runde 33: *139$* auf 10.00x ..._
weil:
_if (losecounter==3){myBet = 139_



Nun, daher wende ich mich an euch hier
*> Wie ist es möglich, diese Scripte zu einem zusammenzufügen?*
- Und jede "Operation" in einen seperaten Bereich zu unterteilen (Operation103, Operation3,Operation10)
- Und sobald eine Operation aktiviert ist, sollte sich keine andere Operation aktivieren dürfen.

also ich stell mir das in etwa so vor, beispielsweise:
_if RundenUnter103 >= 4 > start Operation103
if RundenUnter3 >= 30 > start Operation3
if RundenUnter10 >= 70 >start Operation10_

und zusätzlich dazu:
_if Operation103=true > Lasse keine andere Operation zu, bis aktuelle Operation mit Gewinn abgeschlossen.
> Danach lasse weitere Operationen zu & Setze Counter für Operation3 zurück_



--------------------------------

Wie die Scripte bieten sollten:
1.03x: 50, 2500, 125000, 6250000, 312500000, ...
3.00x: 1, 1, 2, 4, 7, 11, 17, 26, 40, 61, 93, 141, 213, 322, 487, 736, 1112, 1680, 2537, 3831, 5785, 8736, 13192, 19920, 30080, ...
10.00x: 100, 112, 125, 139, 155, 173, 193, 215, 240, 267, 297, 331, 369, 411, 458, 510, 568, 632, 703, 782, 870, 968, 1077, 1198, ...

Hier meine drei Scripte einzeln:
1.03x: https://privnote.com/7wjXNHvb#ET4lM03VY
3.00x: https://privnote.com/ayl572p3#JJ7YcZUtU
10.00x: https://privnote.com/dLnXlbSJ#zzQSNuTSq


----------



## mihe7 (25. Sep 2021)

Zuerst einmal ist das im falschen Bereich, Dein Code ist JavaScript und nicht Java. Dann muss ich sagen, dass ich mir nicht sicher bin, dass ich das Problem verstanden habe. Was ich sehen würde ist, dass Du mehrere Runden hast und in jeder Runde wird jedes "Script" einmalig (heißt: ohne Schleife im Script) ausgeführt.


----------



## Barista (25. Sep 2021)

Was verstehst Du unter "Script"?

Spielen die Scripte gegen einen Server (die Bank)?

Was teilen sich die Scripte, wenn sie gleichzeitig laufen?


----------



## Traeumerin1998 (25. Sep 2021)

mihe7 hat gesagt.:


> Dann muss ich sagen, dass ich mir nicht sicher bin, dass ich das Problem verstanden habe. Was ich sehen würde ist, dass Du mehrere Runden hast und in jeder Runde wird jedes "Script" einmalig (heißt: ohne Schleife im Script) ausgeführt.



Ich möchte, dass das Script im erstbesten Moment beginnt.
also wenn 
*GamesUnter10 >= 70 *dann soll es 100, 112, 125, ... auf 10.00x bieten - bis zum Erfolg
oder wenn *GamesUnter3 >= 30 *dann soll es 1, 1, 2, 4, ... auf 3.00x bieten - bis zum Erfolg
oder wenn* GamesUnter103 >= 4 *dann soll es 50, 2500, 125000, ... auf 1.03x bieten - bis zum Erfolg

Also ich möchte, wenn wenn das Script einmal beginnt, z.B. auf 3.00x zu bieten, dass es dann dabei bleibt, bis zum Gewinn.

Und nicht zwischenduch irritiert wird, weil das 10.00x-Schema oder 1.03x-Schema ausgeführt wird.

Das gleiche, wenn es beginnt, auf 10.00x zu bieten. dass es dann dabei bleibt, bis zum Gewinn.

Das es seinen Weg bis zum Erfolg geht, je nachdem, welcher Parameter "GamesUnder" zuerst ausgelöst wird.






















Barista hat gesagt.:


> Was verstehst Du unter "Script"?
> 
> Spielen die Scripte gegen einen Server (die Bank)?
> 
> Was teilen sich die Scripte, wenn sie gleichzeitig laufen?



Ja die spielen gegen einen Server, der zufällig die Stopps generiert.
Also wenn ich die Scripte "verbinde," dann gibt es Konflikte.
Ich habe verschiedene Varianten versucht.

Beginnen zu bieten soll das Script ja immer, wenn eine dieser Bedingungen vorliegt:
*if(GamesUnter10 >= 70){*
oder
*if(GamesUnter3 >= 30){*
oder
*if(GamesUnter103 >= 4){*

Aber manchmal geschieht das durcheinander.
Wenn das Spiel quasi so läuft:

... 25 Runden <3.00x
Runde 26: 2.02x
Runde 27: 1.99x
Runde 28: 1.00x
Runde 29: 1.02x
Runde 30: 1.01x (hier bietet das Script nun 1 auf 3.00x. *if(GamesUnter3 >= 30){*
Runde 31: 1.00x (hier ist der Konflikt. Hier haben wir *GamesUnter1.03 = 4 *und *GamesUnter3 = 31 *gleichzeitig*)*

Hier bietet es plötzlich nicht mehr die 3.00xer-Reihe, sondern bietet nun die 1.03xer Reihe, also 50 auf 1.03x


----------



## mihe7 (26. Sep 2021)

Traeumerin1998 hat gesagt.:


> Also ich möchte, wenn wenn das Script einmal beginnt, z.B. auf 3.00x zu bieten, dass es dann dabei bleibt, bis zum Gewinn.


Ok. Dein Script kann sich in einem "Wartezustand" (nennen wir den mal WAITING) und in einem "Biete-Zustand" (BIDDING) befinden. Damit gibt es zwei Möglichkeiten:

Wenn das Script sich im Zustand WAITING befindet, führst Du Deine if-Statements aus. Falls eine der Bedingungen eintritt, legst Du das Gebotsschema fest und änderst den Zustand auf BIDDING. 
Im BIDDING-Zustand wird entsprechend des zuvor festgelegten Gebotsschemas geboten, bis der Gewinnfall eintritt. Im Gewinnfall ändert sich der Zustand wieder auf WAITING.


----------



## Traeumerin1998 (26. Sep 2021)

Ja das hört sich in der theorie gut an.
Genau so in etwa möchte ich es gern haben.

Das Script sollte nichtstun und warten, bis
*GamesUnter10 >= 70*, oder
*GamesUnter3 >= 30*, oder
*GamesUnter103 >= 4*
Und dann sollte es bei der erstbesten Gelegenheit bieten und bei dieser Strategie bleiben, bis zum Gewinn.


wie komme ich dahin, dass das Script wartet und entsprechend bietet, bis WIN?

Wie erschaffe ich den "richtigen" Waiting Zustand?
Im Grunde wartet das Script ja die ganze Zeit auf den richtigen Moment.
Nur Momente wie:
*GamesUnter3 >= 30 *& *GamesUnter103 >= 4*

geschehen leider immer wieder gleichzeitig und dann springt das Script vom _bidding auf 3.00x _über zur neuen Strategie > _bidding auf 1.03x_.


wie erreiche ich, dass das Script nicht auf 1.03x sondern weiterhin auf 3.00x bietet, wenn während dem _bidding auf 3.00x _plötzlich
*GamesUnter103 >= 4 *kommt?


Kann man irgendwie _GamesUnter10 _und _GamesUnter103 _ignorieren, während es auf _GamesUnter3 _spielt?

wie erreiche ich, dass das Script alles umher ignoriert und geradewegs die begonnene Strategie bis zum Gewinn vollzieht?


Ich bin am hin und her bearbeiten.
Habe auch alle deutschen Befehle soweit es ging auf englisch bearbeitet. Aber das ändert wohl auch nichts


Aktuell sieht es so aus: 
[CODE lang="java" title="3-Scripts-in-Einem"]var config = {
    skipRounds103: { value: '5', type: 'text', label: 'Skip 1.03x'},
    skipRounds3: { value: '5', type: 'text', label: 'Skip 3x'},
    skipRounds10: { value: '5', type: 'text', label: 'Skip 10x'},
};

var GamesWait103 = config.skipRounds103.value;
var GamesWait3 = config.skipRounds3.value;
var GamesWait10 = config.skipRounds10.value;

var baseBet103 = 50;
var baseBet3 = 1;
var baseBet10 = 100;

var putMultiplier103 = 1.03;
var putMultiplier3 = 3;
var putMultiplier10 = 10;

var putBet103 = baseBet103;
var putBet3 = baseBet3;
var putBet10 = baseBet10;

var losecounter103 = 0;
var losecounter3 = 0;
var losecounter10 = 0;

var Operation103 = false
var Operation3 = false
var Operation10 = false

var GamesBelow103 = GetGamesBelow103();
var GamesBelow105 = GetGamesBelow105();
var GamesBelow125 = GetGamesBelow125();
var GamesBelow150 = GetGamesBelow150();
var GamesBelow2 = GetGamesBelow2();
var GamesBelow3 = GetGamesBelow3();
var GamesBelow4 = GetGamesBelow4();
var GamesBelow5 = GetGamesBelow5();
var GamesBelow7 = GetGamesBelow7();
var GamesBelow10 = GetGamesBelow10();
var GamesBelow100 = GetGamesBelow100();


//    log('Unter 1.03x: ' + GamesBelow103 + '. | Unter 1.05x: ' + GamesBelow105 + '.');
//    log('Unter 1.25x: ' + GamesBelow125 + '. | Unter 1.50x: ' + GamesBelow150 + '.');
//    log('Unter 2.00x: ' + GamesBelow2 + '. | Unter 3.00x: ' + GamesBelow3 + '.');
//    log('Unter 4.00x: ' + GamesBelow4 + '. | Unter 5.00x: ' + GamesBelow5 + '.');
//    log('Unter 7.00x: ' + GamesBelow7 + '. | Unter 10.0x: ' + GamesBelow10 + '.');
//    log('Unter 100x: ' + GamesBelow100 + '.');


engine.on('GAME_STARTING', function()
{
    log('Games below 1.03x: ' + GamesBelow103 + '.');
    log('Games below 3.00x: ' + GamesBelow3 + '.');
    log('Games below 10.0x: ' + GamesBelow10 + '.');





if(GamesBelow103 >= GamesWait103){
    putBet103 = Math.ceil(putBet103);
    engine.bet(parseInt(putBet103*100), parseFloat(putMultiplier103));

    log('Bet ' + putBet103 + ' x ' + putMultiplier103 + ' next round.');
    Operation103 = true;
    }else{   
    Operation103 = false;
    let countWait103 = GamesWait103 - GamesBelow103;
    if(countWait103 == 0){
    log('Bet ' + baseBet103 + ' x ' + putMultiplier103 + ' next round.');
    }else{
    log('Wait ' + countWait103 + ' Games below 1.03x');
    losecounter103=0;}}






if(GamesBelow3 >= GamesWait3){
    putBet3 = Math.ceil(putBet3);
    engine.bet(parseInt(putBet3*100), parseFloat(putMultiplier3));

    log('Bet ' + putBet3 + ' x ' + putMultiplier3 + ' next round.');
    Operation3 = true;
    }else{

    Operation3 = false;
    let countWait3 = GamesWait3 - GamesBelow3;
    if(countWait3 == 0){
    log('Bet ' + baseBet3 + ' x ' + putMultiplier3 + ' next round.');
    }else{
    log('Wait ' + countWait3 + ' Games below 3x');
    losecounter3=0;}}



if(GamesBelow10 >= GamesWait10){
    putBet10 = Math.ceil(putBet10);
    engine.bet(parseInt(putBet10*100), parseFloat(putMultiplier10));

    log('Bet ' + putBet10 + ' x ' + putMultiplier10 + ' next round.');
    Operation10 = true;
    }else{
    Operation10 = false;
    let countWait10 = GamesWait10 - GamesBelow10;
    if(countWait10 <= 0){
    log('Bet ' + baseBet10 + ' x ' + putMultiplier10 + ' next round.');
    }else{
    log('Wait ' + countWait10 + ' Games below 10x');
    losecounter10=0;}}

});










engine.on('GAME_ENDED', function() {

    var lastGame = engine.history.first();
    if(Operation103){
    losecounter103++;
    if(!lastGame.cashedAt){
    putBet103 = (putBet103*50);
    putMultiplier103 = 1.03
    log('Verloren @1.03x.');

    }else if(lastGame.cashedAt >= 1.03){
    putBet103 = baseBet103;
    log('Gewonnen @1.03x.');
    losecounter103=0;}}

    if(Operation3){
    losecounter3++;
    if(!lastGame.cashedAt){
    putBet3 = (putBet3*1.51);
    putMultiplier3 = 3
    log('Verloren @3x.');

    }else if(lastGame.cashedAt >= 3){
    putBet3 = baseBet3;
    log('Gewonnen @3x.');
    losecounter3=0;}}

    if(Operation10){
    losecounter10++;
    if(!lastGame.cashedAt){
    putBet10 = (putBet10*1.112);
    putMultiplier10 = 10
    log('Verloren @10x.');

    }else if(lastGame.cashedAt >= 10){
    putBet10 = baseBet10;
    log('Gewonnen @10x.');
    losecounter10=0;}}











    if(lastGame.bust > 1.03){
    GamesBelow103 = 0;
    }else{
    GamesBelow103++;}
    if(lastGame.bust > 1.05){
    GamesBelow105 = 0;
    }else{
    GamesBelow105++;}
    if(lastGame.bust > 1.25){
    GamesBelow125 = 0;
    }else{
    GamesBelow125++;}
    if(lastGame.bust > 1.50){
    GamesBelow150 = 0;
    }else{
    GamesBelow150++;}
    if(lastGame.bust > 2){
    GamesBelow2 = 0;
    }else{
    GamesBelow2++;}   
    if(lastGame.bust > 3){
    GamesBelow3 = 0;
    }else{
    GamesBelow3++;}
    if(lastGame.bust > 4){
    GamesBelow4 = 0;
    }else{
    GamesBelow4++;}       
    if(lastGame.bust > 5){
    GamesBelow5 = 0;
    }else{
    GamesBelow5++;}   
    if(lastGame.bust > 7){
    GamesBelow7 = 0;
    }else{
    GamesBelow7++;}   
    if(lastGame.bust > 10){
    GamesBelow10 = 0;
    }else{
    GamesBelow10++;}   
    if(lastGame.bust > 100){
    GamesBelow100 = 0;
    }else{
    GamesBelow100++;}


    log('...');
})










// Funktionen


    function GetGamesBelow103(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow103 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray_.bust >= 1.03){
    break;}
    generatedGamesBelow103++;}
    return generatedGamesBelow103;}

    function GetGamesBelow105(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow105 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 1.05){
    break;}
    generatedGamesBelow105++;}
    return generatedGamesBelow105;}

    function GetGamesBelow125(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow125 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 1.25){
    break;}
    generatedGamesBelow125++;}
    return generatedGamesBelow125;}

    function GetGamesBelow150(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow150 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 1.50){
    break;}
    generatedGamesBelow150++;}
    return generatedGamesBelow150;}

    function GetGamesBelow2(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow2 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 2){
    break;}
    generatedGamesBelow2++;}
    return generatedGamesBelow2;}

    function GetGamesBelow3(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow3 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 3){
    break;}
    generatedGamesBelow3++;}
    return generatedGamesBelow3;}

    function GetGamesBelow4(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow4 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 4){
    break;}
    generatedGamesBelow4++;}
    return generatedGamesBelow4;}

    function GetGamesBelow5(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow5 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 5){
    break;}
    generatedGamesBelow5++;}
    return generatedGamesBelow5;}

    function GetGamesBelow7(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow7 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 7){
    break;}
    generatedGamesBelow7++;}
    return generatedGamesBelow7;}

    function GetGamesBelow10(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow10 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 10){
    break;}
    generatedGamesBelow10++;}
    return generatedGamesBelow10;}

    function GetGamesBelow100(){
    let GamesArray = engine.history.toArray();
    let generatedGamesBelow100 = 0;
    for (var i = 0; i < GamesArray.length; i++) {
    if(GamesArray.bust >= 100){
    break;}
    generatedGamesBelow100++;}
    return generatedGamesBelow100;}[/CODE]

Leider bietet es relativ "durcheinander" und laut den Logs will es mehrfach zeitgleich bieten.

[CODE title="Logs:"]04:17: Script starting
04:18: ...
04:18: Games below 1.03x: 0.
04:18: Games below 3.00x: 0.
04:18: Games below 10.0x: 0.
04:18: Wait 5 Games below 1.03x
04:18: Wait 5 Games below 3x
04:18: Wait 5 Games below 10x
04:18: ...
04:18: Games below 1.03x: 0.
04:18: Games below 3.00x: 0.
04:18: Games below 10.0x: 1.
04:18: Wait 5 Games below 1.03x
04:18: Wait 5 Games below 3x
04:18: Wait 4 Games below 10x
04:19: ...
04:19: Games below 1.03x: 0.
04:19: Games below 3.00x: 0.
04:19: Games below 10.0x: 2.
04:19: Wait 5 Games below 1.03x
04:19: Wait 5 Games below 3x
04:19: Wait 3 Games below 10x
04:19: ...
04:19: Games below 1.03x: 0.
04:19: Games below 3.00x: 1.
04:19: Games below 10.0x: 3.
04:19: Wait 5 Games below 1.03x
04:19: Wait 4 Games below 3x
04:19: Wait 2 Games below 10x
04:20: ...
04:20: Games below 1.03x: 0.
04:20: Games below 3.00x: 0.
04:20: Games below 10.0x: 0.
04:20: Wait 5 Games below 1.03x
04:20: Wait 5 Games below 3x
04:20: Wait 5 Games below 10x
04:20: ...
04:20: Games below 1.03x: 0.
04:20: Games below 3.00x: 1.
04:20: Games below 10.0x: 1.
04:20: Wait 5 Games below 1.03x
04:20: Wait 4 Games below 3x
04:20: Wait 4 Games below 10x
04:20: ...
04:20: Games below 1.03x: 0.
04:20: Games below 3.00x: 2.
04:20: Games below 10.0x: 2.
04:20: Wait 5 Games below 1.03x
04:20: Wait 3 Games below 3x
04:20: Wait 3 Games below 10x
04:20: ...
04:21: Games below 1.03x: 0.
04:21: Games below 3.00x: 3.
04:21: Games below 10.0x: 3.
04:21: Wait 5 Games below 1.03x
04:21: Wait 2 Games below 3x
04:21: Wait 2 Games below 10x
04:21: ...
04:21: Games below 1.03x: 0.
04:21: Games below 3.00x: 4.
04:21: Games below 10.0x: 4.
04:21: Wait 5 Games below 1.03x
04:21: Wait 1 Games below 3x
04:21: Wait 1 Games below 10x
04:21: ...
04:21: Games below 1.03x: 0.
04:21: Games below 3.00x: 5.
04:21: Games below 10.0x: 5.
04:21: Wait 5 Games below 1.03x
04:21: Bet 1 x 3 next round.
04:21: Bet 100 x 10 next round.
04:21: Verloren @3x.
04:21: Verloren @10x.
04:21: ...
04:21: Games below 1.03x: 0.
04:21: Games below 3.00x: 6.
04:21: Games below 10.0x: 6.
04:21: Wait 5 Games below 1.03x
04:21: Bet 2 x 3 next round.
04:21: Bet 112 x 10 next round.
04:21: Verloren @3x.
04:21: Verloren @10x.
04:21: ...
04:22: Games below 1.03x: 0.
04:22: Games below 3.00x: 7.
04:22: Games below 10.0x: 7.
04:22: Wait 5 Games below 1.03x
04:22: Bet 4 x 3 next round.
04:22: Bet 125 x 10 next round.[/CODE]_


----------



## mihe7 (26. Sep 2021)

Du musst das Problem erstmal vernünftig modellieren, dann halbwegs sauberen Code schreiben. 

Sehe ich es richtig, dass für jedes Spiel das GAME_STARTING- bzw. GAME_ENDED-Ereignis ausgelöst wird und man mittels engine.history().first() das betreffende Spiel erhält?


----------



## Traeumerin1998 (26. Sep 2021)

Ja Ganz genau


----------



## mihe7 (26. Sep 2021)

```
const strategies = [ /* dazu kommen wir gleich */ ];

const gameState = {
    "selectedStrategy": null
};

function gameStarted() {
    const currentGame = engine.history().first();
    if (gameState.selectedStrategy === null) { // wir sind noch in der Findungsphase
        gameState.selectedStrategy = selectStrategy(currentGame);
    } else { // es wurde bereits eine Strategie gewählt
        play(gameState.selectedStrategy);
    }
}


function selectStrategy(game) {
    strategies.forAll(strategy => inspectGame(strategy, game));
    return strategies.find(strategy => canPlay(strategy, game));
}

function gameEnded() {
    const lastGame = engine.history().first();
    strategies.forAll(strategy => evaluateGame(strategy, lastGame));
}

engine.on("GAME_STARTING", gameStarted);
engine.on("GAME_ENDED", gameEnded);
```

Das wäre mal das grobe Skelett, hier fehlen aber noch ein paar Funktionen. Ich bin hier absichtlich prozedural geblieben, um Dich nicht zu sehr zu verwirren. Bevor wir uns um diese kümmern, überlegen wir uns, wie sich eine Strategie beschreiben lässt.

1. Es gibt ein Limit, überhalb dessen ein Spiel uninteressant ist.
2. Es gibt eine Zahl an interessanten Spielen, die abgewartet werden soll.
3. Es gibt einen Grundeinsatz
4. Es gibt einen Faktor, um den der Grundeinsatz mit jedem Gebot erhöht wird.

Soweit, so gut. Nun gibt es aber auch Dinge, die sich zur Laufzeit ändern:

5. Es gibt ein vorheriges Gebot. Zu Beginn ist dieses 0.
6. Es gibt einen Zähler, der die interessanten Spiele zählt.

Eine konkrete Strategie ließe sich also z. B. mit folgendem Objekt beschreiben:

```
{
    "limit": 3,
    "skip": 5,
    "baseBet": 1,
    "factor": 3,
    "previousBet": 0,
    "gamesCount": 0
}
```

Mit solchen Objekten kannst Du nun `strategies` oben im Code füllen. Damit können wir die fehlenden Funktionen implementieren. Die Funktion inspectGame soll sich das Spiel ansehen, so dass eine Entscheidung getroffen werden kann, ob das Spiel für die betreffende Strategie infrage kommt.


```
function inspectGame(strategy, game) {
    if (game.bust < strategy.limit) {
        strategy.gamesCount++;
    }
}
```

Die nächste Funktion ist canPlay, die zurückgibt, ob die Strategie spielen kann:

```
function canPlay(strategy) {
    return strategy.gamesCount >= strategy.skip;
}
```

Fehlt noch das Spielen selbst:

```
function play(strategy) {
    let bet = strategy.previousBet * strategy.factor;
    if (bet === 0) {
        bet = strategy.baseBet;
    }
    engine.bet(parseInt(Math.ceil(bet)), parseFloat(strategy.factor));
    strategy.previousBet = bet;
}
```

Und natürlich die Auswertung:

```
function evaluateGame(strategy, game) {
    if (!game.cashedAt) {
        log('Verloren @' + strategy.factor);
    } else if (game.cashedAt >= strategy.factor) {
        log('Gewonnen @' + strategy.factor);
        reset(strategy);
        gameState.selectedStrategy = null; // zurück in die Findungsphase
    }
}

function reset(strategy) {
    strategy.gamesCount = 0;
    strategy.previousBet = 0;
}
```

Das mal als grobe Skizze, damit Du eine Basis hast. Du kannst natürlich statt previousBet auch eine nextBet-Logik umsetzen, wenn Dir die besser gefällt. Der Spaß wird außerdem Fehler enthalten (ich schreib das nur hier im Editor und ob ich alles umrissen habe, weiß ich auch nicht genau) und wird auch nicht vollständig sein. Das ist jetzt Dein Job.


----------



## EinNickname9 (26. Sep 2021)

Hier noch was ich mir auch überlegt hatte


```
var mygames = [];

function getGamesLowerThreshold(threshold) {
    let gamesArray = engine.history.toArray();
    let counter = 0;
    for (var i = 0; i < gamesArray.length; i++) {
        if (gamesArray[i].bust >= threshold) {
            break;
        }
        counter++;
    }
    return counter;
}

function addToGames(threshold) {
    mygames.push({ threshold: threshold, counter: getGamesLowerThreshold(threshold) });
}

addToGames(1.03);
addToGames(1.05);
addToGames(1.25);
addToGames(1.50);
addToGames(2);
addToGames(3);
addToGames(4);
addToGames(5);
addToGames(7);
addToGames(10);
addToGames(100);
```

Testen kann ich es leider nicht


----------



## Barista (26. Sep 2021)

Traeumerin1998 hat gesagt.:


> Runde für Runde geht eine Zahl von 1.00 bis 9000.00 hoch und stoppt zufällig.





Traeumerin1998 hat gesagt.:


> Und Sie erhöhen dann jeweils den vorherigen Einsatz, bis das Spiel beim gewünschten Multiplikator stoppt.


Oben steht, das Spiel stoppt bei einer Zahl.

Unten steht, das Spiel stoppt bei einem Multiplikator?


----------



## mrBrown (26. Sep 2021)

Barista hat gesagt.:


> Traeumerin1998 hat gesagt.:
> 
> 
> > *Runde für Runde* geht eine Zahl von 1.00 bis 9000.00 hoch und stoppt zufällig.
> ...


Oben steht "Runde", unten steht "Spiel"


----------



## Barista (27. Sep 2021)

mrBrown hat gesagt.:


> Oben steht "Runde", unten steht "Spiel"


Aha, erhellend, wenn auch nur wenig.

Die anderen Poster haben scheinbar das Prinzip verstanden, ich nicht.

Nun gut, ich spiele nicht.


----------



## mihe7 (27. Sep 2021)

Barista hat gesagt.:


> Die anderen Poster haben scheinbar das Prinzip verstanden, ich nicht.


Das kann ich jetzt nicht behaupten


----------



## EinNickname9 (27. Sep 2021)

Also, es geht um ein gewisses online-Spiel. Die genauen Regeln hab ich aber auch nicht verstanden (eigentlich gar nicht). Ich habe einfach nach Bad Smells Ausschau gehalten und einige entdeckt...

Um mal im Bild zu bleiben: Man kann ja sehen, ob das Bein amputiert werden muss, ohne die übrigen Parameter des Patienten zu kennen...


----------

