Conan10: Das mit dem Einsatz werde ich einfügen.
@TheShadowAE: Die Symbole sind von iconspedia.com, die digitalen Zahlen sind von mir (mit IcoFX gemacht).
Conan10: Das mit dem Einsatz werde ich einfügen.
@TheShadowAE: Die Symbole sind von iconspedia.com, die digitalen Zahlen sind von mir (mit IcoFX gemacht).
Mein neuestes Projekt ist mal wieder ein Spiel.
Die Version 1.2 ist jetzt fertig.
Version 1.2:
- Bug: Mit jedem gestoppten Symbol, wurden die anderen immer schneller. Behoben! Danke Bernd670!
Version 1.1:
- Bug: Wenn man nach benutzen der Risikoleiter kein Geld mehr hatte (nicht gewonnen), dann konnte man noch ein Spiel spielen -> beseitigt
- Bug: Nach benutzen der Risikoleiter wurde auch nicht auf "Bank geknackt" geprüft -> beseitigt
- Bug: Der Start- sowie der Übernehmen-Button konnten per Tastatur ausgelöst werden, obwohl sie nicht sichtbar waren -> beseitigt
- Bug: Der Einsatz konnte nach Spielstart noch über die Tasten verändert werden -> beseitigt
Version 1.0:
- Spielregeln noch etwas geändert: eine oder zwei Bomben führen dazu, dass man die Runde verliert (Einsatz weg).
- Eigene GUI für die Gewinnmöglichkeiten
- Eigene GUI für die Tastaturbelegung
- Spielende bei "Bank geknackt" (bei mehr als 999999999)
- Bug bei der Gewinnauswertung beseitigt (bei 2 Kronen und einem Symbol gab es 4xEinsatz statt nur 3x)
- Risikoleiter noch etwas schwerer gemacht
Version 0.5:
- Sounds hinzugefügt
- Die Sounds können wahlweise auch deaktiviert werden (im Menü "Einstellungen")
Version 0.4:
- Bedienung nun auch per Tastatur möglich (Belegung siehe Menüpunkt "? / Tastaturbelegung")
- die Items sind nun PNGs und werden mit GDI+ angezeigt (Backpuffer, kein flackern mehr)
- Bug bei der Risikoleiter entfernt (x100 konnte nie erreicht werden)
- die Wechselgeschwindigkeit bei der Risikoleiter ist nun ansteigend mit jeder Stufe.
Version 0.3:
- Man konnte den Einsatz auf über 9999 erhöhen (wurde allerdings nicht angezeigt). Bug beseitigt!
- Spiel schwerer gemacht. Symbole wechseln schneller und Risikoleiter steht nur noch zur Auswahl, wenn man min. 1 Roulette-Symbol erhalten hat.
- Außerdem bekommt man bei drei Kronen jetzt nicht mehr den 100fachen, sondern nur noch den 10fachen Einsatz mal Anzahl der Kronen.
- Die Risikoleiter besitzt nun auch andere (niedrigere) Werte.
- Und damit der Jackpot nicht so schnell ansteigt, wird (bei verlorenem Spiel) nur noch der halbe Einsatz hinzugefügt.
- Die Werte (HiScore und Jackpot) in der Inidatei werden automatisch mit dieser neuen Version zurückgesetzt.
Version 0.2:
- HiScore funktioniert nun.
- Unter WindowsXP wird WM_PAINT nicht benutzt (verhindert das flackern der Icons).
- Der Einsatz kann nun auch stellenübergreifend erhöht/verringert werden.
- Risikoleiter etwas schwerer gemacht.
Screenshot:
Spielerklärung:
Man bekommt 1000€ und kann bestimmen wie viel man setzen möchte und klickt dann auf den Start-Button. Daraufhin erscheinen auf den 6 Feldern verschiedene Symbole. Diese wechseln ständig und man muss versuchen mindestens drei gleiche Symbole zu erreichen (Stop-Button anklicken). Dabei gibt es folgende Gewinnmöglichkeiten:
Die Kronen dienen auch als Joker. Sie können also auch mit Hüten oder den übrigen Symbolen kombiniert werden. Allerdings werden sie nicht als Bomben gewertet!
Hat man einen Gewinn erzielt und mindestens ein Roulette-Symbol erhalten, so besteht die Möglichkeit diesen Gewinn auf der "Risiko-Leiter" (Leertaste zum "hochdrücken") zu vervielfachen oder ihn wieder zu verlieren.
Wenn man nicht gewonnen hat, wird der halbe Einsatz dem Jackpot hinzugefügt.
Skript, Icons, Sounds und die Exedatei befinden sich im ZIP-Archiv (Anhang).
Ähem...[Hust]...heute ist der 18. und Gun-Food hat erst morgen Geburtstag. ![]()
Statt einer Grafik poste lieber Dein Skript. ![]()
Bis vor kurzem war doch diese Funktion noch Bestandteil der UDFs:
; #FUNCTION# ====================================================================================================================
; Name...........: _StringAddThousandsSep
; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
; Parameters ....: $sString - The string to be converted.
; $sThousands - Optional: The Thousands delimiter
; $sDecimal - Optional: The decimal delimiter
; Return values .: Success - The string with Thousands delimiter added.
; Author ........: SmOke_N (orignal _StringAddComma
; Modified.......: Valik (complete re-write, new function name)
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
Local $sResult = "" ; Force string
Local $rKey = "HKCU\Control Panel\International"
If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
If UBound($aNumber) = 2 Then
Local $sLeft = $aNumber[0]
While StringLen($sLeft)
$sResult = $sThousands & StringRight($sLeft, 3) & $sResult
$sLeft = StringTrimRight($sLeft, 3)
WEnd
$sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
EndIf
Return $sResult
EndFunc ;==>_StringAddThousandsSep
Die hatte ich mir vorsorglich mal archiviert, als ich gelesen habe, dass sie aus den UDFs entfernt wird.
Heute registriert und dann so eine Frage...hmm...Forenregeln schon gelesen?
Füg mal diese Zeile an den Anfang Deines Skripts ein:
[autoit]Opt('MustDeclareVars', 1)
[/autoit]
Dann kommst Du selbst drauf. ![]()
$WM_COMMAND war's, nicht $WM_SETFOCUS. Und so geht's:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate('Test', 520, 400)
$log = GUICtrlCreateEdit("", 10, 10, 500, 138, BitOR($ES_OEMCONVERT,$ES_AUTOVSCROLL,$ES_READONLY,$WS_HSCROLL,$WS_VSCROLL))
$hButton = GUICtrlCreateButton('ok', 10, 160, 100, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
Do
Until GUIGetMsg() = -3
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $log Then GUICtrlSetState($hButton, $GUI_FOCUS)
Return $GUI_RUNDEFMSG
EndFunc
Der Style $ES_READONLY verhindert einen Eintrag in das Input-Control. Wenn Du zusätzlich auch noch verhindern willst, dass das Control den Focus erhält, musst Du mit GUIRegisterMsg ($WM_SETFOCUS war es glaub ich) die Message abfangen und den Focus auf ein anderes Control setzen.
Dafür brauchst Du gar kein RegExp:
[autoit]
$string = "0123456789"
MsgBox(0, 'Ergebnis', StringMid($string, StringInStr($string, '234') + 3, 2))
Da fehlt zwar die Frage, aber ich schreib Dir mal ein Beispiel:
$a = Random(1, 9, 1)
$b = Random(1, 9, 1)
$erg = InputBox('Rechenaufgabe', 'Wie viel ist ' & $a & ' mal ' & $b & ' ?', '')
If $a * $b = $erg Then
MsgBox(0, 'Aufgabe', 'Richtig!')
Else
MsgBox(0, 'Aufgabe', 'Falsch!')
EndIf
Herzlich willkommen auch von mir.
Obwohl, aus Bielefeld...hmm...da könnten SIE dahinter stecken. ![]()
Mist, jetzt habe ich gerade eine Funktion dafür geschrieben: _FileCopyMoveRek
Na egal, dann gibt es halt noch eine Lösung. ![]()
Aufgrund einer Frage in "Hilfe und Unterstützung" habe ich mal eine Funktion geschrieben, mit der man Dateien rekursiv kopieren bzw. verschieben kann.
Dabei dürfen die gleichen Wildcards wie bei FileCopy/FileMove benutzt werden. Das Zielverzeichnis muss aber ein Verzeichnis sein (kein Dateiname).
#include-once
#include <File.au3>
; Beispiel:
_FileCopyMoveRek(@ScriptDir & '\*.txt', @ScriptDir & '\Textdateien\', ![]()
;===============================================================================
; Function Name: _FileCopyMoveRek($sSource, $sDest[, $iFlag])
; Description:: Verschiebt Dateien (Wildcards können benutzt werden) aus dem
; angegebenen Verzeichnis sowie aus dessen Unterverzeichnisse
; ins Zielverzeichnis.
; Parameter(s): $sSource = Verzeichnis und Dateiname(n)
; $sDest = Zielverzeichnis
; $sFlag = 0 (default) existierende Dateien werden umbenannt
; 1 überschreibt existierende Dateien
; 4 verschiebt die Dateien statt sie zu kopieren
; 8 Erstellt die Verzeichnisstruktur, falls nicht vorhanden
; Requirement(s): #include <File.au3>
; Return Value(s): bei Erfolg = 1
; bei Fehler wird @error = 1 (Pfad falsch angegeben)
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _FileCopyMoveRek($sSource, $sDest, $iFlag = 0)
Local $aSource, $aFiles, $aFolder
$aSource = StringRegExp($sSource, '(.+\\)(.+)', 3)
If @error Then Return SetError(1, 0, 0)
If StringRight($sDest, 1) <> '\' Then $sDest &= '\'
$aFiles = _FileListToArray($aSource[0], $aSource[1], 1)
If Not @error Then
For $i = 1 To $aFiles[0]
If BitAND($iFlag, 1) Then
If BitAND($iFlag, 4) Then
FileMove($aSource[0] & $aFiles[$i], $sDest & $aFiles[$i], BitAND($iFlag, 9))
Else
FileCopy($aSource[0] & $aFiles[$i], $sDest & $aFiles[$i], $iFlag)
EndIf
If @error Then Return SetError(@error, 0, 0)
Else
If BitAND($iFlag, 4) Then
FileMove($aSource[0] & $aFiles[$i], _GetUniqueFileName($sDest & $aFiles[$i]), BitAND($iFlag, 9))
Else
FileCopy($aSource[0] & $aFiles[$i], _GetUniqueFileName($sDest & $aFiles[$i]), $iFlag)
EndIf
If @error Then Return SetError(@error, 0, 0)
EndIf
Next
EndIf
$aFolder = _FileListToArray($aSource[0], '*', 2)
If Not @error Then
For $i = 1 To $aFolder[0]
_FileCopyMoveRek($aSource[0] & $aFolder[$i] & '\' & $aSource[1], $sDest, $iFlag)
If @error Then Return SetError(@error, 0, 0)
Next
EndIf
Return SetError(0, 0, 1)
EndFunc ;==>_FileCopyMoveRek
;===============================================================================
; Function Name: _GetUniqueFileName($sPath)
; Description:: Wenn der Dateiname bereits existiert wird ein Zähler
; in Form von: "_(1)" an den Dateinamen angehängt.
; Parameter(s): $sPath = kompletter Pfad der Datei
; Requirement(s): -
; Return Value(s): bei Erfolg = der (neue) Dateiname
; bei Fehler wird @error = 1 (Pfad falsch angegeben)
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _GetUniqueFileName($sPath)
Local $aPath, $sNumber = '', $iCount = 0
$aPath = StringRegExp($sPath, '(.+\\)(.+?)(?:_\(\d*\))*(\..+)', 3)
If @error Then Return SetError(1, 0, 0)
While FileExists($aPath[0] & $aPath[1] & $sNumber & $aPath[2])
$iCount += 1
$sNumber = '_(' & $iCount & ')'
WEnd
Return $aPath[0] & $aPath[1] & $sNumber & $aPath[2]
EndFunc ;==>_GetUniqueFileName
Mit StringReplace kannst Du einzelne Zeichen umwandeln.
Ich verstehe nicht so ganz, was Du vorhast, aber in einem Dateinamen darf der Backslash "\" nicht vorkommen (Teil des Dateipfads).
Und Du schaffst es nicht, das Beispiel auf den Event-Mode umzuschreiben?
Ganz einfach:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Opt('GUIOnEventMode', 1)
GUICreate('Listview-sortieren', 600, 400)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
$hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 10, 10, 580, 380)
GUICtrlSetOnEvent(-1, '_SortLV')
For $i = 0 To 9 ; zufällige ListView-Einträge erstellen
GUICtrlCreateListViewItem(Random(1000, 9999, 1) & '|' & Random(1000, 9999, 1) & '|' & Random(1000, 9999, 1), $hListView)
Next
_GUICtrlListView_RegisterSortCallBack($hListView) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
GUISetState()
While Sleep(1000)
WEnd
Func _End()
_GUICtrlListView_UnRegisterSortCallBack($hListView)
Exit
EndFunc ;==>_End
Func _SortLV()
_GUICtrlListView_SortItems($hListView, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
EndFunc ;==>_SortLV
Ungefähr so:
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ###
$Form1 = GUICreate("Form1", 615, 440, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 368, 96, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Deutsch|Englisch|Italienisch", "Deutsch")
$Input1 = GUICtrlCreateInput("", 168, 96, 121, 21)
$Label1 = GUICtrlCreateLabel("anmelden", 104, 96, 55, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Combo1
Switch GUICtrlRead($Combo1)
Case "Deutsch"
GUICtrlSetData($Label1, "anmelden")
Case "Englisch"
GUICtrlSetData($Label1, "login")
Case "Italienisch"
GUICtrlSetData($Label1, "annunciare") ; ist eine Übersetzung von woerterbuch.info
EndSwitch
EndSwitch
WEnd
Für die EPOCH-Zeit musst Du nicht die Powershell bemühen. AutoIt kann das doch auch:
[autoit]
#include <Date.au3>
; Calculated the number of seconds since EPOCH (1970/01/01 00:00:00)
$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
MsgBox( 4096, "", "Number of seconds since EPOCH: " & $iDateCalc )
Das Beispiel stammt übrigens aus der Hilfe zu "_DateDiff". ![]()