Moin
Es gibt schon einige Lottoversuchsautomaten hier im Forum.
Auch relativ schnelle.
Damit ich auf der Welle mal mitschwimme habe ich auch einen gebastelt.
Features:
- Keine Doppelten Lottozahlen
- Berechnung der Wahrscheinlichkeit jeder Lottozahl
- (bei mir) 5200 Versuche pro Sekunde
- Hintergrundmodus der die cpu etwas verschnaufen lässt. (Ist dann halt langsamer...^^)
- blubb
Spoiler anzeigen
#include <GDIPlus.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $Berechnen = False ; True = Es Wird Berechnet, Sonst Leerlauf
Global $Breite = 400, $Hoehe = 200
Global $hGUI = GUICreate('Lotto Automat (von Mars(i) :P)', $Breite, $Hoehe, _Center(0, $Breite), _Center(1, $Hoehe), -1, 0x40080)
GUISetOnEvent(-3, '_Exit', $hGUI)
WinSetTrans($hGUI, '', 255)
Global $hButton = GUICtrlCreateButton('Starten', 5, 5, 100, 20)
GUICtrlSetOnEvent(-1, '_Go')
Global $hCheckBox = GUICtrlCreateCheckbox('Hintergrund', 110, 5, 100, 20)
GUICtrlSetOnEvent(-1, '_Hintergrund')
Global $Input[6]
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To 5 Step 1
$Input[$i] = GUICtrlCreateEdit($i + 1, 2 + $i * $Breite / 6, $Hoehe - 25, $Breite / 6 - 4, 20, 1, 0)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetColor(-1, 0x8888FF)
GUICtrlSetFont(-1, 13, 400, 0, 'Courier New', 5)
Next
Global $Hintergrund = False
Global $Versuche = 0
Global $Zahlen[50]
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Breite, $Hoehe - 60, $hGraphics)
Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
Global $tLayout1 = _GDIPlus_RectFCreate(5, 5, $Breite / 3 - 10, $Hoehe - 70)
Global $tLayout2 = _GDIPlus_RectFCreate($Breite / 3 + 5, 5, $Breite / 3 + 15, $Hoehe - 70)
Global $tLayout3 = _GDIPlus_RectFCreate(2 * $Breite / 3 + 25, 5, $Breite / 3 - 25, $Hoehe - 70)
Global $hFamily = _GDIPlus_FontFamilyCreate('Courier New')
Global $hFont = _GDIPlus_FontCreate($hFamily, ![]()
Global $hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 0)
Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF4040E0)
Global $Versuche_sek = 0
[/autoit] [autoit][/autoit] [autoit]AdlibRegister('_Versuche_sek', 1000)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGUI)
[/autoit] [autoit][/autoit] [autoit]Global $Zahl[6]
Global $String1 = '', $String2 = '', $String3 = ''
Global $Gewinne[6]
Global $Tipp[6]
_LottoZahlen()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 30)
Func _Gewinn()
Local $t[6]
For $i = 0 To 5 Step 1
For $x = 0 To 5 Step 1
If $Tipp[$i] = $Zahl[$x] Then $t[$i] = 1
Next
Next
Switch _Summe($t)
Case 1
$Gewinne[0] += 1
Case 2
$Gewinne[1] += 1
Case 3
$Gewinne[2] += 1
Case 4
$Gewinne[3] += 1
Case 5
$Gewinne[4] += 1
Case 6
$Gewinne[5] += 1
EndSwitch
EndFunc ;==>_Gewinn
Func _Summe($a)
Local $b
For $i = 0 To 5 Step 1
$b += $a[$i]
Next
Return $b
EndFunc ;==>_Summe
While 1
Switch $Berechnen
Case True
$Versuche += 1
_LottoZahlen()
_Gewinn()
If $Hintergrund Then
If Round($Versuche / 100) = $Versuche / 100 Then
_Stats()
Sleep(20)
EndIf
Else
If Round($Versuche / 2000) = $Versuche / 2000 Then _Stats()
EndIf
Case Else
Sleep(10)
EndSwitch
WEnd
Func _Stats()
_GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)
_GDIPlus_GraphicsDrawStringEx($hBackbuffer, $String1, $hFont, $tLayout1, $hFormat, $hBrush)
_GDIPlus_GraphicsDrawStringEx($hBackbuffer, $String2, $hFont, $tLayout2, $hFormat, $hBrush)
_GDIPlus_GraphicsDrawStringEx($hBackbuffer, $String3, $hFont, $tLayout3, $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 30)
EndFunc ;==>_Stats
Func _Versuche_sek()
Static $Versuche_alt = $Versuche
Local $a
$Versuche_sek = $Versuche - $Versuche_alt
$Versuche_alt = $Versuche
$String1 = ''
$String2 = ''
$String3 = ''
$String1 &= 'Versuche/Sek: ' & $Versuche_sek & @CRLF & @CRLF
$String2 &= 'Gesamt: ' & $Versuche & @CRLF & @CRLF
$String3 &= 'Häufigkeit: ' & @CRLF & @CRLF
For $i = 0 To 5 Step 1
$String1 &= ' Zahl ' & $i + 1 & ' = ' & $Zahl[$i] & @CRLF
Switch $i
Case 0
$String2 &= ' ' & $i + 1 & ' Richtiger: ' & $Gewinne[$i] & @CRLF
Case Else
$String2 &= ' ' & $i + 1 & ' Richtige: ' & $Gewinne[$i] & @CRLF
If $Gewinne[$i] > 0 And $i = 5 Then
MsgBox(0, 'Herzlichen Glückwunsch', 'Sie haben grade einen 6er im Lotto gemacht.' & @CRLF & 'Dafür wurden ' & $Versuche & ' Versuche benötigt.')
exit
endif
EndSwitch
[/autoit] [autoit][/autoit] [autoit]$a = Round($Gewinne[$i] / $Versuche * 100, 5)
If $a < 10 Then $a = '0' & $a
;~ For $o = 0 To 3 Step 1
If StringLen($a) < 8 Then $a &= '0'
;~ Next
$String3 &= ' ( ' & $a & '% )' & @CRLF
Next
[/autoit] [autoit][/autoit] [autoit]$String1 &= @CRLF & 'Unten Tipp abgeben'
$String2 &= @CRLF & '(C) Mars(i).'
EndFunc ;==>_Versuche_sek
[/autoit] [autoit][/autoit] [autoit]Func _Hintergrund()
Switch GUICtrlRead($hCheckBox)
Case 1
$Hintergrund = True
Case 4
$Hintergrund = False
EndSwitch
EndFunc ;==>_Hintergrund
Func _ValidInput()
Local $a[6], $ret[6]
For $i = 0 To 5 Step 1
$a[$i] = GUICtrlRead($Input[$i])
For $x = 1 To 49 Step 1
If $a[$i] = $x Then
$ret[$i] = 1
ExitLoop
Else
$ret[$i] = 0
EndIf
Next
If $ret[$i] = 0 Then Return 0
Next
$Tipp = $a
Local $Temp[50]
For $i = 0 To 5 Step 1
$Temp[$a[$i]] += 1
If $Temp[$a[$i]] > 1 Then Return 0 ;Ist eine Zahl Doppelt ?
Next
Return 1
EndFunc ;==>_ValidInput
Func _Go()
Switch $Berechnen
Case False
If _ValidInput() Then
ToolTip('')
$Berechnen = True
GUICtrlSetData($hButton, 'Stop')
For $i = 0 To 5 Step 1
GUICtrlSetStyle($Input[$i], 2048)
Next
Else
ToolTip('Nicht unterstützer Inhalt')
EndIf
Case True
$Berechnen = False
GUICtrlSetData($hButton, 'Starten')
For $i = 0 To 5 Step 1
GUICtrlSetStyle($Input[$i], 1)
Next
EndSwitch
EndFunc ;==>_Go
Func _Exit()
AdlibUnRegister('_Versuche_sek')
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_FontDispose($hFont)
_GDIPlus_GraphicsDispose($hBackbuffer)
_GDIPlus_ImageDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Func _Center($a, $b)
If $a = 0 Then Return @DesktopWidth / 2 - $b / 2
Return @DesktopHeight / 2 - $b / 2
EndFunc ;==>_Center
Func _LottoZahlen()
Local $tmp = Random(1, 49, 1)
$Zahl[0] = $tmp
$Zahlen[$tmp] += 1
Do
$tmp = Random(1, 49, 1)
Until $tmp <> $Zahl[0]
$Zahl[1] = $tmp
$Zahlen[$tmp] += 1
Do
$tmp = Random(1, 49, 1)
Until $tmp <> $Zahl[0] And $tmp <> $Zahl[1]
$Zahl[2] = $tmp
$Zahlen[$tmp] += 1
Do
$tmp = Random(1, 49, 1)
Until $tmp <> $Zahl[0] And $tmp <> $Zahl[1] And $tmp <> $Zahl[2]
$Zahl[3] = $tmp
$Zahlen[$tmp] += 1
Do
$tmp = Random(1, 49, 1)
Until $tmp <> $Zahl[0] And $tmp <> $Zahl[1] And $tmp <> $Zahl[2] And $tmp <> $Zahl[3]
$Zahl[4] = $tmp
$Zahlen[$tmp] += 1
Do
$tmp = Random(1, 49, 1)
Until $tmp <> $Zahl[0] And $tmp <> $Zahl[1] And $tmp <> $Zahl[2] And $tmp <> $Zahl[3] And $tmp <> $Zahl[4]
$Zahl[5] = $tmp
$Zahlen[$tmp] += 1
EndFunc ;==>_LottoZahlen
lg
Mars(i)