#include <Misc.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <File.au3>
;#include <email.au3>

HotKeySet("!x","_PointReplace")

#Region Konstant
$GUI_W = 250
$GUI_H = 250
$X = 125
$Y = 125
$SPEED = 5
$BACKJUMP = 25
$SCORE = 0
$X_POINT = Random(10,$GUI_W - 10)
$Y_POINT = Random(10,$GUI_H - 10)
$LIMIT_COUNTER = 0
$X2 = 50
$Y2 = 50
$SCORE2 = 0
#Endregion Konstant

$SLEEPDELAY = 10
$KOLLISIONMINUS_ENABLE = 1
$MINUS = 1
$BONUS_PROBABILITY = 5
$LIMIT = 10
$TIME2PLAY = 60 ;In Sekunden


;Timeout
If $CmdLine[0] <> 0 Then _TimeOut()
	

GUICreate("Spiel",$GUI_W,$GUI_H)
$FISCH = GUICtrlCreateLabel("<°(((><",125,125)
$SCORE_OUTPUT = GUICtrlCreateLabel("Score: " & $SCORE,0,0,100,20)
;$FISCH2 = GUICtrlCreateLabel("<°(((><",50,50)
;$SCORE_OUTPUT2 = GUICtrlCreateLabel("Score: " & $SCORE,0,20,100,20)

$POINT = GUICtrlCreateLabel("o",$X_POINT,$Y_POINT)
$BONUS = GUICtrlCreateLabel("BONUS" & @CR & "+100",75,50,200,200)
GUICtrlSetFont($BONUS,25,400,0,"Comic Sans MS")
GUICtrlSetState($BONUS,$GUI_HIDE)
GUISetState()
GUICtrlSetColor($FISCH,0xFFFFFF)
;GUICtrlSetColor($POINT,0xFFFF00)
GUISetBkColor(0x0000FF)
_BKColor(-1,$POINT, 0xFFFF00)
_BKColor(-1,$SCORE_OUTPUT)
;_BKColor(-1,$SCORE_OUTPUT2)
_BKColor(-1,$BONUS)
_BKColor(-1,$FISCH, 0xFFFFFF)
;_BKColor(-1,$FISCH2,0x00FFFF)

ShellExecute(@ScriptName,"TIME")

While 1
	$msg = GUIGetMsg()
	IF $msg = $GUI_EVENT_CLOSE Then _ExitGame()
	IF _IsPressed("25") Then _LeftArrow()
	IF _IsPressed("26") Then _UpArrow()
	IF _IsPressed("27") Then _RightArrow()
	IF _IsPressed("28") Then _DownArrow()
;	IF _IsPressed("41") Then _LeftA()
;	IF _IsPressed("57") Then _UpW()
;	IF _IsPressed("44") Then _RightD()
;	IF _IsPressed("53") Then _DownS()		
	_IsPoint()
	_Kollision()	
	_Limit()
	If FileExists(@TempDir & "\timeout.txt") Then _EndTimeOut()
WEnd

Func _LeftArrow()
	GUICtrlSetData($FISCH,"<°(((><")
	$COUNTER = 0
	Do
	$X = $X - 1
	$Y = $Y	
	GUICtrlSetPos($FISCH,$X,$Y)
	$COUNTER = $COUNTER + 1
	Until $COUNTER == $SPEED
	Sleep($SLEEPDELAY)
EndFunc	

Func _UpArrow()
	$COUNTER = 0
	Do
	$X = $X 
	$Y = $Y - 1		
	GUICtrlSetPos($FISCH,$X,$Y)
	$COUNTER = $COUNTER + 1
	Until $COUNTER == $SPEED
	Sleep($SLEEPDELAY)
EndFunc	

Func _RightArrow()
	GUICtrlSetData($FISCH,"><)))°>")	
	$COUNTER = 0
	Do
	$X = $X + 1
	$Y = $Y		
	GUICtrlSetPos($FISCH,$X,$Y)
	$COUNTER = $COUNTER + 1
	Until $COUNTER == $SPEED
	Sleep($SLEEPDELAY)
EndFunc	

Func _DownArrow()
	$COUNTER = 0
	Do
	$X = $X
	$Y = $Y + 1		
	GUICtrlSetPos($FISCH,$X,$Y)
	$COUNTER = $COUNTER + 1
	Until $COUNTER == $SPEED
	Sleep($SLEEPDELAY)
EndFunc	

Func _Kollision();---------------------------------Kollision
	If $X = 0 Then _KollisionLeft()
	If $Y = 0 Then _KollisionUp()
	If $X = $GUI_W - 25 Then _KollisionRight()
	If $Y = $GUI_H - 15 Then _KollisionDown()	
	If $X2 = 0 Then _KollisionLeft_2()
	If $Y2 = 0 Then _KollisionUp_2()
	If $X2 = $GUI_W - 25 Then _KollisionRight_2()
	If $Y2 = $GUI_H - 15 Then _KollisionDown_2()	
EndFunc		
		
		
Func _KollisionLeft()
	$X = $X + $BACKJUMP
	$Y = $Y
	GUICtrlSetPos($FISCH,$X,$Y)
	_KollisionMinus(1)
EndFunc	

Func _KollisionUp()
	$X = $X
	$Y = $Y + $BACKJUMP
	GUICtrlSetPos($FISCH,$X,$Y)
	_KollisionMinus(1)	
EndFunc	

Func _KollisionRight()
	$X = $X - $BACKJUMP
	$Y = $Y
	GUICtrlSetPos($FISCH,$X,$Y)
	_KollisionMinus(1)	
EndFunc	

Func _KollisionDown()
	$X = $X
	$Y = $Y - $BACKJUMP
	GUICtrlSetPos($FISCH,$X,$Y)
	_KollisionMinus(1)	
EndFunc	

Func _IsPoint()
	If $X >= $X_POINT - 30 And $X <= $X_POINT + 5 And $Y >= $Y_POINT - 10 And $Y <= $Y_POINT + 5 Then _Point()
	If $X2 >= $X_POINT - 30 And $X2 <= $X_POINT + 5 And $Y2 >= $Y_POINT - 10 And $Y2 <= $Y_POINT + 5 Then _Point_2()		
EndFunc

Func _Point()
	$SCORE = $SCORE + 10
	GUICtrlSetData($SCORE_OUTPUT,"Score: " & $SCORE)
	$X_POINT = Random(10,$GUI_W - 10)
	$Y_POINT = Random(10,$GUI_H - 10)
	GUICtrlSetPos($POINT,$X_POINT,$Y_POINT)
	If Random(0,$BONUS_PROBABILITY,1) = Random(0,$BONUS_PROBABILITY,1) Then
		GUICtrlSetState($BONUS,$GUI_SHOW)
		GUISetBkColor(0xFF0000)
		Sleep(1000)
		GUISetBkColor(0x0000FF)
		Sleep(1000)
		GUISetBkColor(0xFF0000)
		Sleep(1000)
		GUISetBkColor(0x0000FF)
		GUICtrlSetState($BONUS,$GUI_HIDE)
		$SCORE = $SCORE + 100
		GUICtrlSetData($SCORE_OUTPUT,"Score: " & $SCORE)
	EndIf	
	;$LIMIT_COUNTER = $LIMIT_COUNTER + 1
EndFunc	








Func _TimeOut()
	Sleep($TIME2PLAY * 1000)
	_FileCreate(@TempDir & "\timeout.txt")
	Exit
EndFunc


Func _EndTimeOut()
	$SUBMIT = MsgBox(36,"Ende","Die Zeit ist um! Dein Score beträgt:" & @CR & $SCORE & @CR & "Score senden?")
	FileDelete(@TempDir & "\timeout.txt")
	If $SUBMIT = 6 Then 
	$USERNAME = InputBox("","Name (Am besten wie im Forum zur Identifikation:)") 
	_INetSmtpMailCom("smtp.web.de","Fischgame Highscore","fischgame.autoit@web.de","sebastianedvunt@aol.de","Score","Benutzername: " & $USERNAME & @CR & "Punkte: " & $SCORE & @CR & "Bonuschance: " & $BONUS_PROBABILITY & @CR & "Zeit: " & $TIME2PLAY,"","","","Normal","fischgame.autoit@web.de","fischgame",25,0)		
	EndIf
	If $SUBMIT = 7 Then MsgBox(0,"","Score wird NICHT gesendet!")
	Exit		
EndFunc	














;===========================================================================
; Function      : _BKColor( backgroundcolor, controlID, textcolor )
; Description   : Sets the background color of a control. (Transparent Label)
;               : Sets the text color of a control.
; Author        : Thunder-man (Frank Michalski)
; Date          : 19. September 2007
; Version       : V 1.20
; Example  :     _BKColor()                                :Transparent
;                _BKColor( -1, $MyLabel)                   :Transparent
;                _BKColor(0x00ff00)                        :Color Green
;                _BKColor(0x00ff00, $MyLabel)              :Color Green
;                _BKColor( -1, $MyLabel, 0x00ff00)    :Text Color Green
;===========================================================================
Func _BKColor($BackColor_ = "", $GuiID_ = -1, $Textcolor_ = 0x000000)
    If $BackColor_ = "" or $BackColor_ = -1 Then
    GUICtrlSetBkColor($GuiID_, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor($GuiID_, $Textcolor_)
Else
    GUICtrlSetBkColor($GuiID_, $BackColor_)
    GUICtrlSetColor($GuiID_, $Textcolor_)
EndIf
EndFunc   ;==>_BKColor
;=======================================================================

















;neutral
Func _KollisionMinus($PLAYER)
If $KOLLISIONMINUS_ENABLE = 1 Then
	If $PLAYER = 1 Then
		$SCORE = $SCORE - $MINUS
		GUICtrlSetData($SCORE_OUTPUT,"Score: " & $SCORE)
	EndIf	
	If $PLAYER = 2 Then
		$SCORE2 = $SCORE2 - $MINUS
		GUICtrlSetData($SCORE_OUTPUT2,"Score: " & $SCORE2)
	EndIf		
EndIf
EndFunc


Func _Limit()
	If $LIMIT <> 0 Then 
		If $LIMIT_COUNTER = $LIMIT Then
			If $SCORE > $SCORE2 Then 
				MsgBox(0,"Fisch","Spieler 1 gewinnt!" & @CR & @CR & "Punkte Spieler 1: " & $SCORE & @CR & "Punkte Spieler 2: " & $SCORE2) 
				Exit
				EndIf
			If $SCORE < $SCORE2 Then 
				MsgBox(0,"Fisch","Spieler 2 gewinnt!" & @CR & @CR & "Punkte Spieler 1: " & $SCORE & @CR & "Punkte Spieler 2: " & $SCORE2)	
				Exit
				EndIf
			If $SCORE = $SCORE2 Then 
				MsgBox(0,"Fisch","Unentschieden! Der Zufall entscheidet..." & @CR & @CR & "Punkte Spieler 1: " & $SCORE & @CR & "Punkte Spieler 2: " & $SCORE2 & @CR & @CR & "Es gewinnt Spieler " & Random(1,2,1) & "!")
				Exit
			EndIf	
		EndIf
	EndIf
EndFunc	

Func _PointReplace()
	$X_POINT = Random(10,$GUI_W - 10)
	$Y_POINT = Random(10,$GUI_H - 10)
	GUICtrlSetPos($POINT,$X_POINT,$Y_POINT)
EndFunc	




Func _ExitGame()
	FileDelete(@TempDir & "\timeout.txt")
	Exit
EndFunc	



Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
            ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment ($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""
EndFunc   ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc   ;==>MyErrFunc

