Grundsätzlich:In #3 habe ich klare Vorschläge gegeben, was man denn zu eigenständigen Objekten zusammen fassen könnte ...
in #10 habe ich dann noch einmal etwas aufgezeigt, wie sowas aussehen könnte.
Deine Erläuterungen in #11 waren teilweise leicht verwirrend. Du hast zwar versucht, die einzelnen Variablen etwas zu erläutern, aber aus der kurzen Erläuterung konnte ich jetzt nicht wirklich ableiten, was da genau gespeichert wird und welcher Art da die Zugriffe sind.
Daher blieb es vor allem bei den allgemeinen Aussagen, wobei #10 ja schon etwas aufzeigt, wie sowas aussehen würde.
Dann wurde leider abgewichen, aber das durchaus zu Recht, denn auch wenn Du es bisher nicht wahr haben willst: Viele der angesprochenen Punkte würden sehr helfen, dass wir Dir besser helfen können. Derzeit ist es recht hart zu verstehen, was die Abläufe sind. Man muss in mehreren Dateien schauen, wo eine Variable verwendet wird um dann aus den zugewiesenen Werten schlau zu werden.
Aber vielleicht können wir einfach das Vorgehen etwas an einem konkreten Beispiel vorstellen. Du hast ja etwas, das den Einsatz steuert.
Dazu hast Du ja ein Array mit Werten erstellt:
int[] einsbut={10,50,100,200,500,1000,2500,5000,10000,50000,100000};
Vorgehen ist, dass Du Einsätze festlegst. Dabei gehst Du auf Farbe.
Wenn eine Farbe 7 Mal nicht gekommen ist, dann setzt Du 10 auf diese Farbe.
Wenn die Farbe 8 Mal nicht gekommen ist, dann setzt Du 50 auf diese Farbe.
...
Bis Du 100.000 setzt.
Das habe ich verstanden. Es gibt die Farben ROT und SCHWARZ. Gibt es noch andere Möglichkeiten? (Ich kenne mich da absolut nicht aus. War da nicht etwas mit einer Neutralen Zahl? Zero?)
Und was passiert dann erst einmal? Du hast eine Sammlung von Ziehungen. Da interessiert nur die Farbe oder willst Du da alles erfassen? Was gibt es denn da genau?
Und dann geht man hin und schaut sich sozusagen an, womit man da hantiert:
- Man hat Farben. Also sowas wie enum Color { RED, BLACK, ZERO }.
- Du hast dann Ergebnisse, Würfe, wie auch immer da das eigentliche Wort ist. Das hat eine Farbe und eine Zahl. Also baut man sowas:
public class RouletteResult { private int number; private Color color; ..... }
- Dann brauchst Du eine ErgebnisListe. Da hast Du dann sowas wie eine Queue von Ergebnissen. Da dies vergangene Dinge sind, nennen wir es einfach mal History. Es gibt eine maximale Anzahl von Ergebnissen, die Du speichern willst. Und dann kannst Du da Ergebnisse Hinzufügen: add(RouletteResult). Aber Du kannst auch abfragen, wie viele Würfe ein Ergebnis her ist. int lastResult(Color). - Da gehst Du halt durch die Queue bis Du die angegebene Farbe hast.
Und dann kannst Du die Taktik als Klasse bauen. Und da kannst Du dann einfach ein Array mit Deinen Einsätzen geben. Der Index ist die Anzahl der Würfe bis zu der Farbe:
0 -> Kein Einsatz (0)
1 -> Kein Einsatz (0)
2 -> Kein Einsatz (0)
...
6 -> Kein Einsatz (0)
7 -> 10
8 -> 50
...
Für die Taktik brauchen wir jetzt Wetteinsätze. Dazu müssen wir die erst einmal beschreiben. Wir gehen nur auf Farbe, daher haben wir hier eine Klasse, die nur eine Farbe und einen Einsatz hat.
Damit kann die Taktik nun einfach vorgehen:
Für jede Farbe holt sie sich aus der History die Anzahl der Würfe, die diese Farbe nicht geworfen wurde.
Diese Zahl wird als Index verwendet. Wenn die Zahl größer ist als der Index, dann ist der Einsatz xyz (musst Du festlegen!)
Wenn der ermittelte Einsatz > 0 ist, wird in eine Liste mit Wetteinsätzen ein neuer Wetteinsatz gepackt aus Farbe, Einsatz.
Damit haben wir hier eine einfache Klasse Tactic. Damit diese aber funktionieren kann, braucht diese die History. Also verlangen wir, dass beim Konstruktor diese mit angegeben wird.
Somit haben wir diese Logik schnell und einfach beschrieben.Die lässt sich so schon schnell aufbauen. Und wir haben eine Aufteilung:
- Enum Color
- RouletteResult
- History
- Tactic
Jede Klasse ist für sich nicht wirklich komplex. Jede Klasse ist doch eigentlich so überschaubar, oder?
Beim Roulette wird die Kugel in den sich drehenden Kessel geworfen.
Sobald es sich ausgedreht hat, liegt die Kugel auf der Gewinnzahl dieser Runde.
Kurzum:
Es wird eine Zahl aus 0-36 gezogen wobei jede Zahl noch eine Farbe haben.
die 0 ist als einzige grün, manche Zahlen sind rot, manche schwarz.
Uns interessieren nur die Farben, die gezogen werden, Zahlenwert ist unwichtig.
(Wobei eine grüne Farbe ja shcon impliziert dass eine Null gezogen wrurde weil die halt einzigartig ist)
Nun kann man vor einer Runde einen beliebigen Einsatz (auch null euro im Online Casino) wählen und auf Alles erdenkliche setzen (auf jede der 37 möglichen zahlen, auf alle geraden zahlen, etc. pp.)
Mich interessiert nur die 3 Möglichkeiten "auf rot, schwarz oder grün setzen".
Kurzum, mich juckt nach einer runde nicht welche konkrete zahl rauskam sondern nur ob sie rot war, schwarz war oder halt die grüne 0 gezogen wurde.
natürlich kann man in einer Runde auch auf mehrere sachen gleichzeitig setzen.
bspw. werde ich, je nach Situation einen Betrag auf rot/schwarz setzen und einen Betrag auf die null.
Zur Grundstrategie:
Aus dubiosen gründen nehme ich an dass eine der farben rot und schwarz nur maximal 16 mal hintereinander kommen kann (die null explizit ausgschlossen hierbei!).
heißt, es kann theoretisch 16 mal rot kommen und die nächste runde MUSS dann schwarz sein.
Natürlich könnte zu jedem Zeitpunkt auch eine Null kommen und den Plan schmeissen.
Strategie ist ganz primitiv eigentlich:
War die letzte gezogene Zahl rot, wird in der folgerunde auf schwarz und null gesetzt, wobei die beiden einsätze nicht gleich sind .
wurde zuletzt schwarz gezogen, wird auf rot und null gesetzt.
Wir setzern halt so lange auf die andere farbe bis wir spätestens in der 17. runde gewinnen.
und um zu verhindern dass wir zwischendurch eine random null kriegen, wird ab einem gewissen punkt ein kleinbetrag auf die null gesetzt.
kurzum, es wird in jeder runde auf eine der 2 farben sowie auf die null mit entsprechenden Beträgen gesetzt.
Die Setztaeblle die mithilfe der Exceltabelle eingelesen wird, gibt an was in welcher Runde gesetzt wird.
Wobei wir die Einsätze für die farbe im Array listOfAllBetStacksForColor
und die für die null im Array listOfAllBetStacksForZero gespeichert haben und von da ablesen wenn nötig.
Langer rede, kurzer sinn: wir drehen so lange leer (nix setzen, nur drehbutton drücken) bis wir 7 mal rot oder 7 mal schwarz hintereinander haben.
ab dann wird gesetzt.
Hierzu wird ntürlich immer gegukt was als letztes gezogen wurde bzw. ich merke mir intern die letzten 16 gezogenen farben.
kann man ja dran ablesen ob 7 mal die selbe farbe kam und Ähnliches.
Insofern wird wie folgt gesetzt:
war die letzte farbserie 1 lang, dann setze 0 auf andere farbe und 0 auf null.
war die letzte farbserie 2 lang, dann setze 0 auf andere farbe und 0 auf null.
.....
war die letzte farbserie 7 lang, dann setze 0 auf andere farbe und 0 auf null.
nachfolgend sind die einsätze wie folgt:
Code:
runde|auf andere Farbe | auf Null
8 0,1 0
9 0,3 0,1
10 0,7 0,1
11 1,5 0,1
12 3,2 0,2
13 6,8 0,4
14 14,4 0,8
15 30,5 1,7
16 64,6 3,6
17 136,8 7,6
In Summe hat man 7 runden leergedreht und maximal 10 runden mit einsatz gedreht.
früher oder später muss man da gewinnen, und sei es nur durch den ausreißer die null, die ab runde 9 abgesichert wird.
(Und ja, würde unglücklicherweise genau in Runde 8 eine Null kommen, würde man 10 Cent verlieren. Vertretbares Risiko.)
So in etwa das Ganze.
Um nun bspw. 70 cent auf rot zu setzen, müssen erst 50 und dann 20 cent jeweils ausgewählt und auf das "rot" feld geklickt werden.
Je nachdem wie gerade unten das "Rad" mit den auswählbaren einsätzen gerade steht muss so lange nach rechts oder links gedreht werden bis der jeweils benötigte Einsatz sichtbar und damit anklickbar ist.
also entsprechedn rechts/linkdrehen, auf den 50 cent coinn klicken, auf das rot feld klicken,
rad links/rechts zu 20 cent drehen, auf den 20 cent coin klicken, auf rot, klicken, fertig.
Einsötze sind nun platziert, nun auf den Dreh button unten rechts klicken um das rad zu drehen.
Nach der und der Zeit oben rechts colorpixelsearchen welche farbe die neu gezogene zahl hat.
Dann interne berechnungen, anpassen der lsite der bisher gezogenen sachen, bestimmen ob gewonnen oder verloren wurd,e einsätze für nächste runde anpassen etc. pp.
nächste runde, wieder einsätze platzieren wie oben.
Und da die roulette seite nicht von selbst auftaucht, wir ganz am Anfang chrome mit der rouletteseite aufgemaht, auf der erscheinden loginseite eingeloggt, kurz gewartet. und das spiel kann beginnen.
Achja, es gibt auch noch einen Zeitcheck der im auge behält wie lang man auf der rouletteseite aktiv ist.
Aus Gründen will man nicht länger als 51 Minuten am Stück auf der Seite sein, wobei man aber auch nicht dicht machen will wenn man gerade 5 mal in Reihe verloren hat und noch ein paar Runden machen müsste um das wieder reinzuholen (Also sich bspw gerade in Rudne 14 der Setztabelle befindet und daher schon eingie Euro in der aktuellen Serie investiert hat).
Daher wird dieser Timecheck nur gemacht entweder zu Beginn einer Lerrdrehenrunde.Oder wenn gerade gewonne wurde, also bevor man "aufs Neue sein Glück versucht".
Hierzu wird halt der Timer abgeglichen, ist er über 51 Minuten, wird erst der rowser zugemacht mit alt+f4 oder ähnlichem.
Da aus praktischen Gründen das nächste fenster mit fokus die konsole sein wird, wird die ebenso mit alt+f4 gekillt.
Damit killt sich das Programm dann selbst (strg+c würde es auch tun, ich weiß) und der Spuk ist vorbei.