Hallo,
um mal wieder rein zu kommen in das AutoIT Scripting habe ich eine kleine Snake Version gebastelt.
Keinerlei Inhalte sind irgendwo kopiert worden und ich habe das selbst geschrieben.
Im Kopf hatte ich dabei ein schlichtes Snake Spiel ala 5110 Handy Zeiten. Zuerst nahm ich kleine Bildchen aber mit den farbigen Labels geht es erstmal soweit das man keine Dateien mitgeben muss.
-Die Schlange wird nach jedem Fressen ein Stückchen schneller.
-Es geht auch um Zeit das heißt mehr Konkurrenzkampf und Spaß wer schneller mehr einsammelt.
(Pfeiltasten gedrückt halten dann beschleunigt sich die Schlange auf maximales Tempo)
-Beschleunigt man die Schlange entstehen Durchgänge durch die Schlange selbst. Zuerst dachte ich das es blöd ist doch ich finde es mittlerweile spannender.
-das maximale Tempo wird umso mehr man sammelt später erreicht.
-Es gibt Effektivitätspunkte (Formel aus Zeit und gesammelten Futter)
-Es gibt Gesamtpunkte
ACHTUNG: Die beiden Punktearten sinken mit der Zeit wenn man nichts einsammelt.
-sonst normaler Rand und das Spiel ist auch zu Ende wenn man in ein Schlangenteil reinläuft.
Verbesserungsvorschläge:
-Mit der Steuerung bin ich noch nicht 100% zufrieden.(jemand Vorschläge?)
-den letzten Teil der Schlange an die Stelle des zweiten Teils moven um so das moven aller Schlangenteile zu vermeiden. (Hoffe so das flackern wegzubekommen)
-Die Teile mit einem Rand ausrüsten und den Rand in korrekter Richtung ausrichten. (Dann erkennt man den Verlauf der Schlange besser)
-Habe noch andere Varianten im Kopf wie: Schlangenteile hängen sich nicht an die Schlange sondern bleiben an den Stellen an dem man das Futter gesammelt hat.
Oder Mit einem kleiner werdenden Rand nach X gesammelten. Auch normale Variante nur mit Hindernissen.
Ist ein FunProjekt daher stelle ich euch den Code zur Verfügung und jeder kann dann daraus sein Snakespiel fertigstellen. Es gibt zwar schon ähnliches doch habe ich die anderen Dinge nicht genau betrachtet daher kann ich nicht sagen was es da alles gibt.
Beispielbild:
[Blockierte Grafik: http://prntscr.com/5syomm]http://prntscr.com/5syomm
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
[/autoit][autoit][/autoit][autoit]$Form_Snaky = GUICreate("Snaky 1.0", 643, 526, 248, 171)
GUISetOnEvent($GUI_EVENT_CLOSE, "__Function_Exit")
$Main_Menu_Item = GUICtrlCreateMenu("Main")
$Main_Menu_New_Game = GUICtrlCreateMenuItem("New Game", $Main_Menu_Item)
GUICtrlSetOnEvent($Main_Menu_New_Game, "__Function_New_Game")
$Main_Menu_Pause = GUICtrlCreateMenuItem("Pause", $Main_Menu_Item)
GUICtrlSetOnEvent($Main_Menu_Pause, "__Function_Pause_Game")
GUISetBkColor(0x000000)
$Back_Pic = GUICtrlCreateLabel("",20, 20, 600, 440)
GUICtrlSetBkColor($Back_Pic,0xFFFFFF)
GUICtrlSetState($Back_Pic, $GUI_DISABLE)
$Pic_Food = GUICtrlCreateLabel("",200, 200, 20, 20)
GUICtrlSetBkColor($Pic_Food,0xFF0000)
$Price_Points = GUICtrlCreateLabel("Punkte:",20, 470, 70, 20)
$Price_Time = GUICtrlCreateLabel("Zeit:",100, 470, 130, 20)
$Price_Effecty = GUICtrlCreateLabel("Effekty:", 230, 470, 150, 20)
$Price_All = GUICtrlCreateLabel("Total:",370, 470,150, 20)
$Price_Speed_LvL = GUICtrlCreateLabel("LvL:",530, 470,60, 20)
Local $Price_Label = [$Price_Points,$Price_Time,$Price_Effecty,$Price_All,$Price_Speed_LvL]
For $i = 0 To UBound($Price_Label) -1
GUICtrlSetColor($Price_Label[$i],0xFFFFFF)
Next
Local $Pic_Snake[160]
For $i = 1 To 160 -1
$Pic_Snake[$i] = GUICtrlCreateLabel(" <>",300, 220, 20, 20)
GUICtrlSetBkColor($Pic_Snake[$i],0x228B22)
If $i > 1 Then
GUICtrlSetState($Pic_Snake[$i],$GUI_HIDE)
EndIf
Next
GUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit]Local $hDLL = DllOpen("user32.dll"), $Last_Pressed = 0,$Food_Counter = 0,$Match_Time = 0,$Your_Time = 0,$Pause_Game = 0, $Level_Speed = TimerInit()
Local $Snake_Pos[161][2]
__Function_Move_Food()
While 1
Sleep(20)
For $i = 1 To 160 -1
$xS = ControlGetPos($Form_Snaky,"",$Pic_Snake[$i])
$Snake_Pos[$i][0] = $xS[0]
$Snake_Pos[$i][1] = $xS[1]
If $Snake_Pos[1][0] = $Snake_Pos[$i+1][0] And $Snake_Pos[1][1] = $Snake_Pos[$i+1][1] And $i < $Food_Counter Then
__Function_Lost_Game()
EndIf
Next
If $Last_Pressed = 0 Or $Pause_Game = 1 Then
$Match_Time = TimerInit()
Sleep(50)
Else
If TimerDiff($Level_Speed) > 100-$Food_Counter*0.500 Then
__Function_Live_Stats()
__Function_Move_Snake()
$Level_Speed = TimerInit()
If $Snake_Pos[1][0] < 20 Or $Snake_Pos[1][0] > 600 Or $Snake_Pos[1][1] < 20 Or $Snake_Pos[1][1] > 440 Then
__Function_Lost_Game()
EndIf
EndIf
EndIf
If $Pause_Game = 0 Then
__Button_Pressing()
EndIf
__Check_Food_Catch()
WEnd
Func __Function_Live_stats()
GUICtrlSetData($Price_Label[0],"Points: " & $Food_Counter)
GUICtrlSetData($Price_Label[1],"Time: " & StringLeft(__Calculate_Live_Time(),10))
GUICtrlSetData($Price_Label[2],"Effekty: " & StringLeft((($Food_Counter/$Your_Time)*$Food_Counter),10))
GUICtrlSetData($Price_Label[3],"Total: " & StringLeft((($Food_Counter*$Food_Counter)/($Your_Time-$Food_Counter))*$Food_Counter,10))
GUICtrlSetData($Price_Label[4],"LvL: " & $Food_Counter*0.500/10)
EndFunc
Func __Calculate_Live_Time()
$Your_Time = TimerDiff($Match_Time)/1000
If StringInStr($Your_Time,".") Then
$Temp = StringSplit($Your_Time,".")
$Your_Time = $Temp[1]
EndIf
If $Your_Time < 60 Then
Return $Your_Time & " Sek. "
ElseIf $Your_Time >= 60 And $Your_Time <= 3600 Then
Return $Your_Time/60 & " Min. "
ElseIf $Your_Time >= 3600 Then
Return $Your_Time/60/60 & " Std. "
EndIf
EndFunc
Func __Function_Lost_Game()
MsgBox(0,"Its not your Day!","Du hast: " & $Food_Counter & " Punkte in " & __Calculate_Live_Time() & "erspielt." & @CR & "Effektivität: " & ($Food_Counter/$Your_Time)*$Food_Counter & @CR & "Gesamtpunktzahl: " & (($Food_Counter*$Food_Counter)/($Your_Time-$Food_Counter))*$Food_Counter)
__Function_New_Game()
EndFunc
Func __Check_Food_Catch()
$Food_Pos = ControlGetPos($Form_Snaky,"",$Pic_Food)
If $Snake_Pos[1][0] = $Food_Pos[0] And $Snake_Pos[1][1] = $Food_Pos[1] Then
If $Food_Counter < 160 Then
$Food_Counter += 1
ControlShow($Form_Snaky,"",$Pic_Snake[$Food_Counter+1])
__Function_Move_Food()
ElseIf $Food_Counter >= 158 Then
MsgBox(0,"Lucky Winner","Today is your Day!")
EndIf
EndIf
EndFunc
Func __Button_Pressing()
Sleep(20)
If $Food_Counter > 0 Then
If _IsPressed("25",$hDLL) And $Last_Pressed <> 3 Then
__Function_Move(1)
ElseIf _IsPressed("26",$hDLL) And $Last_Pressed <> 4 Then
__Function_Move(2)
ElseIf _IsPressed("27",$hDLL) And $Last_Pressed <> 1 Then
__Function_Move(3)
ElseIf _IsPressed("28",$hDLL) And $Last_Pressed <> 2 Then
__Function_Move(4)
EndIf
Else
If _IsPressed("25",$hDLL) Then
__Function_Move(1)
ElseIf _IsPressed("26",$hDLL) Then
__Function_Move(2)
ElseIf _IsPressed("27",$hDLL) Then
__Function_Move(3)
ElseIf _IsPressed("28",$hDLL) Then
__Function_Move(4)
EndIf
EndIf
EndFunc
Func __Function_Move($a)
If $a = 1 Then
If $Snake_Pos[1][0] > 20 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0]-20,$Snake_Pos[1][1],20,20)
EndIf
ElseIf $a = 2 Then
If $Snake_Pos[1][1] > 20 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0],$Snake_Pos[1][1]-20,20,20)
EndIf
ElseIf $a = 3 Then
If $Snake_Pos[1][0] < 600 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0]+20,$Snake_Pos[1][1],20,20)
EndIf
ElseIf $a = 4 Then
If $Snake_Pos[1][1] < 440 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0],$Snake_Pos[1][1]+20,20,20)
EndIf
EndIf
$Last_Pressed = $a
EndFunc
Func __Function_New_Game()
$Last_Pressed = 0
For $i = 2 To 160 -1
ControlHide($Form_Snaky,"",$Pic_Snake[$i])
Next
$Food_Counter = 0
__Function_Move_Food()
ControlMove($Form_Snaky,"",$Pic_Snake[1],300,220,20,20)
EndFunc
Func __Function_Pause_Game()
If $Pause_Game = 1 Then
$Pause_Game = 0
ElseIf $Pause_Game = 0 Then
$Pause_Game = 1
EndIf
EndFunc
Func __Function_Move_Snake()
If $Last_Pressed = 1 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0]-20,$Snake_Pos[1][1],20,20)
ElseIf $Last_Pressed = 2 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0],$Snake_Pos[1][1]-20,20,20)
ElseIf $Last_Pressed = 3 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0]+20,$Snake_Pos[1][1],20,20)
ElseIf $Last_Pressed = 4 Then
ControlMove($Form_Snaky,"",$Pic_Snake[1],$Snake_Pos[1][0],$Snake_Pos[1][1]+20,20,20)
EndIf
For $i = 2 To 160 -1
ControlMove($Form_Snaky,"",$Pic_Snake[$i],$Snake_Pos[$i-1][0],$Snake_Pos[$i-1][1],20,20)
If $i > $Food_Counter And $Food_Counter > 0 Then
ExitLoop
EndIf
Next
EndFunc
Func __Function_Move_Food()
Local $xF,$yF,$Temp=0
GUICtrlSetState($Pic_Food,$GUI_HIDE)
Do
$Temp=0
Do
$xF = Random(20,600,1)
Until Mod($xF,20) = 0
Do
$yF = Random(20,440,1)
Until Mod($yF,20) = 0
For $i = 1 To 160 -1
If $Snake_Pos[$i][0] = $xF And $Snake_Pos[$i][1] = $yF Then
$Temp = 1
EndIf
Next
Until $Temp = 0
ControlMove($Form_Snaky,"",$Pic_Food,$xF,$yF,20,20)
GUICtrlSetBkColor($Pic_Food,0xFF0000)
GUICtrlSetState($Pic_Food,$GUI_SHOW)
EndFunc
Func __Function_Exit()
Exit
EndFunc
Kritik bitte nur mit Verbesserungsvorschlag, sonstiges Feedback gerne.