#NoTrayIcon
#include <misc.au3>
#include <GUIConstants.au3>

FileInstall("C:\Dokumente und Einstellungen\Besitzer\Desktop\Bot\eigene spiele\jump\jump_data\jump.jpg",@scriptdir&"\jump_data\")
FileInstall("C:\Dokumente und Einstellungen\Besitzer\Desktop\Bot\eigene spiele\jump\jump_data\highscore.txt",@scriptdir&"\jump_data\")
opt("mousecoordmode",2)
opt("guioneventmode",2)
GUICreate("jump.      a game by killz....",800,500)
$xposition=250
$yposition=250
$ygeschwindigkeit=0
$xgeschwindigkeit=0
$air=0
$options=1
$score=0
$highscore=FileReadLine(@scriptdir&"\jump_data\highscore.txt",1)
$time=0
$timer=0
$count=0

$luftwiederstand=99
$sprungwiederstand=90
$reibungswiederstand=90
$anzahlsteine=20
$heufigkeitsteine=400
$mindestlaengesteine=50
$hoechstlaengesteine=100
$geschwindigkeitsteine=4
$fallbeschleunigung=1
$sprunghoehe=25
$linkrechtsbeschleunigung=1
$rechengeschwindigkeit=10
$mausbewegung=0
$steinefallen=1
$marker=1
global $stein[$anzahlsteine]
global $xstein[$anzahlsteine]
global $ystein[$anzahlsteine]
global $breitestein[$anzahlsteine]

$3=GUICtrlCreateLabel("",500,0,300,45)
$4=GUICtrlCreateLabel("",500,0,5,500)
$1=GUICtrlCreateLabel("score:",505,5,200,20)
$2=GUICtrlCreateLabel("highscore:",505,25,200,20)
GUICtrlCreateLabel("einstellungen:",505,45,200,20)
GUICtrlCreateLabel("drag/drop des balles:",505,65,200,20)
GUICtrlCreateLabel("fallende steine:",505,85,200,20)
GUICtrlCreateLabel("anzahl der steine:",505,105,200,20)
GUICtrlCreateLabel("häufigkeit der steine:",505,125,200,20)
GUICtrlCreateLabel("mindestlänge der steine:",505,145,200,20)
GUICtrlCreateLabel("höchstlänge der steine:",505,165,200,20)
GUICtrlCreateLabel("geschwindigkeit der steine:",505,185,200,20)
GUICtrlCreateLabel("luftwiderstand:",505,205,200,20)
GUICtrlCreateLabel("sprungwiderstand:",505,225,200,20)
GUICtrlCreateLabel("reibungswiderstand:",505,245,200,20)
GUICtrlCreateLabel("sprunghöhe bei einfachem sprung:",505,265,200,20)
GUICtrlCreateLabel("beschleunigung nach links/rechts:",505,285,200,20)
GUICtrlCreateLabel("fallbeschleunigung des balles:",505,305,200,20)
GUICtrlCreateLabel("millisekunden pro rechendurchlauf:",505,325,200,20)
GUICtrlCreateLabel("marker wenn außerhalb des bildschirms:",505,345,200,20)

$mausbewegunginput=GUICtrlCreatecheckbox("",705,65,90,20)
$steinefalleninput=GUICtrlCreatecheckbox("",705,85,90,20)
$anzahlsteineinput=GUICtrlCreateInput($anzahlsteine,705,105,90,20)
$heufigkeitsteineinput=GUICtrlCreateInput($heufigkeitsteine,705,125,90,20)
$mindestlaengesteineinput=GUICtrlCreateInput($mindestlaengesteine,705,145,90,20)
$hoechstlaengesteineinput=GUICtrlCreateInput($hoechstlaengesteine,705,165,90,20)
$geschwindigkeitsteineinput=GUICtrlCreateInput($geschwindigkeitsteine,705,185,90,20)
$luftwiederstandinput=GUICtrlCreateInput($luftwiederstand,705,205,90,20)
$sprungwiederstandinput=GUICtrlCreateInput($sprungwiederstand,705,225,90,20)
$reibungswiederstandinput=GUICtrlCreateInput($reibungswiederstand,705,245,90,20)
$sprunghoeheinput=GUICtrlCreateInput($sprunghoehe,705,265,90,20)
$linkrechtsbeschleunigunginput=GUICtrlCreateInput($linkrechtsbeschleunigung,705,285,90,20)
$fallbeschleunigunginput=GUICtrlCreateInput($fallbeschleunigung,705,305,90,20)
$rechengeschwindigkeitinput=GUICtrlCreateInput($rechengeschwindigkeit,705,325,90,20)
$markerinput=GUICtrlCreateCheckbox("",705,345,90,20)

global $versteckerbalken=GUICtrlCreatepic(@scriptdir&"\jump_data\jump.jpg",500,45,300,455)
$ball=GUICtrlCreatelabel("",$xposition,$yposition,20,20)
$xmarker=GUICtrlCreatelabel("",$xposition+8,0,4,20,0x04)
$ymarker=GUICtrlCreatelabel(abs($xposition),$xposition+12,10,30,20)
$scoreboard=GUICtrlCreateLabel($score,705,5,90,20)
$highscoreboard=GUICtrlCreateLabel($highscore,705,25,90,20)

GUICtrlSetColor($ymarker,0x716F63)
GUICtrlSetColor($1,0xECE9D8)
GUICtrlSetColor($2,0xECE9D8)
GUICtrlSetBkColor($3,0x716F63)
GUICtrlSetBkColor($4,0x716F63)
GUICtrlSetColor($scoreboard,0xECE9D8)
GUICtrlSetColor($highscoreboard,0xECE9D8)
GUICtrlSetBkColor($1,0x716F63)
GUICtrlSetBkColor($2,0x716F63)
GUICtrlSetBkColor($ball,0x716F63)
GUICtrlSetBkColor($scoreboard,0x716F63)
GUICtrlSetBkColor($highscoreboard,0x716F63)
GUISetBkColor(0xECE9D8)
GUICtrlSetState($steinefalleninput,$GUI_CHECKED)
GUICtrlSetState($markerinput,$GUI_CHECKED)
options()
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
hotkeyset("{space}","sprung")
hotkeyset("o","options")
GUISetState()


while 1
	if not winactive("jump.      a game by killz....") then hotkeyset("o")
	if winactive("jump.      a game by killz....") then hotkeyset("o","options")

	$score=$score+1*$geschwindigkeitsteine
	if $score>$highscore then $highscore=$score


	for $q=0 to $anzahlsteine-1
		if random(1,$heufigkeitsteine,1)=1 and $stein[$q]=0 and $steinefallen=1 then
			$breitestein[$q]=Random($mindestlaengesteine,$hoechstlaengesteine)
			$xstein[$q]=Random(0,500-$breitestein[$q])
			$ystein[$q]=0
			$stein[$q]= guictrlcreatelabel("s",$xstein[$q],$ystein[$q],$breitestein[$q],5)
			GUICtrlSetBkColor($stein[$q],0x716F63)
		EndIf

		if not $stein[$q]=0 then
			$ystein[$q]=$ystein[$q]+$geschwindigkeitsteine
			GUICtrlSetPos($stein[$q],$xstein[$q],$ystein[$q])
		EndIf

		if $ystein[$q]>550 then
			GUICtrlDelete($stein[$q])
			$stein[$q] = 0
		EndIf




	next

	;if _ispressed(42) then bot($xposition,$yposition,$ygeschwindigkeit,$xgeschwindigkeit,$fallbeschleunigung,$sprunghoehe,$linkrechtsbeschleunigung,$luftwiederstand,$sprungwiederstand,$reibungswiederstand,$stein,$xstein,$ystein,$breitestein,$air,$geschwindigkeitsteine)


	sleep($rechengeschwindigkeit)
	if not _ispressed(20) and winactive("jump.      a game by killz....") then hotkeyset("{space}","sprung")
	if _ispressed(25) and winactive("jump.      a game by killz....") then $xgeschwindigkeit=$xgeschwindigkeit-$linkrechtsbeschleunigung
	if _ispressed(27) and winactive("jump.      a game by killz....") then $xgeschwindigkeit=$xgeschwindigkeit+$linkrechtsbeschleunigung


	$pos=mousegetpos()
	if $pos[0]>$xposition and $pos[0]<$xposition+20 and $pos[1]>$yposition and $pos[1]<$yposition+20 and _IsPressed(01)=1 and $mausbewegung=1 then
		$ygeschwindigkeit=0
		$xgeschwindigkeit=0
		$xunterschied=$pos[0]-$xposition
		$yunterschied=$pos[1]-$yposition

		while _IsPressed(01) = 1
		$pos=mousegetpos()
		$xposition=$pos[0]-$xunterschied
		$yposition=$pos[1]-$yunterschied
		guictrlsetpos($ball,$xposition,$yposition)
		wend
		Sleep(50)
		$pos1=MouseGetPos()
		$xgeschwindigkeit=($pos1[0]-$pos[0])/5
		$ygeschwindigkeit=($pos1[1]-$pos[1])/5

	else

		if $yposition<-10 and $marker=1 then GUICtrlSetState($xmarker,$GUI_SHOW)
		if $yposition>-10 and $marker=1 then GUICtrlSetState($xmarker,$GUI_HIDE)
		if $yposition<-10 and $marker=1 then GUICtrlSetState($ymarker,$GUI_SHOW)
		if $yposition>-10 and $marker=1 then GUICtrlSetState($ymarker,$GUI_HIDE)

		if $yposition <480 Then ;kollisionsabfrage boden
			$ygeschwindigkeit= $ygeschwindigkeit+$fallbeschleunigung
		Else
			$score=0

			$air =0
			$ygeschwindigkeit=$ygeschwindigkeit*(-1)
			$ygeschwindigkeit=$ygeschwindigkeit/100*$sprungwiederstand
			$xgeschwindigkeit=$xgeschwindigkeit/100*$reibungswiederstand

		EndIf


		$ygeschwindigkeit=$ygeschwindigkeit/100*$luftwiederstand
		$xgeschwindigkeit=$xgeschwindigkeit/100*$luftwiederstand


		$steht=0
		if $ygeschwindigkeit>0 then
		for $w=0 to $ygeschwindigkeit
			if $yposition <480 and $steht=0 Then
				$yposition=$yposition+1
				for $q=0 to $anzahlsteine-1
					if $yposition=$ystein[$q]-20 and $xposition>$xstein[$q]-20 and $xposition<$xstein[$q]+$breitestein[$q] then ;kollisionsabfrage fallende steine
						$air =0
						$ygeschwindigkeit=$ygeschwindigkeit*(-1)
						$ygeschwindigkeit=$ygeschwindigkeit/100*$sprungwiederstand
						$xgeschwindigkeit=$xgeschwindigkeit/100*$reibungswiederstand
						$steht=1
						ExitLoop
					EndIf
				Next
			EndIf
		Next
		EndIf
		$steht=0
		; wenn nicht nur von oben kollisionen mit objekten möglich sein sollen einfach die kollision mit den steinen abändern und in alle anderen fälle unten hinzufügen
		if $ygeschwindigkeit<0 then
		for $q=1 to $ygeschwindigkeit*(-1)
				$yposition=$yposition-1

		Next
		EndIf

		if round($xgeschwindigkeit,0)>0 then
		for $q=0 to $xgeschwindigkeit
			if $xposition <480 Then
				$xposition=$xposition+1
			Else ;kollision mit wand
				$xgeschwindigkeit=$xgeschwindigkeit/100*$sprungwiederstand
				$xgeschwindigkeit=$xgeschwindigkeit*(-1)
				exitloop
			EndIf
		Next
		EndIf

		if round($xgeschwindigkeit,0)<0 then
		for $q=0 to $xgeschwindigkeit*(-1)
			if $xposition > 0 Then
				$xposition=$xposition-1
			Else ;kollision mit wand
				$xgeschwindigkeit=$xgeschwindigkeit/100*$sprungwiederstand
				$xgeschwindigkeit=$xgeschwindigkeit*(-1)
				exitloop
			EndIf
		Next
		EndIf

		guictrlsetpos($ball,$xposition,$yposition)
		guictrlsetpos($xmarker,$xposition+8,0)
		guictrlsetpos($ymarker,$xposition+12,10)
	EndIf

	$count=$count+1
	if $count=9 then
		GUICtrlSetData($scoreboard,round($score,0))
		GUICtrlSetData($highscoreboard,round($highscore,1))
		GUICtrlSetData($ymarker,abs($yposition))
		$count=0
	EndIf




WEnd
$file=FileOpen(@scriptdir&"\jump_data\highscore.txt",2)
FileWrite($file,$highscore)
FileClose($file)

func sprung()
	if $air=0 then
		$ygeschwindigkeit=-$sprunghoehe
		$air =1
		hotkeyset("{space}")
	EndIf
EndFunc

Func wertesetzen()
	$anzahlsteine1=$anzahlsteine
	$mausbewegung=GUICtrlRead($mausbewegunginput)
	$steinefallen=GUICtrlRead($steinefalleninput)
	if not GUICtrlRead($anzahlsteineinput)=0 then $anzahlsteine=GUICtrlRead($anzahlsteineinput)
	$heufigkeitsteine=GUICtrlRead($heufigkeitsteineinput)
	$mindestlaengesteine=GUICtrlRead($mindestlaengesteineinput)
	$hoechstlaengesteine=GUICtrlRead($hoechstlaengesteineinput)
	$geschwindigkeitsteine=GUICtrlRead($geschwindigkeitsteineinput)
	$luftwiederstand=GUICtrlRead($luftwiederstandinput)
	$sprungwiederstand=GUICtrlRead($sprungwiederstandinput)
	$reibungswiederstand=GUICtrlRead($reibungswiederstandinput)
	$sprunghoehe=GUICtrlRead($sprunghoeheinput)
	$linkrechtsbeschleunigung=GUICtrlRead($linkrechtsbeschleunigunginput)
	$fallbeschleunigung=GUICtrlRead($fallbeschleunigunginput)
	$rechengeschwindigkeit=GUICtrlRead($rechengeschwindigkeitinput)
	$marker=GUICtrlRead($markerinput)
	if $anzahlsteine<>$anzahlsteine1 then
		for $q=0 to UBound($stein)-1

			GUICtrlDelete($stein[$q])
			$stein[$q]=0
		Next
	EndIf
	redim $stein[$anzahlsteine]
	redim $xstein[$anzahlsteine]
	redim $ystein[$anzahlsteine]
	redim $breitestein[$anzahlsteine]
EndFunc

func options()
	if $options=1 then
		GUICtrlSetState($mausbewegunginput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($steinefalleninput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($anzahlsteineinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($heufigkeitsteineinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($mindestlaengesteineinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($hoechstlaengesteineinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($geschwindigkeitsteineinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($luftwiederstandinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($sprungwiederstandinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($reibungswiederstandinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($sprunghoeheinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($linkrechtsbeschleunigunginput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($fallbeschleunigunginput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($rechengeschwindigkeitinput,$GUI_DISABLE+$GUI_HIDE)
		GUICtrlSetState($versteckerbalken,$GUI_show)
		GUICtrlSetState($markerinput,$GUI_DISABLE+$GUI_HIDE)
		wertesetzen()
	Else
		GUICtrlSetState($mausbewegunginput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($steinefalleninput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($anzahlsteineinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($heufigkeitsteineinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($mindestlaengesteineinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($hoechstlaengesteineinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($geschwindigkeitsteineinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($luftwiederstandinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($sprungwiederstandinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($reibungswiederstandinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($sprunghoeheinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($linkrechtsbeschleunigunginput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($fallbeschleunigunginput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($rechengeschwindigkeitinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($markerinput,$GUI_ENABLE+$GUI_SHOW)
		GUICtrlSetState($versteckerbalken,$GUI_HIDE)
	EndIf

	$options=not $options
EndFunc

func close()
	Exit
EndFunc

#cs
func ausrechnen($xposk,$yposk,$yspeedk,$xspeedk,$fallbeschleunigungk,$sprunghoehek,$linkrechtsbeschleunigungk,$resairk,$resjumpk,$resgroundk,$steink,$xsteink,$ysteink,$breitesteink,$airk,$geschwindigkeitsteinek)
		if $yposk <480 Then
			$yspeedk= $yspeedk+$fallbeschleunigungk
		Else
			$airk =0
			$yspeedk=$yspeedk*(-1)
			$yspeedk=$yspeedk/100*$resjumpk
			$xspeedk=$xspeedk/100*$resgroundk

		EndIf


		$yspeedk=$yspeedk/100*$resairk
		$xspeedk=$xspeedk/100*$resairk


		$steht=0
		if $yspeedk>0 then
		for $w=0 to $yspeedk
			if $yposk <480 and $steht=0 Then
				$yposk=$yposk+1
				for $q=0 to UBound($steink)-1
					if $yposk=$ysteink[$q]-20 and $xposk>$xsteink[$q]-20 and $xposk<$xsteink[$q]+$breitesteink[$q] then
						$airk =0
						$yspeedk=$yspeedk*(-1)
						$yspeedk=$yspeedk/100*$resjumpk
						$xspeedk=$xspeedk/100*$resgroundk
						$steht=1
						ExitLoop
					EndIf
				Next
			EndIf
		Next
		EndIf
		$steht=0

		if $yspeedk<0 then
		for $q=1 to $yspeedk*(-1)
				$yposk=$yposk-1

		Next
		EndIf

		if round($xspeedk,0)>0 then
		for $q=0 to $xspeedk
			if $xposk <480 Then
				$xposk=$xposk+1
			Else
				$xspeedk=$xspeedk/100*$resjumpk
				$xspeedk=$xspeedk*(-1)
				exitloop
			EndIf
		Next
		EndIf

		if round($xspeedk,0)<0 then
		for $q=0 to $xspeedk*(-1)
			if $xposk > 0 Then
				$xposk=$xposk-1
			Else
				$xspeedk=$xspeedk/100*$resjumpk
				$xspeedk=$xspeedk*(-1)
				exitloop
			EndIf
		Next
		EndIf



		Local $posi[6]
		$posi[0]=$xposk
		$posi[1]=$yposk
		$posi[2]=$xspeedk
		$posi[3]=$yspeedk
		$posi[4]=$airk


		Return $posi
endfunc

func steine($steink,$geschwindigkeitsteinek,$ysteink)
	for $q=0 to ubound($stein)-1
		if not $steink[$q]=0 then
			$ysteink[$q]=$ystein[$q]+$geschwindigkeitsteinek
		EndIf
	next
	Return $ysteink
EndFunc

func bot($xposb,$yposb,$yspeedb,$xspeedb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
	$timer1=TimerInit()
	local $openlist[7][7][7]
	Local $zwschn1[6]
	Local $zwschn2[6]
	$oft=5
	$error1=0
	$error2=0
	$error3=0
	$best=0

		for $1=0 to 5
			Select
			Case $1=0
					$zwschn1=ausrechnen($xposb,$yposb,$yspeedb,$xspeedb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
					if $zwschn1[1]>470 then $error1=1
					for $q=1 to $oft
						$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						if $zwschn1[1]>470 then $error1=1
					next
			Case $1=1
				if $airb=0 then
					$zwschn1=ausrechnen($xposb,$yposb,$yspeedb-$sprunghoeheb,$xspeedb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
					$zwschn1[4]=1
					if $zwschn1[1]>470 then $error1=1
					for $q=1 to $oft
						$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						if $zwschn1[1]>470 then $error1=1
					next

				Else

				$error1=1
				endif
			case $1=2
				$zwschn1=ausrechnen($xposb,$yposb,$yspeedb,$xspeedb-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
				$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
				if $zwschn1[1]>470 then $error1=1
				for $q=1 to $oft
					$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
					if $zwschn1[1]>470 then $error1=1
				next
			case $1=3
				$zwschn1=ausrechnen($xposb,$yposb,$yspeedb,$xspeedb+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
				$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
				if $zwschn1[1]>470 then $error1=1
				for $q=1 to $oft
					$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
					if $zwschn1[1]>470 then $error1=1
				next
			case $1=4

				if $airb=0 then
					$zwschn1=ausrechnen($xposb,$yposb,$yspeedb-$sprunghoeheb,$xspeedb-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
					$zwschn1[4]=1
					if $zwschn1[1]>470 then $error1=1
					for $q=1 to $oft
						$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						if $zwschn1[1]>470 then $error1=1
					next
				Else

					$error1=1
				endif
			case $1=5
				if $airb=0 then
					$zwschn1=ausrechnen($xposb,$yposb,$yspeedb-$sprunghoeheb,$xspeedb+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb,$breitesteinb,$airb,$geschwindigkeitsteineb)
					$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb)
					$zwschn1[4]=1
					if $zwschn1[1]>470 then $error1=1
					for $q=1 to $oft
						$zwschn1=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb1=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						if $zwschn1[1]>470 then $error1=1
					next
				Else
					$error1=1
				endif
			EndSelect

			if $error1=0 then
				$openlist[$1][6][6]=$zwschn1[1]
				;GUICtrlCreateLabel("o"&$1,$zwschn1[0],$zwschn1[1],12,10)
				for $q=0 to UBound($steinb)-1
					If $zwschn1[0]>$xsteinb[$q]-10 And $zwschn1[0]<$xsteinb[$q]+$breitesteinb[$q] and $zwschn1[1]<$ysteinb1[$q] then $openlist[$1][6][6]-=250
				Next
				if $zwschn1[4]=0 then $openlist[$1][6][6]-=250
				$openlist[$1][6][6]+=$zwschn1[3]*10
			EndIf

			for $2=0 to 5
				Select
				Case $2=0
						$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						if $zwschn2[1]>470 then $error2=1
						for $q=1 to $oft
							$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							if $zwschn2[1]>470 then $error2=1
						next
				Case $2=1
					if $zwschn1[4]=0 then
						$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3]-$sprunghoeheb,$zwschn1[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						$zwschn2[4]=1
						if $zwschn2[1]>470 then $error2=1
						for $q=1 to $oft
							$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							if $zwschn2[1]>470 then $error2=1
						next
					Else
						$error2=1
					endif
				case $2=2
					$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
					$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
					if $zwschn2[1]>470 then $error2=1
					for $q=1 to $oft
						$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
						if $zwschn2[1]>470 then $error2=1
					next
				case $2=3
					$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3],$zwschn1[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
					$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
					if $zwschn2[1]>470 then $error2=1
					for $q=1 to $oft
						$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
						if $zwschn2[1]>470 then $error2=1
					next
				case $2=4

					if $zwschn1[4]=0 then
						$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3]-$sprunghoeheb,$zwschn1[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						$zwschn2[4]=1
						if $zwschn2[1]>470 then $error2=1
						for $q=1 to $oft
							$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							if $zwschn2[1]>470 then $error2=1
						next
					Else
						$error2=1
					endif
				case $2=5
					if $zwschn1[4]=0 then
						$zwschn2=ausrechnen($zwschn1[0],$zwschn1[1],$zwschn1[3]-$sprunghoeheb,$zwschn1[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb1,$breitesteinb,$zwschn1[4],$geschwindigkeitsteineb)
						$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb1)
						$zwschn2[4]=1
						if $zwschn2[1]>470 then $error2=1
						for $q=1 to $oft
							$zwschn2=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb2=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							if $zwschn2[1]>470 then $error2=1
						next
					Else
						$error2=1
					endif
				EndSelect


				if $error2=0 and $error1=0 then
					$openlist[$1][$2][6]=$zwschn2[1]
					;GUICtrlCreateLabel("o"&$1,$zwschn1[0],$zwschn1[1],12,10)
					for $q=0 to UBound($steinb)-1
						If $zwschn2[0]>$xsteinb[$q]-10 And $zwschn2[0]<$xsteinb[$q]+$breitesteinb[$q] and $zwschn2[1]<$ysteinb2[$q] then $openlist[$1][$2][6]-=250
					Next
					if $zwschn2[4]=0 then $openlist[$1][$2][6]-=250
					$openlist[$1][$2][6]+=$zwschn2[3]*10
				EndIf


				for $3=0 to 5
					Select
					Case $3=0
							$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							if $zwschn3[1]>470 then $error3=1
							for $q=1 to $oft
								$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)
								$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb3)
								if $zwschn3[1]>470 then $error3=1
							next
					Case $3=1
						if $zwschn2[4]=0 then
							$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3]-$sprunghoeheb,$zwschn2[2],$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							$zwschn3[4]=1
							if $zwschn3[1]>470 then $error3=1
							for $q=1 to $oft
								$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)							;GUICtrlCreateLabel("x",$zwschn3[0],$zwschn3[1],1,1,0x04)
								$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb3)
								if $zwschn3[1]>470 then $error3=1
							next

						Else
							$error3=1
						endif
					case $3=2
						$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
						$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
						if $zwschn3[1]>470 then $error3=1
						for $q=1 to $oft
							$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb3)
							if $zwschn3[1]>470 then $error3=1
						next
					case $3=3
						$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3],$zwschn2[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
						$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
						if $zwschn3[1]>470 then $error3=1
						for $q=1 to $oft
							$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb3)
							if $zwschn3[1]>470 then $error3=1
						next
					case $3=4

						if $zwschn1[4]=0 then
							$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3]-$sprunghoeheb,$zwschn2[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							$zwschn3[4]=1
							if $zwschn3[1]>470 then $error3=1
							for $q=1 to $oft
								$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2]-$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)
								$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb3)
								if $zwschn3[1]>470 then $error3=1
							next
						Else
							$error2=1
						endif
					case $3=5
						if $zwschn1[4]=0 then
							$zwschn3=ausrechnen($zwschn2[0],$zwschn2[1],$zwschn2[3]-$sprunghoeheb,$zwschn2[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb2,$breitesteinb,$zwschn2[4],$geschwindigkeitsteineb)
							$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
							$zwschn3[4]=1
							if $zwschn3[1]>470 then $error3=1
							for $q=1 to $oft
								$zwschn3=ausrechnen($zwschn3[0],$zwschn3[1],$zwschn3[3],$zwschn3[2]+$linkrechtsbeschleunigungb,$fallbeschleunigungb,$sprunghoeheb,$linkrechtsbeschleunigungb,$resairb,$resjumpb,$resgroundb,$steinb,$xsteinb,$ysteinb3,$breitesteinb,$zwschn3[4],$geschwindigkeitsteineb)
								$ysteinb3=steine($steinb,$geschwindigkeitsteineb,$ysteinb2)
								if $zwschn3[1]>470 then $error3=1
							next
						Else
							$error2=1
						endif
					EndSelect


					if $error3=0 and $error2=0 and $error1=0 then
						$openlist[$1][$2][$3]=$zwschn3[1]
						for $q=0 to UBound($steinb)-1
							If $zwschn3[0]>$xsteinb[$q]-10 And $zwschn3[0]<$xsteinb[$q]+$breitesteinb[$q] and $zwschn3[1]<$ysteinb3[$q] then $openlist[$1][$2][$3]-=250
						Next
						if $zwschn3[4]=0 then $openlist[$1][$2][$3]-=250
						$openlist[$1][$2][$3]+=$zwschn3[3]*10
						;GUICtrlCreateLabel("o"&$openlist[$1][$2][$3],$zwschn3[0],$zwschn3[1],30,10)
					EndIf

					if $openlist[$1][$2][$3]<$best then
						$best[5]=$openlist[$1][$2][$3]
						$best[0]=$zwschn3[0]
						$best[1]=$zwschn3[1]
						$best[2]=$zwschn3[2]
						$best[3]=$zwschn3[3]
						$best[4]=$zwschn3[4]
					EndIf

					$error3=0
				next
				$error2=0
			next
			$error1 = 0
		Next

	GUICtrlCreateLabel("o"&$openlist[$1][$2][$3],$zwschn3[0],$zwschn3[1],30,10)
	$time1=TimerDiff($timer1)




				MsgBox(0,"",$time1)






EndFunc


#ce
