Lotto Mogul
Das schlimmste ist...
Donnerstag, 8. Januar 2009 von Valnar
... nicht wenn das Bier alle ist (Ok, unteranderem auch )
Aber vor allem, wenn ein Projekt an der Mathematik zu scheitern droht!
Ich hab folgenden Code (aus technischen Gründen, es kommt einfach mit größeren Zahlen zurecht!) in PureBasic geschrieben. Diese wird als DLL in das Spiel geladen und führt ein großteil der Berechnungen aus.
Leider sind die Berechnungen (meines Erachtens nach) etwas unrealistisch )
Eventuell könnte mir ja jemand von euch mir ein Lösungsansatz oder eine gesamte Lösung nennen.
Code: [AUSKLAPPEN]
ProcedureDLL.q GetWinners(x,y,sell) ;x = Welcher Tipp (ZB 6) y= wieviele Zahlen (ZB 49) sell = Wieviele Lose wurden Verkauft.
numbers.q = XausY(x,y) ;Gibt die Anzahl der Möglichkeiten aus. Bei 6 aus 49 sind dies maximal 13983816
winners = 0
faktor = 0
If numbers = 0
ProcedureReturn NULL
EndIf
;Hiermit "Fake" ich einen durchlauf jeden Verkauften Loses
Select sell
Case 0 To 1000
faktor = 1
Case 1000 To 10000
faktor = 1000
Case 10000 To 100000
faktor = 10000
Case 100000 To 1000000
faktor = 100000
Default
faktor = 1000000
EndSelect
For i=0 To sell/faktor Step 1
zahl.q = Rand(1,numbers)
If zahl < faktor
winners = winners + faktor/zahl
EndIf
Next
ProcedureReturn winners
EndProcedure
Debug "Start"
RandomSeed(ElapsedMilliseconds())
ig.q= 0
lose.q= 200000000 ;200 Millionen verkaufte Lose
i= GetWinners(1,49,lose)
ig = ig+i
Debug "1 aus 49 "+Str(i)
i= GetWinners(2,49,lose-ig)
ig = ig+i
Debug "2 aus 49 "+Str(i)
i= GetWinners(3,49,lose-ig)
ig = ig+i
Debug "3 aus 49 "+Str(i)
i= GetWinners(4,49,lose-ig)
ig = ig+i
Debug "4 aus 49 "+Str(i)
i= GetWinners(5,49,lose-ig)
ig = ig+i
Debug "5 aus 49 "+Str(i)
i= GetWinners(6,49,lose-ig)
ig = ig+i
Debug "6 aus 49 "+Str(i)
Debug ""
xuv.d = (ig/lose)*100
Debug xuv
Debug "ende"
Ausgabe dabei:
Zitat:
Jeder wird sehen, dass dies nur minder Realistisch ist.
Man mag mir auch die sporadische Kommentierung verzeihen, ich weiss teilweise nicht wie ich es Beschreiben soll.
Also. Hilfe ist gefordert
Naja, sonst gibt es nicht viel neues...
Zumindets fällt mir nichts ein.
Bis denne dann.
Aber vor allem, wenn ein Projekt an der Mathematik zu scheitern droht!
Ich hab folgenden Code (aus technischen Gründen, es kommt einfach mit größeren Zahlen zurecht!) in PureBasic geschrieben. Diese wird als DLL in das Spiel geladen und führt ein großteil der Berechnungen aus.
Leider sind die Berechnungen (meines Erachtens nach) etwas unrealistisch )
Eventuell könnte mir ja jemand von euch mir ein Lösungsansatz oder eine gesamte Lösung nennen.
Code: [AUSKLAPPEN]
ProcedureDLL.q GetWinners(x,y,sell) ;x = Welcher Tipp (ZB 6) y= wieviele Zahlen (ZB 49) sell = Wieviele Lose wurden Verkauft.
numbers.q = XausY(x,y) ;Gibt die Anzahl der Möglichkeiten aus. Bei 6 aus 49 sind dies maximal 13983816
winners = 0
faktor = 0
If numbers = 0
ProcedureReturn NULL
EndIf
;Hiermit "Fake" ich einen durchlauf jeden Verkauften Loses
Select sell
Case 0 To 1000
faktor = 1
Case 1000 To 10000
faktor = 1000
Case 10000 To 100000
faktor = 10000
Case 100000 To 1000000
faktor = 100000
Default
faktor = 1000000
EndSelect
For i=0 To sell/faktor Step 1
zahl.q = Rand(1,numbers)
If zahl < faktor
winners = winners + faktor/zahl
EndIf
Next
ProcedureReturn winners
EndProcedure
Debug "Start"
RandomSeed(ElapsedMilliseconds())
ig.q= 0
lose.q= 200000000 ;200 Millionen verkaufte Lose
i= GetWinners(1,49,lose)
ig = ig+i
Debug "1 aus 49 "+Str(i)
i= GetWinners(2,49,lose-ig)
ig = ig+i
Debug "2 aus 49 "+Str(i)
i= GetWinners(3,49,lose-ig)
ig = ig+i
Debug "3 aus 49 "+Str(i)
i= GetWinners(4,49,lose-ig)
ig = ig+i
Debug "4 aus 49 "+Str(i)
i= GetWinners(5,49,lose-ig)
ig = ig+i
Debug "5 aus 49 "+Str(i)
i= GetWinners(6,49,lose-ig)
ig = ig+i
Debug "6 aus 49 "+Str(i)
Debug ""
xuv.d = (ig/lose)*100
Debug xuv
Debug "ende"
Ausgabe dabei:
Zitat:
Start
1 aus 49 20711043
2 aus 49 2901708
3 aus 49 51971
4 aus 49 11715
5 aus 49 685
6 aus 49 161
11.8386415
ende
1 aus 49 20711043
2 aus 49 2901708
3 aus 49 51971
4 aus 49 11715
5 aus 49 685
6 aus 49 161
11.8386415
ende
Jeder wird sehen, dass dies nur minder Realistisch ist.
Man mag mir auch die sporadische Kommentierung verzeihen, ich weiss teilweise nicht wie ich es Beschreiben soll.
Also. Hilfe ist gefordert
Naja, sonst gibt es nicht viel neues...
Zumindets fällt mir nichts ein.
Bis denne dann.
Immer ärger mit Major Pain...
Mittwoch, 26. November 2008 von ValnarNaja was bessere als um meine Situation auszudrücken gibt es nicht
Ich hab Probleme mit der Möglichkeiten-Berechnungen für die Auswertung des Lottozahlen:
Es gibt keine mir (oder anderen, die bereit sind mir zuhelfen) bekannte Programmiersprache, die mit Zahlen, welche bis zu 65-Stellen betragen, rechnen kann UND in BB benutzt werden kann (als DLL zb., naja anders geht es wohl nicht )
Ich habe mir schon eine DLL in PureBasic geschrieben:
Code: [AUSKLAPPEN]
Declare.q fakul(fak_wert)
ProcedureDLL xausy(x.l, y.l)
ProcedureReturn ((fakul(y) / (fakul(x)) * fakul(y-x)))
EndProcedure
Procedure.q fakul(fak_wert)
fak.q = 1
For fak_count.l = 1 To fak_wert Step 1
fak = fak*fak_count
Next
ProcedureReturn fak
EndProcedure
ProcedureDLL xausy(x.l, y.l)
ProcedureReturn ((fakul(y) / (fakul(x)) * fakul(y-x)))
EndProcedure
Procedure.q fakul(fak_wert)
fak.q = 1
For fak_count.l = 1 To fak_wert Step 1
fak = fak*fak_count
Next
ProcedureReturn fak
EndProcedure
Den Code hab ich aus einem PHP-Code, welcher ein Bekannter, als Beispiel für Fakultätberechnungen, für mich angelegt hat.
Code: [AUSKLAPPEN]
<?php
function fakultaet($fak_wert) {
$fak = 1;
for($fak_count = 1; $fak_count <= $fak_wert; $fak_count++) {
$fak = $fak * $fak_count;
}
return $fak;
}
function xAusY($x , $y) {
return fakultaet($y) / ( fakultaet($x) * fakultaet($y - $x) );
}
echo xAusY(6 , 49);
echo "<br />Die Wahrscheinlichkeit x aus y zu treffen ist ", 1 / xAusY(6,49);
?>
function fakultaet($fak_wert) {
$fak = 1;
for($fak_count = 1; $fak_count <= $fak_wert; $fak_count++) {
$fak = $fak * $fak_count;
}
return $fak;
}
function xAusY($x , $y) {
return fakultaet($y) / ( fakultaet($x) * fakultaet($y - $x) );
}
echo xAusY(6 , 49);
echo "<br />Die Wahrscheinlichkeit x aus y zu treffen ist ", 1 / xAusY(6,49);
?>
Naja.
Nun bleiben mir in der Hinsicht nur ein paar wenige möglichkeiten:
1. Jemand ist so nett und Schreibt mir eine DLL die ich später nur einfügen brauch oder gibt ein Assembler-Code (kp ob der mit so großen Zahlen rechnen kann) der die O.G. Berechnung berechnet, sodass ich ihn in PureBasic per Inline-ASM zu einer DLL zusammen basteln kann.
Vorteil daran währe, dass dies einfach im päteren Code einzufügen währe und wohl auch sehr schnell bliebe.
2. Ich mache alles hardcoded per DIM. Das hätte den nachteil das es sehr langsam, Speicherplatzschluckend und auch sehr steif ist. Vorteil ist, das man später einfach nur MEINEDIM(6,49) schreiben bräuchte.
3. Ich mache ein Online-Spiel draus und lasse alles von PHP berechnen (Das anscheinend mit unendlich großen Zahlen rechnen kann)
4. Ich gebe auf und trage das Projekt zu grabe.
Ok. 3 und 4 sind SOWAS von unwahrscheinlich
Eventuell kann mir einer von euch ja helfen.
Ich versuche mich auf jedenfall mal an Punkt 2.
Dafür muss ich in PHP alle Möglichkeiten für jede Zahl ausrechnen lassen (Ich denke das man maximal 10 aus 100 nehmen kann, eventuell leicht mehr.)
Sodele das war es. Bis zum nächsten mal...
I Shot the Screen... *träller*
Donnerstag, 23. Oktober 2008 von Valnar
...but I did not shoot the ... Oh da seid ihr ja!
SO, wie versprochen liefere ich nun einige Screenshots ab.
Ich hab euch gewarnt, für Augenschäden wird nicht gehaftet
Hier sieht man, wie das Menü zum Anlegen eines neuen Spielers aussieht.
Im hintergrund das restliche Hauptmenü. Sehr schlicht und langweilig, ich weiss. Später kommt noch was dazu.
Hier habe ich schon alle Notwendigen Daten eingetragen. Man beachte die Hintergrundfarbe des Logos, welche man frei wählen kann.
Neue Schwierigkeitsstufen kann man ganz einfach eintragen.
Auf diesem Bild sieht man das Spiel-Hauptmenü. Die Schwarzen Rechtecke werden später NICHT zu sehen sein. Sie dienen mommentan für mich als ausrichtungen für Klick-Events. Und damit ihr meine hässliche Stadt nicht ertragen müsst
Man beachte auch oben rechts die Siedebar, welche man ein und ausfahren kann. Dort kommt später noch der ein oder andere Button hin.
Mehr gibt es im momment (Offiziell) noch nicht
Sodele, man schriebt sich beim nächsten Eintrag.
Edit: So nebenbei: Bei EPS auf seinen Rechner läuft das Spiel so schnell, dass er immer Delay einbauen muss. Nicht nur Delay 1, sondern direkt Delay 10
SO, wie versprochen liefere ich nun einige Screenshots ab.
Ich hab euch gewarnt, für Augenschäden wird nicht gehaftet
Hier sieht man, wie das Menü zum Anlegen eines neuen Spielers aussieht.
Im hintergrund das restliche Hauptmenü. Sehr schlicht und langweilig, ich weiss. Später kommt noch was dazu.
Hier habe ich schon alle Notwendigen Daten eingetragen. Man beachte die Hintergrundfarbe des Logos, welche man frei wählen kann.
Neue Schwierigkeitsstufen kann man ganz einfach eintragen.
Auf diesem Bild sieht man das Spiel-Hauptmenü. Die Schwarzen Rechtecke werden später NICHT zu sehen sein. Sie dienen mommentan für mich als ausrichtungen für Klick-Events. Und damit ihr meine hässliche Stadt nicht ertragen müsst
Man beachte auch oben rechts die Siedebar, welche man ein und ausfahren kann. Dort kommt später noch der ein oder andere Button hin.
Mehr gibt es im momment (Offiziell) noch nicht
Sodele, man schriebt sich beim nächsten Eintrag.
Edit: So nebenbei: Bei EPS auf seinen Rechner läuft das Spiel so schnell, dass er immer Delay einbauen muss. Nicht nur Delay 1, sondern direkt Delay 10
Geknüppelkonzert... oder so
Mittwoch, 22. Oktober 2008 von Valnar
So, ich hätt nich gedacht das ich mal mich dazu bewege hier wieder was zu schreiben.
Eigentlich habe ich den Worklog getartet um mich für das Programmieren zu motivieren.
Klappt auch.
Nur für das Worklog-Eintrag-Schreiben fehlt mir die Motivation... *Ein Teufelskreis*
Ich war in der zweit vom letzten Eintrag bis jetzt nicht untätig.
Es steht nun ALLES was man zum anlegen einer neuen Firma/Eines neuen Spieler braucht.
Am Schwersten war die Ladefunktion für die Firmenlogos (und auch andere Bilder ).
Diese funktioniert zum glück aber jetzt.
Mommentan werden Bilder dafür aus dem mitgelieferten Ordner kommen, später soll noch im Dokumente und Einstellungen-Ordner ein Ordner kommen.
In der Funktion zum Laden der Bilder kann man eine mindest- und eine maximalgröße angeben
Ich habe eine Funktion geschrieben die die Logos überarbeitet, da ich festgestellt habe, dass es einige Probleme gab (und ich wollte etwas besonderes haben )
Sie unterstützt Transparente Farben, und als Hintergrund kann eine eigene Farbe gewählt werden!
Bilder gibt es eventuell Später, als nächstes nehme ich das Spiele-Hauptmenü in angriff.
Und wenn ich darauf keine Lust habe, ich progge nebenbei ein kleinen Editor für die EscapeGUI-Wordwrap-Funktion, da ich gemerkt habe, dass es zeitraubend ist diese sachen im spiel driekt zu testen.
Apropo escapeGUI - diese hab ich auch um einiges dem Spiel angepasst. Die Textdatei der Spielspezifischen änderungen (Sprich der änderungen die nur für das spiel und nicht als verbesserung für escapeGUI allgemein sind) beträgt schon 17 zeilen - 1 Zeile = 1 Block an Änderungen (Ich schreibe einfach die Von-Bis-Zeile daran, wenn code ersetzt wird in diesen zeilen commentiere ich die normalerweise aus)
Und insgesamt sind in diesen 17 Zeilen ca. 78 Zeilen Code vermerkt
Nebenbei: Ich suche IMMERNOCH Grafiker und so
Edit: Und bevor ich es vergesse: Sound ist ja auch dazu gekommen.
Mommentan 1 Sound für alle 3 Maustasten (ich könnte sogar jeder ihren eigenen zuweisen durch 1 zeilenänderung pro taste, gut durchdacht, wa), Sound beim Minimieren und Maximieren eines Fensters.
Und ein Errorsound, den ich am liebsten habe, da er einfach viel zu Typisch, aber irgendwie anders ist
Eine Background-Music-Loop ist auch drinnen, eine sehr schöne sogar
Alle Sounds hab ich von Soundsnap.com geklaut ääh genommen.
Edit2: Naja Bilder kommen mit dem nächsten eintrag - und der Kommt schneller als der Letzte (also dieser hier )
Nachdem ich einen Bug gefunden habe der meiner meinung nach nicht existieren dürfte und mir es nicht gewillt ist diesen zu beheben werde ich es später versuchen.
N8 an alle *uhrzeit schiel*
Oder halt "Good Morning, BBP!"
Bis denne
Eigentlich habe ich den Worklog getartet um mich für das Programmieren zu motivieren.
Klappt auch.
Nur für das Worklog-Eintrag-Schreiben fehlt mir die Motivation... *Ein Teufelskreis*
Ich war in der zweit vom letzten Eintrag bis jetzt nicht untätig.
Es steht nun ALLES was man zum anlegen einer neuen Firma/Eines neuen Spieler braucht.
Am Schwersten war die Ladefunktion für die Firmenlogos (und auch andere Bilder ).
Diese funktioniert zum glück aber jetzt.
Mommentan werden Bilder dafür aus dem mitgelieferten Ordner kommen, später soll noch im Dokumente und Einstellungen-Ordner ein Ordner kommen.
In der Funktion zum Laden der Bilder kann man eine mindest- und eine maximalgröße angeben
Ich habe eine Funktion geschrieben die die Logos überarbeitet, da ich festgestellt habe, dass es einige Probleme gab (und ich wollte etwas besonderes haben )
Sie unterstützt Transparente Farben, und als Hintergrund kann eine eigene Farbe gewählt werden!
Bilder gibt es eventuell Später, als nächstes nehme ich das Spiele-Hauptmenü in angriff.
Und wenn ich darauf keine Lust habe, ich progge nebenbei ein kleinen Editor für die EscapeGUI-Wordwrap-Funktion, da ich gemerkt habe, dass es zeitraubend ist diese sachen im spiel driekt zu testen.
Apropo escapeGUI - diese hab ich auch um einiges dem Spiel angepasst. Die Textdatei der Spielspezifischen änderungen (Sprich der änderungen die nur für das spiel und nicht als verbesserung für escapeGUI allgemein sind) beträgt schon 17 zeilen - 1 Zeile = 1 Block an Änderungen (Ich schreibe einfach die Von-Bis-Zeile daran, wenn code ersetzt wird in diesen zeilen commentiere ich die normalerweise aus)
Und insgesamt sind in diesen 17 Zeilen ca. 78 Zeilen Code vermerkt
Nebenbei: Ich suche IMMERNOCH Grafiker und so
Edit: Und bevor ich es vergesse: Sound ist ja auch dazu gekommen.
Mommentan 1 Sound für alle 3 Maustasten (ich könnte sogar jeder ihren eigenen zuweisen durch 1 zeilenänderung pro taste, gut durchdacht, wa), Sound beim Minimieren und Maximieren eines Fensters.
Und ein Errorsound, den ich am liebsten habe, da er einfach viel zu Typisch, aber irgendwie anders ist
Eine Background-Music-Loop ist auch drinnen, eine sehr schöne sogar
Alle Sounds hab ich von Soundsnap.com geklaut ääh genommen.
Edit2: Naja Bilder kommen mit dem nächsten eintrag - und der Kommt schneller als der Letzte (also dieser hier )
Nachdem ich einen Bug gefunden habe der meiner meinung nach nicht existieren dürfte und mir es nicht gewillt ist diesen zu beheben werde ich es später versuchen.
N8 an alle *uhrzeit schiel*
Oder halt "Good Morning, BBP!"
Bis denne
Erster Eintrag im Worklog der Lotto Mogul... ääh..
Mittwoch, 10. September 2008 von Valnar
Hallo Leute,
ich möchte euch heut mein Aktuelles Projekt vorstellen:
Lotto Mogul (Logo ->kommt irgendwann nomma )
In dem Spiel geht es darum eine Lottogesellschaft zu gründen und möglichst erfolgreich zu führen.
Features:
* Mehr oder minder realistische Lottogewinner
* Werbung
* Verträge mit Kioskketten aushandeln (Die die Lose verkaufen)
* Eigene Losbuden
* Schwierigkeitsstufe wählbar
* Spielzeit Wählbar
* Frameunabhängig dank Runden
Was eventuell kommt:
* Verschiedene Lottosysteme (6aus49 +Zusatzzahl, Oddset etc. pp.)
* KI (Falls sich später jemand erbarmt diese zu Programmieren)
* Multiplayer (Wenn sich Singleplayer durchsetzt...)
Programmieren werd ich dies mit Blitz3D (aber alles in 2D ) und der fabulösen escapeGUI von eps (http://www.east-power-soft.de/)
Was das Spiel bis jetzt kann:
Nicht viel, es kann mommentan eigentlich noch nichts, ausser ein paar GUI-Dinger erstellen.
Ich habe die letzten Tagen damit verbracht den Code etwas aufzuräumen und eine Funktion zu schreiben, die dynamisch Bilder aus Verzeichnissen ausliest.
Dadurch will ich den User die Möglichkeit geben, eigene Bilder wie zb. Firmenlogo zu benutzen.
Die Funktion testet darauf ob die Datei eine richtige Endung hat, prüft ob die Bild nicht defekt ist und liest aus, wie Breit und Hoch das Bild ist. Auch kann man eine maximale Höhe definieren.
Die Funktion hat größenteils EPS geschrieben, da ich zu blöd dafür bin
Nun werd ich die Tage noch alles richtig einbauen und dann müsste man ein neues Spiel erstellen können
Dann meld ich mich auch wieder, evtl mit Bildern und ohne Demo
Wer interesse hat zu helfen: Ich suche noch Leute für Grafik, Programmierung und Sounds!
Bei Fragen, Anregungen und Ideen -> PM
ich möchte euch heut mein Aktuelles Projekt vorstellen:
Lotto Mogul (Logo ->kommt irgendwann nomma )
In dem Spiel geht es darum eine Lottogesellschaft zu gründen und möglichst erfolgreich zu führen.
Features:
* Mehr oder minder realistische Lottogewinner
* Werbung
* Verträge mit Kioskketten aushandeln (Die die Lose verkaufen)
* Eigene Losbuden
* Schwierigkeitsstufe wählbar
* Spielzeit Wählbar
* Frameunabhängig dank Runden
Was eventuell kommt:
* Verschiedene Lottosysteme (6aus49 +Zusatzzahl, Oddset etc. pp.)
* KI (Falls sich später jemand erbarmt diese zu Programmieren)
* Multiplayer (Wenn sich Singleplayer durchsetzt...)
Programmieren werd ich dies mit Blitz3D (aber alles in 2D ) und der fabulösen escapeGUI von eps (http://www.east-power-soft.de/)
Was das Spiel bis jetzt kann:
Nicht viel, es kann mommentan eigentlich noch nichts, ausser ein paar GUI-Dinger erstellen.
Ich habe die letzten Tagen damit verbracht den Code etwas aufzuräumen und eine Funktion zu schreiben, die dynamisch Bilder aus Verzeichnissen ausliest.
Dadurch will ich den User die Möglichkeit geben, eigene Bilder wie zb. Firmenlogo zu benutzen.
Die Funktion testet darauf ob die Datei eine richtige Endung hat, prüft ob die Bild nicht defekt ist und liest aus, wie Breit und Hoch das Bild ist. Auch kann man eine maximale Höhe definieren.
Die Funktion hat größenteils EPS geschrieben, da ich zu blöd dafür bin
Nun werd ich die Tage noch alles richtig einbauen und dann müsste man ein neues Spiel erstellen können
Dann meld ich mich auch wieder, evtl mit Bildern und ohne Demo
Wer interesse hat zu helfen: Ich suche noch Leute für Grafik, Programmierung und Sounds!
Bei Fragen, Anregungen und Ideen -> PM