Hallo AutoIt-Community,
ich mache gerade das Snake-Tutorial von Marsi. Habe das Script allerdings ein wenig umgeschrieben. Als ich das Script getestet habe (Es ist noch nicht fertig) ist mir ein Fehler aufgefallen.
Folgendes:
Ich habe eine Schwierigkeits-Wahl, diese wirkt sich auf die Geschwindigkeit der Snake-Schlange aus. Nur leider verändert sich die Geschwindigkeit nicht. Ich habe mich schon selber auf die Fehlersuche begeben und konnte die entsprechenden Zeilen auskommentieren.
Ihr braucht also gar nicht großartig das ganze Script durchgehen, sondern einfach nur das anschauen was Kommentiert ist
Zudem habe ich MsgBoxen eingeaut, damit ihr seht was ich meine. Dazu müsst ihr allerdings das Script starten
Ich wäre euch zu tief's dankbar wenn ihr meinen Fehler findet. Ich werde wärend dessen weitersuchen, in der hoffnung das ich ihn finde
Hier das Script:
Spoiler anzeigen
#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#Include <Misc.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
AutoItSetOption('GUICloseOnESC', 0)
AutoItSetOption('GUIOnEventMode', 1)
AutoItSetOption('MustDeclareVars', 1)
Global Const $x_1 = 500
Global Const $y_1 = 500
Global $gui_1 = GUICreate('Snake', $x_1, $y_1)
WinSetTrans($gui_1, '', 255)
GUISetState(@SW_SHOW, $gui_1)
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit', $gui_1)
[/autoit] [autoit][/autoit] [autoit]Global $modus_1 = 0
Global $modus_2 = 0
Local $schwierigkeit = 0
_GDIPlus_Startup()
Global $graphic_1 = _GDIPlus_GraphicsCreateFromHWND($gui_1)
Global $bitmap_1 = _GDIPlus_BitmapCreateFromGraphics($y_1, $x_1, $graphic_1)
Global $context_1 = _GDIPlus_ImageGetGraphicsContext($bitmap_1)
Global $brush_1 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
GUIRegisterMsg(0x000F, '_zeichnen_spielfeld')
[/autoit] [autoit][/autoit] [autoit]_zeichnen_spielfeld()
_hauptscript()
Func _hauptscript()
While Sleep(10)
Switch $modus_1
Case 0
$schwierigkeit = _schwierigkeit() ;~ Hier liegt der Fehler, der Return Wert wird nicht abgespeichert.
MsgBox(0, 'Nach der Eingabe', $schwierigkeit) ;~ MsgBox gibt $schwierigkeit aus. >> 0 Dieser Wert soll aber nicht kommen.
$modus_1 = 1
$modus_2 = 0
Case 1
_spiel()
$modus_1 = 0
EndSwitch
WEnd
EndFunc
Func _exit()
_GDIPlus_BrushDispose($brush_1)
_GDIPlus_BitmapDispose($bitmap_1)
_GDIPlus_GraphicsDispose($graphic_1)
_GDIPlus_Shutdown()
Exit
EndFunc
Func _schwierigkeit()
_schwierigkeit_eingabe()
EndFunc
Func _spiel()
Local $schritt = 25
Local $snake[1][2]
$snake[0][0] = Random(0, $x_1 /$schritt -1, 1)*$schritt
$snake[0][1] = Random(0, $y_1 /$schritt -1, 1)*$schritt
Local $richtung = Random(1, 4, 1)
Local $links_1, $rechts_1, $oben_1, $unten_1, $links_2, $rechts_2, $oben_2, $unten_2
Local $counter = 0
While Sleep(10)
$counter += 1
$links_1 = _IsPressed(41)
$rechts_1 = _IsPressed(44)
$oben_1 = _IsPressed(57)
$unten_1 = _IsPressed(53)
$links_2 = _IsPressed(25)
$rechts_2 = _IsPressed(27)
$oben_2 = _IsPressed(26)
$unten_2 = _IsPressed(28)
If $links_1 = True Then $richtung = 1
If $rechts_1 = True Then $richtung = 2
If $oben_1 = True Then $richtung = 3
If $unten_1 = True Then $richtung = 4
If $links_2 = True Then $richtung = 1
If $rechts_2 = True Then $richtung = 2
If $oben_2 = True Then $richtung = 3
If $unten_2 = True Then $richtung = 4
If IsInt($counter /(10 -($schwierigkeit -1) *2)) Then
$counter = 0
_bewege_schlange($snake, $schritt, $richtung)
_zeichne_schlange($snake, $schritt)
EndIf
WEnd
EndFunc
Func _schwierigkeit_eingabe()
Local $gui_2 = GUICreate('', 200, 200, Default, Default, $WS_POPUP + $WS_BORDER)
Local $label_1 = GUICtrlCreateLabel('Schwierigkeitswahl:', 50, 30, 100, 20, $SS_CENTER)
Local $button_1 = GUICtrlCreateButton('Leicht', 50, 70, 100, 20)
Local $button_2 = GUICtrlCreateButton('Mittel', 50, 100, 100, 20)
Local $button_3 = GUICtrlCreateButton('Schwer', 50, 130, 100, 20)
Local $button_4 = GUICtrlCreateButton('Exit', 10, 170, 50, 20)
Local $button_5 = GUICtrlCreateButton('Hilfe', 140, 170, 50, 20)
GUISetState(@SW_SHOW, $gui_2)
GUICtrlSetOnEvent($button_1, '_leicht')
GUICtrlSetOnEvent($button_2, '_mittel')
GUICtrlSetOnEvent($button_3, '_schwer')
GUICtrlSetOnEvent($button_4, '_exit')
GUICtrlSetOnEvent($button_5, '_hilfe')
WinSetOnTop($gui_2, '', 1)
While $modus_2 = 0
Sleep(10)
WEnd
WinSetOnTop($gui_2, '', 0)
GUIDelete($gui_2)
MsgBox(0, 'In der Eingabe', $modus_2) ;~ MsgBox gibt $modus_2 korrekt aus!
Return $modus_2 ;~ Der Gedrückte Button wird Returnt. Wie man in der MsgBox darüber sehen kann, wurde $modus_2 korrekt umgesetzt. Returnt aber Falsch.
EndFunc
Func _leicht()
$modus_2 = 1 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Leicht' gedrückt wurde.
EndFunc
Func _mittel()
$modus_2 = 2 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Mittel' gedrückt wurde.
EndFunc
Func _schwer()
$modus_2 = 3 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Schwer' gedrückt wurde.
EndFunc
Func _hilfe()
EndFunc
Func _zeichnen_spielfeld()
_GDIPlus_GraphicsDrawImage($graphic_1, $bitmap_1, 0, 0)
_GDIPlus_GraphicsClear($graphic_1, 0xFF000000)
EndFunc
Func _zeichne_schlange($snake, $schritt)
Local $x_2, $y_2
Local $laenge = UBound($snake, 1)
For $count = 0 To $laenge -1
$x_2 = $snake[$count][0]
$y_2 = $snake[$count][1]
_GDIPlus_GraphicsFillRect($graphic_1, $x_2, $y_2, $schritt, $schritt, $brush_1)
Next
EndFunc
Func _bewege_schlange(ByRef $snake, $schritt, $richtung)
Local $ubound = UBound($snake, 1)
For $count = 0 To $ubound -1
Switch $richtung
Case 1
$snake[$count][0] -= $schritt
If $snake[$count][0] < 0 Then $snake[$count][0] = $x_1 -$schritt
Case 2
$snake[$count][0] += $schritt
If $snake[$count][0] = $x_1 Then $snake[$count][0] = 0
Case 3
$snake[$count][1] -= $schritt
If $snake[$count][1] < 0 Then $snake[$count][1] = $y_1 -$schritt
Case 4
$snake[$count][1] += $schritt
If $snake[$count][1] = $y_1 Then $snake[$count][1] = 0
EndSwitch
Next
EndFunc