Mein Jump n' Run Spiel mit der Irrlich Engine - Neue Version!

  • Guten Tag zusammen,

    ich möchte euch stolz die 2 Version meines Jump n' Run Spiels vorstellen. Ich habe am Spiel viel verbessert ,hinzugefügt und berichtig, außerdem habe ich Ton hinzugefügt. Ich hoffe euch gefällte diese Version und ich würde mich über feedback freuen :rolleyes: .

    [Blockierte Grafik: http://img85.imageshack.us/img85/8563/bsp.jpg]

    Changelog:
    Spiel:

    Spoiler anzeigen


    -Sound!
    -neue Gegner (Shooter,Fly) sowie Verbesserungen der alten Gegener
    -Partikel Engine (Version 0.3)
    -zerbrechliche Blöcke
    -Münzen
    -Leben (für 50 Münzen bekommt man ein Leben)
    -Platformen wurden verbessert

    -Leider hat das Spiel ein Memory Leak, da die Partikel nicht vollständig gelöscht
    werden können. Dieser Fehler stellt jedoch kein Problem dar, da man vorerst eh nur
    einen Level spielen.


    Editor:

    Spoiler anzeigen


    Der Editor wurde komplett neu geschrieben und funktioniert jetzt fehlerfrei! Außerdem
    ist der Editor nun dynamisch was die Objekte angeht, sie werden aus der objekte.ini
    geöffnet, welche sich beliebig erweitern lässt.

    -Knöpfe wurden hinzugefügt
    -speichern auf "s"
    -map komplett löschen auf "n"
    -map laden "l"


    Fortschritt:

    Spiel: 90%
    Editor: 100% Der Editor funktioniert nun perfekt ohne fehler :rock:

    Hier noch der Quellcode:
    Spiel:

    Spoiler anzeigen
    [autoit]

    #include "IrrlichtPluginUtils.au3"
    #include <windowsconstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <Array.au3>
    #include <Partikel.au3>
    #include <Mathe.au3>
    #include <Sound.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt('GuiOnEventMode', 1)
    Opt('MouseCoordMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}","beenden")
    ;HotKeySet("{F9}","aufloesung") ; funktioniert noch nicht :(

    [/autoit] [autoit][/autoit] [autoit]

    Global $width = @DesktopWidth
    Global $height = @DesktopHeight
    Global $title = "Model"

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $tex_dir = @ScriptDir & "\texturen\"
    Global Const $mdl_dir = @ScriptDir & "\models\"
    Global Const $snd_dir = @ScriptDir & "\sounds\"

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $CCoin = Binary(1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aKeyboardState[256], $vergleich, $k_left = 39,$k_right = 37,$k_fore = 38,$k_back = 40,$k_jump = 32, $jump_p = 0, $state[2]
    Local $ccd
    Global Const $pi_div_180 = 4 * ATan(1) / 180;,$pi = 3.14159265358979, $radToDeg = 180 / $pi,

    [/autoit] [autoit][/autoit] [autoit]

    Opt( "TrayIconHide", 1 )
    Opt( "WinTitleMatchMode", 3 )

    [/autoit] [autoit][/autoit] [autoit]

    Global $hwnd = GUICreate($title, $width, $height)
    GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")

    [/autoit] [autoit][/autoit] [autoit]

    CreateDeviceOnWindow($hwnd, $EDT_DIRECT3D9, 0, 0, $width, $height, 32, 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    ;CreateDevice($EDT_DIRECT3D9, $width, $height, 32, 1, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $textbox = AddStaticText( "", 10, 10, 130, 20, 1 )
    Global $Light = AddLightSceneNode( 0, 0, 500, -200, 1, 1, 1, 10000)

    [/autoit] [autoit][/autoit] [autoit]

    Global $camera_x, $camera_y, $camera_z = -300, $camera_y_hight = 100
    Global $Camera = AddCameraSceneNode(0, 0,150,-200,0,0,0 )

    [/autoit] [autoit][/autoit] [autoit]

    Local $format = ".jpg"
    Global $sky = AddSkyBoxSceneNode( GetTexture($tex_dir & "sky\UP" & $format), GetTexture($tex_dir & "sky\dn" & $format), GetTexture($tex_dir & "sky\bk" & $format), GetTexture($tex_dir & "sky\ft" & $format), GetTexture($tex_dir & "sky\rt" & $format), GetTexture($tex_dir & "sky\lf" & $format))

    [/autoit] [autoit][/autoit] [autoit]

    ;#### Spieler ###########################################################

    [/autoit] [autoit][/autoit] [autoit]

    Global $spawn_punkt[2]
    Global $ziel_punkt[3]
    Global $Player_x, $Player_y, $Player_z
    Global $l = False, $r = False ,$o = False ,$u = False
    Global $Player_can_jump = 1
    Global $Player_standby_timer
    Global $Spieler_ani = "stehen"
    Global $Player_look_dir, $Player_dir
    Global $Player_Mesh = GetMesh($mdl_dir & "player.md2")
    Global $Player_Texture = GetTexture($mdl_dir & "player.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $leben_max = 10
    Global $Leben[2]

    [/autoit] [autoit][/autoit] [autoit]

    Global $Player_Node = AddAnimatedMeshSceneNode($Player_Mesh)
    SetMaterialTexture( $Player_Node, 0, $Player_Texture)
    SetMD2Animation($Player_Node, $EMAT_STAND)
    SetAnimationSpeed( $Player_Node, 10 )
    SetLoopMode($Player_Node, 1)
    SetPosition($Player_Node, 80,80,0)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Models & Texturen laden

    [/autoit] [autoit][/autoit] [autoit]

    Global $Box_Mesh = GetMesh($mdl_dir & "box.md2")
    Global $Block_Texture = GetTexture($mdl_dir & "block.jpg")
    Global $Grass_Texture = GetTexture($mdl_dir & "rasen.jpg")
    Global $Stein_Texture = GetTexture($mdl_dir & "stein.jpg")
    Global $BreakableBlock_Texture = GetTexture($mdl_dir & "breakableblock.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global $Plattform_Mesh = GetMesh($mdl_dir & "Plattform.md2")
    Global $Plattform_Texture = GetTexture($mdl_dir & "Plattform.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global $herz_Mesh = GetMesh($mdl_dir & "herz.md2")
    Global $herz_Tex = GetTexture($mdl_dir & "herz.jpg")
    Global $Gegner_Mesh = GetMesh($mdl_dir & "gegner.md2")
    Global $Gegner_Mesh2 = GetMesh($mdl_dir & "gegner_fly.md2")
    Global $Gegner_Mesh3 = GetMesh($mdl_dir & "gegner_kanone.md2")
    Global $Gegner_Mesh4 = GetMesh($mdl_dir & "toilet.md2")
    Global $Gegner_Tex = GetTexture($mdl_dir & "gegner.pcx")
    Global $Gegner_Tex2 = GetTexture($mdl_dir & "gegner_fly.jpg")
    Global $Gegner_Tex3 = GetTexture($mdl_dir & "gegner_kanone.jpg")
    Global $Gegner_Tex4 = GetTexture($mdl_dir & "toilet.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global $save_point_mesh = GetMesh($mdl_dir & "save.md2")
    Global $save_point_tex = GetTexture($mdl_dir & "save.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global $Schalter_mesh1 = GetMesh($mdl_dir & "Schalter_t1.md2")
    Global $Schalter_tex1 = GetTexture($mdl_dir & "Schalter_t1.jpg")
    Global $Schalter_mesh2 = GetMesh($mdl_dir & "Schalter_t2.md2")
    Global $Schalter_tex2 = GetTexture($mdl_dir & "Schalter_t2.jpg")
    Global $Tuer_mesh = GetMesh($mdl_dir & "Tür.md2")
    Global $Tuer_tex = GetTexture($mdl_dir & "Tür.jpg")
    Global $Coin_Mesh = GetMesh($mdl_dir & "coin.md2")
    Global $Coin_Texture = GetTexture($mdl_dir & "coin.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    Global $light_save = AddBillboardSceneNode( 0, 128, 128 )
    Global $light_tex = GetTexture($tex_dir & "\particlewhite.bmp")

    [/autoit] [autoit][/autoit] [autoit]

    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    Global $herz_node[10]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 9 Step 1
    $herz_node[$i] = AddMeshSceneNode($herz_mesh)
    SetMaterialTexture($herz_node[$i], 0, $herz_tex)
    SetScale($herz_node[$i],0.25,0.25,0.25)
    SetPosition($herz_node[$i],320 - $i * 12,80,300)
    AddChild($camera, $herz_node[$i])
    SetVisible($herz_node[$i],0)
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $Box[1][2]
    Global $Box_Node[1]
    Global $Box_Coords[1][2]
    Global $map_blocks[256][11]

    [/autoit] [autoit][/autoit] [autoit]

    Global $map_objekte[256][11]

    [/autoit] [autoit][/autoit] [autoit]

    Global $moving_objects_pos[1][2], $moving_objects_pos_mm[1][4], $moving_objects_speed[1], $moving_objects_vec[1][2], $objekt[1]

    [/autoit] [autoit][/autoit] [autoit]

    Global $gegner_pos[1][2], $gegner_variablen[1][4], $gegner_speed[1], $gegner[1], $gegner_type[1], $gegner_rotation[1], $gegner_status[1]

    [/autoit] [autoit][/autoit] [autoit]

    Global $save_points[1][2], $save_point[1]

    [/autoit] [autoit][/autoit] [autoit]

    Global $Box[1][2]
    Global $Box_reset[1][2]
    Global $Box_fallen[1]
    Global $Box_node

    [/autoit] [autoit][/autoit] [autoit]

    Global $Tuer[1][2]
    Global $Schalter[1][2]
    Global $Tuer_Status[1]
    Global $Tuer_node[1]
    Global $Tuer_move[1]
    Global $Schalter_node[1]
    Global $Schalter_node2[1]

    [/autoit] [autoit][/autoit] [autoit]

    Global $Coin[1][4]
    Global $Coins_rotation
    Global $Coins_collected = 0

    [/autoit] [autoit][/autoit] [autoit]

    Global $BreakableBlock[1][3]

    [/autoit] [autoit][/autoit] [autoit]

    Global $snd_break = _SoundOpen($snd_dir & "break.wav" , "break")
    Global $snd_checkpoint = _SoundOpen($snd_dir & "Checkpoint.wav" , "checkpoint")
    Global $snd_kill = _SoundOpen($snd_dir & "Kill.wav" , "kill")
    Global $snd_lose = _SoundOpen($snd_dir & "Lose.wav" , "lose")
    Global $snd_runterfallen = _SoundOpen($snd_dir & "Runterfallen.wav" , "runterfallen")
    Global $snd_schalter = _SoundOpen($snd_dir & "Schalter.wav" , "schalter")
    Global $snd_springen = _SoundOpen($snd_dir & "Springen.wav" , "springen")

    [/autoit] [autoit][/autoit] [autoit]

    Load_Level(InputBox("Map","Welche map möchten sie spielen (map1)") & ".ini")

    [/autoit] [autoit][/autoit] [autoit]

    While IrrRun()

    [/autoit] [autoit][/autoit] [autoit]

    ;If _IsPressed(01) Then $ccd += 5
    ;If _IsPressed(02) Then $ccd -= 5

    [/autoit] [autoit][/autoit] [autoit]

    zeichne_particle()

    [/autoit] [autoit][/autoit] [autoit]

    SetText($textbox,"Player Box: " & Int($player_x / 40) & " - " & Int($player_y / 40) & " Münzen: " & $Coins_collected)

    [/autoit] [autoit][/autoit] [autoit]

    Objekte_bewegen()

    [/autoit] [autoit][/autoit] [autoit]

    Gegner_bewegen()

    [/autoit] [autoit][/autoit] [autoit]

    Spieler_bewegen()
    _Camera ()

    [/autoit] [autoit][/autoit] [autoit]

    Physik_objekte()

    [/autoit] [autoit][/autoit] [autoit]

    herzen()

    [/autoit] [autoit][/autoit] [autoit]

    Coins()

    [/autoit] [autoit][/autoit] [autoit]

    CheckNextLevel()

    [/autoit] [autoit][/autoit] [autoit]

    CheckPunkt()

    [/autoit] [autoit][/autoit] [autoit]

    Schalter_Tueren()

    [/autoit] [autoit][/autoit] [autoit]

    BeginScene(True,true, 255, 100, 100, 100 )

    [/autoit] [autoit][/autoit] [autoit]

    SceneDraw()

    [/autoit] [autoit][/autoit] [autoit]

    GuiDraw()

    [/autoit] [autoit][/autoit] [autoit]

    EndScene()

    [/autoit] [autoit][/autoit] [autoit]

    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Objekte_bewegen()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($moving_objects_speed) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    If _Punkte_Distance($moving_objects_pos[$i][0], $moving_objects_pos[$i][1], $moving_objects_pos_mm[$i][0],$moving_objects_pos_mm[$i][1]) < 0.9*Abs($moving_objects_speed[$i]) Or _
    _Punkte_Distance($moving_objects_pos[$i][0], $moving_objects_pos[$i][1], $moving_objects_pos_mm[$i][2],$moving_objects_pos_mm[$i][3]) < 0.9*Abs($moving_objects_speed[$i]) Then $moving_objects_speed[$i] = -$moving_objects_speed[$i]

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_pos[$i][0] += $moving_objects_vec[$i][0] * $moving_objects_speed[$i]
    $moving_objects_pos[$i][1] += $moving_objects_vec[$i][1] * $moving_objects_speed[$i]

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($objekt[$i], $moving_objects_pos[$i][0], $moving_objects_pos[$i][1] + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Gegner_bewegen()

    [/autoit] [autoit][/autoit] [autoit]

    Local $gegner_p[4][2]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($gegner_speed) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    Local $x = GetPosition($gegner[$i], "X")
    Local $y = GetPosition($gegner[$i], "Y")
    Local $z = GetPosition($gegner[$i], "Z")

    [/autoit] [autoit][/autoit] [autoit]

    If $gegner_status[$i] = "Alive" Then

    [/autoit] [autoit][/autoit] [autoit]

    Switch $gegner_type[$i]
    Case "Pilz"

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_p[0][0] = $gegner_pos[$i][0] - 1
    $gegner_p[0][1] = $gegner_pos[$i][1]
    $gegner_p[1][0] = $gegner_pos[$i][0] - 1
    $gegner_p[1][1] = $gegner_pos[$i][1] + 39
    $gegner_p[2][0] = $gegner_pos[$i][0] + 39
    $gegner_p[2][1] = $gegner_pos[$i][1] + 39
    $gegner_p[3][0] = $gegner_pos[$i][0] + 39
    $gegner_p[3][1] = $gegner_pos[$i][1]

    [/autoit] [autoit][/autoit] [autoit]

    If $gegner_speed[$i] < 0 Then ; horizontale Gegner Bewegung

    [/autoit] [autoit][/autoit] [autoit]

    If Int(($gegner_p[0][0]+$gegner_speed[$i]) / 40) > 0 And _
    Int(($gegner_p[1][0]+$gegner_speed[$i]) / 40) > 0 And _
    Int(($gegner_p[1][1]-2) / 40) > 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    If $map_blocks[Int(($gegner_p[0][0]+$gegner_speed[$i]) / 40)][Int($gegner_p[0][1] / 40)] = False And _
    $map_blocks[Int(($gegner_p[1][0]+$gegner_speed[$i]) / 40)][Int($gegner_p[1][1] / 40)] = False Then

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_pos[$i][0] += $gegner_speed[$i]
    Else
    $gegner_speed[$i] = -$gegner_speed[$i]
    EndIf
    Else
    $gegner_speed[$i] = -$gegner_speed[$i]
    EndIf
    Else
    If Int(($gegner_p[2][0]+$gegner_speed[$i]) / 40) < 255 And _
    Int(($gegner_p[3][0]+$gegner_speed[$i]) / 40) < 255 And _
    Int(($gegner_p[1][1]-2) / 40) > 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    If $map_blocks[Int(($gegner_p[2][0]+$gegner_speed[$i]) / 40)][Int($gegner_p[2][1] / 40)] = False And _
    $map_blocks[Int(($gegner_p[3][0]+$gegner_speed[$i]) / 40)][Int($gegner_p[3][1] / 40)] = False Then

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_pos[$i][0] += $gegner_speed[$i]
    Else
    $gegner_speed[$i] = -$gegner_speed[$i]
    EndIf
    Else
    $gegner_speed[$i] = -$gegner_speed[$i]
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Int(($gegner_p[1][1]-2) / 40) > 0 Then ; vertikale Gegner Bewegung
    If $map_blocks[Int(($gegner_p[0][0]+$gegner_speed[$i]) / 40)][Int(($gegner_p[0][1]-2) / 40)] = False And _
    $map_blocks[Int(($gegner_p[3][0]+$gegner_speed[$i]) / 40)][Int(($gegner_p[3][1]-2) / 40)] = False Then
    $gegner_pos[$i][1] -= 2
    EndIf
    ElseIf $gegner_p[1][1] < -100 Then
    $gegner_status[$i] = "Dead"
    SetVisible($gegner[$i],0)
    Else
    $gegner_pos[$i][1] -= 4
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($gegner[$i], $gegner_pos[$i][0], $gegner_pos[$i][1] + 20, 0)
    SetRotationByAxis($gegner[$i], "Y", $gegner_rotation[$i])

    [/autoit] [autoit][/autoit] [autoit]

    Case "Fly"

    $gegner_pos[$i][0] = Sin ($gegner_variablen[$i][2] * $pi_div_180) * 40 + $gegner_variablen[$i][0] ;errechnet x
    $gegner_pos[$i][1] = Cos ($gegner_variablen[$i][2] * $pi_div_180) * 40 + $gegner_variablen[$i][1] ;errechnet y
    SetPosition($gegner[$i], $gegner_pos[$i][0], $gegner_pos[$i][1] + 15, 0)
    $gegner_variablen[$i][2] += $gegner_speed[$i]
    Case "Shooter"
    ;ToolTip(Int(($gegner_variablen[$i][0]+$gegner_speed[$i]) / 40) & @LF & Int($gegner_variablen[$i][1] / 40))
    If $gegner_variablen[$i][2] = 0 Then
    $gegner_variablen[$i][2] = -1
    ;SetVisible($gegner[$i],1)
    If $player_x < $gegner_variablen[$i][0]+20 Then
    $gegner_speed[$i] = -Abs($gegner_speed[$i])
    Else
    $gegner_speed[$i] = Abs($gegner_speed[$i])
    EndIf
    $gegner_pos[$i][0] = $gegner_variablen[$i][0]
    $gegner_pos[$i][1] = $gegner_variablen[$i][1]
    ElseIf $gegner_variablen[$i][2] > 0 Then
    $gegner_variablen[$i][2] -= 1
    Else
    If Int(($gegner_pos[$i][0]+$gegner_speed[$i]) / 40) > 0 And Int(($gegner_pos[$i][0]+$gegner_speed[$i]) / 40) < 255 Then
    If $map_blocks[Int(($gegner_pos[$i][0]+$gegner_speed[$i]) / 40)][Int($gegner_pos[$i][1] / 40)] = False And _
    $map_blocks[Int(($gegner_pos[$i][0]+$gegner_speed[$i]+40) / 40)][Int($gegner_pos[$i][1] / 40)] = False Then
    $gegner_pos[$i][0] += $gegner_speed[$i]
    Else
    If Int(($gegner_pos[$i][0]+$gegner_speed[$i]) / 40) = $gegner_variablen[$i][0]/40 And Int(($gegner_pos[$i][1]) / 40) = $gegner_variablen[$i][1]/40 Or _
    Int(($gegner_pos[$i][0]+$gegner_speed[$i]+40) / 40) = $gegner_variablen[$i][0]/40 And Int(($gegner_pos[$i][1]) / 40) = $gegner_variablen[$i][1]/40 Then
    $gegner_pos[$i][0] += $gegner_speed[$i]
    Else
    $gegner_variablen[$i][2] = 100
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 10, 60, 0, 2)
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 6, 30, 0, 1)
    $gegner_pos[$i][0] = $gegner_variablen[$i][0]
    $gegner_pos[$i][1] = $gegner_variablen[$i][1]
    EndIf
    ;SetVisible($gegner[$i],0)
    EndIf
    Else
    $gegner_variablen[$i][2] = 100
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 10, 60, 0, 2)
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 6, 30, 0, 1)
    $gegner_pos[$i][0] = $gegner_variablen[$i][0]
    $gegner_pos[$i][1] = $gegner_variablen[$i][1]
    ;SetVisible($gegner[$i],0)
    EndIf
    EndIf
    SetPosition($gegner[$i],$gegner_pos[$i][0],$gegner_pos[$i][1]+10,0)
    SetRotationByAxis($gegner[$i], "Y", GetRotation($gegner[$i], "Y")+2)
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    If _kollision($player_x - 5,$player_y + 36,$player_x + 5,$player_y + 1, $gegner_pos[$i][0],$gegner_pos[$i][1],$gegner_pos[$i][0] + 40,$gegner_pos[$i][1] + 40) Then
    If $player_y - 30 > $gegner_pos[$i][1] Then
    If $gegner_type[$i] <> "shooter" Then
    $gegner_status[$i] = "Dead"

    [/autoit] [autoit][/autoit] [autoit]

    $jump_p = 100

    [/autoit] [autoit][/autoit] [autoit]

    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+10, 10, 60, 0, 2)
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+10, 6, 30, 0, 1)
    SetVisible($gegner[$i],0)

    [/autoit] [autoit][/autoit] [autoit]

    _SoundPlay($snd_kill)
    Else
    $jump_p = 100

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_variablen[$i][2] = 100
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 10, 60, 0, 2)
    particle_add_effect($gegner_pos[$i][0],$gegner_pos[$i][1]+20, 6, 30, 0, 1)
    $gegner_pos[$i][0] = $gegner_variablen[$i][0]
    $gegner_pos[$i][1] = $gegner_variablen[$i][1]

    [/autoit] [autoit][/autoit] [autoit]

    _SoundPlay($snd_kill)
    EndIf
    Else
    reset_game()
    EndIf
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Spieler_bewegen()

    [/autoit] [autoit][/autoit] [autoit]

    If $player_y > 5 Then

    [/autoit] [autoit][/autoit] [autoit]

    Local $bewegung_x, $bewegung_y, $bewegung_x_o, $bewegung_y_o, $l_o = False, $r_o = False,$u_o = False
    Local $player_points_x[4], $player_points_y[4]
    Local $map_points_x[4], $map_points_y[4]
    Local $objekte_seiten[4]

    [/autoit] [autoit][/autoit] [autoit]

    ;If _IsPressed(41) Then $player_x += 40
    ;If _IsPressed(57) Then $player_y += 40
    ;If _IsPressed(44) Then $player_x -= 40
    ;If _IsPressed(53) Then $player_y -= 40

    [/autoit] [autoit][/autoit] [autoit]

    $aKeyboardState = _WinAPI_GetKeyboardState()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 30 To 40 Step 1 ; keyboard state bewegung

    [/autoit] [autoit][/autoit] [autoit]

    If BitAND($aKeyboardState[$i], 0xF0) = 128 Then

    [/autoit] [autoit][/autoit] [autoit]

    Switch $i

    [/autoit] [autoit][/autoit] [autoit]

    Case $k_left
    $bewegung_x += 4
    Case $k_right
    $bewegung_x -= 4
    Case $k_fore
    If $Player_can_jump = 1 Then
    _SoundPlay($snd_springen)
    $jump_p = 100
    EndIf
    Case $k_jump
    If $Player_can_jump = 1 Then
    _SoundPlay($snd_springen)
    $jump_p = 100
    EndIf
    EndSwitch
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Local $x_dist = 4, $y_dist = 5

    [/autoit] [autoit][/autoit] [autoit]

    $player_points_x[0] = $Player_x - 5 ; oberer linker Punkt
    $player_points_y[0] = $Player_y + 36; oberer linker Punkt
    $player_points_x[1] = $Player_x + 5 ; oberer rechter Punkt
    $player_points_y[1] = $Player_y + 36; oberer rechter Punkt
    $player_points_x[2] = $Player_x - 5; unterer linker Punkt
    $player_points_y[2] = $Player_y + 1; unterer linker Punkt
    $player_points_x[3] = $Player_x + 5; unterer rechter Punkt
    $player_points_y[3] = $Player_y + 1; unterer rechter Punkt

    [/autoit] [autoit][/autoit] [autoit]

    Local $kolli = True
    Local $kolli_pl = True
    Local $bewegung_ges[2] = [0,$bewegung_y_o + $jump_p / 20]

    [/autoit] [autoit][/autoit] [autoit]

    ;Kollision mit bewegten Objekten

    [/autoit] [autoit][/autoit] [autoit]

    For $movobj = 0 To UBound($moving_objects_speed) - 1 Step 1
    If _Kollision_Punkt($player_points_x[2], $player_points_y[2] + $bewegung_ges[1], _
    $moving_objects_pos[$movobj][0], $moving_objects_pos[$movobj][1] ,$moving_objects_pos[$movobj][0], $moving_objects_pos[$movobj][1] + 40) Or _
    _Kollision_Punkt($player_points_x[3], $player_points_y[3] + $bewegung_ges[1], _
    $moving_objects_pos[$movobj][0], $moving_objects_pos[$movobj][1] ,$moving_objects_pos[$movobj][0] + 40, $moving_objects_pos[$movobj][1] + 40) Then
    ;$kolli = False
    $kolli_pl = False
    $bewegung_x_o = $moving_objects_speed[$movobj] * $moving_objects_vec[$movobj][0]
    $bewegung_y_o = $moving_objects_speed[$movobj] * $moving_objects_vec[$movobj][1]
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $bewegung_ges[0] = $bewegung_x_o + $bewegung_x
    $bewegung_ges[1] = $bewegung_y_o + $jump_p / 20

    [/autoit] [autoit][/autoit] [autoit]

    Local $x_was

    [/autoit] [autoit][/autoit] [autoit]

    ;Horizontale Kollision

    [/autoit] [autoit][/autoit] [autoit]

    If Abs($bewegung_ges[0]) > 0 Then ; Wenn sich der Spieler überhaupt bewegt
    If ($player_points_x[0] + $bewegung_ges[0]) > 0 And $player_points_y[0] > 0 And ($player_points_x[0] + $bewegung_ges[0]) < 255*40 And $player_points_y[0] < 10*40 And _
    ($player_points_x[1] + $bewegung_ges[0]) > 0 And $player_points_y[1] > 0 And ($player_points_x[1] + $bewegung_ges[0]) < 255*40 And $player_points_y[1] < 10*40 And _
    ($player_points_x[2] + $bewegung_ges[0]) > 0 And $player_points_y[2] > 0 And ($player_points_x[2] + $bewegung_ges[0]) < 255*40 And $player_points_y[2] < 10*40 And _
    ($player_points_x[3] + $bewegung_ges[0]) > 0 And $player_points_y[3] > 0 And ($player_points_x[3] + $bewegung_ges[0]) < 255*40 And $player_points_y[3] < 10*40 Then

    [/autoit] [autoit][/autoit] [autoit]

    If $map_blocks[Int(($player_points_x[0] + $bewegung_ges[0]) / 40)][Int($player_points_y[0] / 40)] = False And _
    $map_blocks[Int(($player_points_x[1] + $bewegung_ges[0]) / 40)][Int($player_points_y[1] / 40)] = False And _
    $map_blocks[Int(($player_points_x[2] + $bewegung_ges[0]) / 40)][Int($player_points_y[2] / 40)] = False And _
    $map_blocks[Int(($player_points_x[3] + $bewegung_ges[0]) / 40)][Int($player_points_y[3] / 40)] = False Then

    $Player_x += $bewegung_ges[0]
    $x_was = $bewegung_ges[0]

    [/autoit] [autoit][/autoit] [autoit]

    If $bewegung_ges[0] > 0 Then
    $Player_look_dir = 0
    Else
    $Player_look_dir = 180
    EndIf
    If $Spieler_ani <> $EMAT_RUN Then
    $Spieler_ani = $EMAT_RUN
    SetMD2Animation( $Player_Node, $EMAT_RUN)
    EndIf
    EndIf
    EndIf
    Else
    If $Spieler_ani <> $EMAT_STAND Then
    $Spieler_ani = $EMAT_STAND
    SetMD2Animation( $Player_Node, $EMAT_STAND)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Player_look_dir <> $Player_dir Then ; Die Richtung in der der Spieler guckt der Richtugn des Laufens anpassen
    If $Player_dir < $Player_look_dir Then
    $Player_dir += 10
    Else
    $Player_dir -= 10
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;Vertikale Kollision

    [/autoit] [autoit][/autoit] [autoit]

    If ($player_points_x[0] + $x_was) > 0 And ($player_points_y[0] + $bewegung_ges[1]) > 0 And ($player_points_x[0] + $x_was) < 255*40 And ($player_points_y[0] + $bewegung_ges[1]) < 10*40 And _
    ($player_points_x[1] + $x_was) > 0 And ($player_points_y[1] + $bewegung_ges[1]) > 0 And ($player_points_x[1] + $x_was) < 255*40 And ($player_points_y[1] + $bewegung_ges[1]) < 10*40 And _
    ($player_points_x[2] + $x_was) > 0 And ($player_points_y[2] + $bewegung_ges[1]) > 0 And ($player_points_x[2] + $x_was) < 255*40 And ($player_points_y[2] + $bewegung_ges[1]) < 10*40 And _
    ($player_points_x[3] + $x_was) > 0 And ($player_points_y[3] + $bewegung_ges[1]) > 0 And ($player_points_x[3] + $x_was) < 255*40 And ($player_points_y[3] + $bewegung_ges[1]) < 10*40 Then

    [/autoit] [autoit][/autoit] [autoit]

    For $breakblock = 0 To UBound($BreakableBlock) - 1 Step 1 ; Prüft Kollision von unten mit einem Zerbrechlichem Objekt

    [/autoit] [autoit][/autoit] [autoit]

    If Not $BreakableBlock[$breakblock][3] Then

    [/autoit] [autoit][/autoit] [autoit]

    ;_Punkte_Distance($x1, $y1, $x2, $y2)
    If _Kollision_Punkt($player_points_x[0] + $x_was, $player_points_y[0] + $bewegung_ges[1]+5, $BreakableBlock[$breakblock][0]*40,$BreakableBlock[$breakblock][1]*40,$BreakableBlock[$breakblock][0]*40+40,$BreakableBlock[$breakblock][1]*40+40) Or _
    _Kollision_Punkt($player_points_x[1] + $x_was, $player_points_y[1] + $bewegung_ges[1]+5, $BreakableBlock[$breakblock][0]*40,$BreakableBlock[$breakblock][1]*40,$BreakableBlock[$breakblock][0]*40+40,$BreakableBlock[$breakblock][1]*40+40) Then

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$BreakableBlock[$breakblock][0]][$BreakableBlock[$breakblock][1]] = False
    Setvisible($BreakableBlock[$breakblock][2],0)

    [/autoit] [autoit][/autoit] [autoit]

    $BreakableBlock[$breakblock][3] = True
    _SoundPlay($snd_break)

    [/autoit] [autoit][/autoit] [autoit]

    $jump_p = -4

    [/autoit] [autoit][/autoit] [autoit]

    particle_add_effect($BreakableBlock[$breakblock][0]*40,$BreakableBlock[$breakblock][1]*40+20, 10, 60, 0, 2)
    particle_add_effect($BreakableBlock[$breakblock][0]*40,$BreakableBlock[$breakblock][1]*40+20, 6, 30, 0, 1)
    EndIf
    EndIf
    Next
    If $bewegung_ges[1] < 0 Then ; Wenn sich der Spieler nach oben bewegt
    If $map_blocks[Int(($player_points_x[2] + $x_was) / 40)][Int(($player_points_y[2] + $bewegung_ges[1]) / 40)] = False And _
    $map_blocks[Int(($player_points_x[3] + $x_was) / 40)][Int(($player_points_y[3] + $bewegung_ges[1]) / 40)] = False Then

    For $phybox = 0 To UBound($Box) - 1 Step 1

    If _Kollision_Punkt($player_points_x[2] + $x_was, $player_points_y[2] + $bewegung_ges[1], $Box[$phybox][0],$Box[$phybox][1]-20,$Box[$phybox][0]+40,$Box[$phybox][1]+20) Or _
    _Kollision_Punkt($player_points_x[3] + $x_was, $player_points_y[3] + $bewegung_ges[1], $Box[$phybox][0],$Box[$phybox][1]-20,$Box[$phybox][0]+40,$Box[$phybox][1]+20) Then
    $kolli = False
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $kolli And $kolli_pl Then
    $jump_p = limit($jump_p-4,-100,100)
    $Player_y += $bewegung_ges[1]
    $Player_can_jump = 0
    ElseIf $kolli_pl = False Then
    $Player_y += $bewegung_y_o
    $Player_can_jump = 1
    $jump_p = -4
    Else
    $Player_can_jump = 1
    $jump_p = -4
    EndIf
    ElseIf $bewegung_ges[1] < 0 Then
    $Player_can_jump = 1
    $jump_p = -4
    ;If $map_blocks[Int(($player_points_x[2] + $x_was) / 40)][Int(($player_points_y[2] + $bewegung_ges[1]) / 40)] = False And _
    ;$map_blocks[Int(($player_points_x[3] + $x_was) / 40)][Int(($player_points_y[3] + $bewegung_ges[1]) / 40)] = False Then $Player_y -= 10
    EndIf
    Else ; Wenn sich der Spieler nach unten bewegt
    If $map_blocks[Int(($player_points_x[0] + $x_was) / 40)][Int(($player_points_y[0] + $bewegung_ges[1]) / 40)] = False And _
    $map_blocks[Int(($player_points_x[1] + $x_was) / 40)][Int(($player_points_y[1] + $bewegung_ges[1]) / 40)] = False Then
    If $kolli_pl Then
    $jump_p = limit($jump_p-4,-100,100)
    $Player_y += $bewegung_ges[1]
    $Player_can_jump = 0
    Else
    $Player_y += $bewegung_y_o
    $Player_can_jump = 1
    $jump_p = -4
    EndIf
    Else
    $jump_p = limit($jump_p-4,-100,-4)
    $Player_can_jump = 0
    EndIf
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $Player_y += $jump_p / 20
    If $Player_y < -100 Then
    _SoundPlay($snd_runterfallen)
    reset_game()
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return 1

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Physik_objekte()

    [/autoit] [autoit][/autoit] [autoit]

    Local $not = False

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($Box_fallen) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Box[$i][1] - 20 > 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    If $Box[$i][0] < $player_x And $Box[$i][0] + 40 > $player_x Then
    If $Box[$i][1] + 20 > $player_y + $jump_p / 20 And $Box[$i][1] - 20 < $player_y + $jump_p / 20 Then
    $u = True
    $jump_p = -4
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If _kollision($player_x - 5, $player_y + 1, $player_x + 5, $player_y +36, $Box[$i][0], $Box[$i][1] - 20,$Box[$i][0] + 40,$Box[$i][1] + 20) Then

    [/autoit] [autoit][/autoit] [autoit]

    If $Box[$i][0] + 20 < $player_x Then
    If $map_blocks[Int($Box[$i][0] / 40)][Int(($Box[$i][1] - 20 + 5) / 40)] = False And $map_blocks[Int($Box[$i][0] / 40)][Int(($Box[$i][1] + 20 - 5) / 40)] = False Then
    For $e = 0 To UBound($Box_fallen) - 1 Step 1
    If $i <> $e Then
    If $Box[$i][0] > $Box[$e][0] And $Box[$i][0] < $Box[$e][0] + 40 Then
    If $Box[$i][1] + 5 > $Box[$e][1] And $Box[$i][1] + 5 < $Box[$e][1] + 40 Then
    If $Box[$i][1] + 35 > $Box[$e][1] And $Box[$i][1] + 35 < $Box[$e][1] + 40 Then
    $not = True
    EndIf
    EndIf
    EndIf
    EndIf
    Next
    If $not = False Then $Box[$i][0] -= 4
    EndIf
    Else
    If $map_blocks[Int(($Box[$i][0] + 40) / 40)][Int(($Box[$i][1] - 20 + 5) / 40)] = False And $map_blocks[Int(($Box[$i][0] + 40) / 40)][Int(($Box[$i][1] + 20 - 5) / 40)] = False Then
    For $e = 0 To UBound($Box_fallen) - 1 Step 1
    If $i <> $e Then
    If $Box[$i][0] + 40 > $Box[$e][0] And $Box[$i][0] + 40 < $Box[$e][0] + 40 Then
    If $Box[$i][1] + 5 > $Box[$e][1] And $Box[$i][1] + 5 < $Box[$e][1] + 40 Then
    If $Box[$i][1] + 35 > $Box[$e][1] And $Box[$i][1] + 35 < $Box[$e][1] + 40 Then
    $not = True
    EndIf
    EndIf
    EndIf
    EndIf
    Next
    If $not = False Then $Box[$i][0] += 4
    EndIf
    EndIf
    SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)
    ;SetPosition($light_save, $Box[$i][0], $Box[$i][1], 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $map_blocks[Int(($Box[$i][0] + 1) / 40)][Int(($Box[$i][1] - 20 + $Box_fallen[$i] / 5) / 40)] = True Or $map_blocks[Int(($Box[$i][0] + 39) / 40)][Int(($Box[$i][1] - 20 + $Box_fallen[$i] / 5) / 40)] = True Then
    ;ToolTip("unten")
    $Box_fallen[$i] = -1
    Else
    $not = False
    For $e = 0 To UBound($Box_fallen) - 1 Step 1
    If $e <> $i Then
    If $Box[$i][1] > $Box[$e][1] And $Box[$i][1] < $Box[$e][1] + 40 Then
    If $Box[$i][0] + 5 > $Box[$e][0] And $Box[$i][0] + 5 < $Box[$e][0] + 40 Then
    $not = True
    ElseIf $Box[$i][0] + 35 > $Box[$e][0] And $Box[$i][0] + 35 < $Box[$e][0] + 40 Then
    $not = True
    EndIf
    EndIf
    EndIf
    Next
    If $not = False Then
    $Box_fallen[$i] = limit($Box_fallen[$i] - 1,-25,0)
    $Box[$i][1] += $Box_fallen[$i] / 5
    SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)
    ;SetPosition($light_save, $Box[$i][0], $Box[$i][1], 0)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $Box[$i][1] += $Box_fallen[$i] / 5
    SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)

    [/autoit] [autoit][/autoit] [autoit]

    If $Box[$i][1] - 20 < -100 Then
    SetVisible($Box_node[$i],0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func herzen()

    [/autoit] [autoit][/autoit] [autoit]

    If $Leben[0] <> $Leben[1] Then

    [/autoit] [autoit][/autoit] [autoit]

    $Leben[1] = $Leben[0]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $Leben[0] Step 1
    SetVisible($herz_node[$i],1)
    Next
    For $i = $Leben[0] To $leben_max - 1 Step 1
    SetVisible($herz_node[$i],0)
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Coins()

    [/autoit] [autoit][/autoit] [autoit]

    $Coins_rotation += 2

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($Coin) - 1 Step 1
    If Abs($player_x/40-$Coin[$i][1]) < 13 Then
    If $Coin[$i][3] = 1 Then

    [/autoit] [autoit][/autoit] [autoit]

    SetRotationbyAxis($Coin[$i][0],"Y",$Coins_rotation)

    [/autoit] [autoit][/autoit] [autoit]

    If _Punkte_Distance($player_x, $player_y, $Coin[$i][1]*40+20, $Coin[$i][2]*40) < 40 Then

    [/autoit] [autoit][/autoit] [autoit]

    $Coin[$i][3] = 2

    [/autoit] [autoit][/autoit] [autoit]

    _SoundPlay($snd_kill)

    [/autoit] [autoit][/autoit] [autoit]

    $Coins_collected += 1
    If $Coins_collected = 50 Then
    $Coins_collected = 0
    $Leben[0] += 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    EndIf
    If $Coin[$i][3] = 2 And GetPosition($Coin[$i][0], "Y") < 1000 Then
    SetPosition($Coin[$i][0], $Coin[$i][1]*40, GetPosition($Coin[$i][0], "Y") + 10,0)
    ElseIf $Coin[$i][3] <> 2 And $Coin[$i][3] <> 1 Then
    $Coin[$i][3] = 3
    SetVisible($Coin[$i][0],0)
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckNextLevel()

    [/autoit] [autoit][/autoit] [autoit]

    If _kollision($player_x - 5, $player_y + 1, $player_x + 5, $player_y +36, $ziel_punkt[0],$ziel_punkt[1],$ziel_punkt[0] + 40,$ziel_punkt[1] + 40) Then

    [/autoit] [autoit][/autoit] [autoit]

    beenden()
    ;ClearMap()
    ;Load_Level($ziel_punkt[2])

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckPunkt()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($save_point) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    If _kollision($player_x - 5, $player_y + 1, $player_x + 5, $player_y +36, $save_points[$i][0],$save_points[$i][1],$save_points[$i][0] + 40,$save_points[$i][1] + 40) Then
    If $spawn_punkt[0] <> $save_points[$i][0] + 20 Or $spawn_punkt[1] <> $save_points[$i][1] Then
    $spawn_punkt[0] = $save_points[$i][0] + 20
    $spawn_punkt[1] = $save_points[$i][1]
    SetPosition($light_save,$spawn_punkt[0] - 20,$spawn_punkt[1] + 20,0)

    [/autoit] [autoit][/autoit] [autoit]

    _SoundPlay($snd_checkpoint)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ClearMap()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Schalter_Tueren()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($Tuer_Status) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    If _kollision($player_x - 5, $player_y + 1, $player_x + 5, $player_y +36, $Schalter[$i][0],$Schalter[$i][1],$Schalter[$i][0] + 40,$Schalter[$i][1] + 40) Then
    If $Tuer_Status[$i] = False Then
    SetMD2Animation($Schalter_Node[$i], $EMAT_STAND)
    $Tuer_Status[$i] = True
    _SoundPlay($snd_schalter)
    EndIf
    EndIf
    If $Tuer_Status[$i] = True Then
    If $Tuer_move[$i] < 40 Then
    $Tuer_move[$i] += 1
    SetPosition($Tuer_Node[$i], $Tuer[$i][0], $Tuer[$i][1] - $Tuer_move[$i], 0)
    Else
    $map_blocks[$Tuer[$i][0] / 40][$Tuer[$i][1] / 40] = False
    SetVisible($Tuer_Node[$i], 0)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Kollision($x1,$y1,$x2,$y2, $x3,$y3,$x4,$y4)

    [/autoit] [autoit][/autoit] [autoit]

    Local $points_ob1[4][2], $points_ob2[4][2], $kollision = False

    [/autoit] [autoit][/autoit] [autoit]

    #Region Alle Punkte des Objekts

    [/autoit] [autoit][/autoit] [autoit]

    $points_ob1[0][0] = $x1
    $points_ob1[0][1] = $y1
    $points_ob1[1][0] = $x2
    $points_ob1[1][1] = $y1
    $points_ob1[2][0] = $x2
    $points_ob1[2][1] = $y2
    $points_ob1[3][0] = $x1
    $points_ob1[3][1] = $y2

    [/autoit] [autoit][/autoit] [autoit]

    $points_ob2[0][0] = $x3
    $points_ob2[0][1] = $y3
    $points_ob2[1][0] = $x4
    $points_ob2[1][1] = $y3
    $points_ob2[2][0] = $x4
    $points_ob2[2][1] = $y4
    $points_ob2[3][0] = $x3
    $points_ob2[3][1] = $y4

    [/autoit] [autoit][/autoit] [autoit]

    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 3 Step 1 ; geht alle 4 punkte durch

    [/autoit] [autoit][/autoit] [autoit]

    If $points_ob1[$i][0] > $points_ob2[0][0] And $points_ob1[$i][0] < $points_ob2[2][0] Then
    If $points_ob1[$i][1] > $points_ob2[0][1] And $points_ob1[$i][1] < $points_ob2[2][1] Then
    $kollision = True
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return $kollision

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Kollision_Punkt($xi,$yi, $x1,$y1,$x2,$y2)

    [/autoit] [autoit][/autoit] [autoit]

    If $x1 < $xi And $xi < $x2 Then
    If $y1 < $yi And $yi < $y2 Then
    Return True
    Else
    Return False
    EndIf
    Else
    Return False
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Camera ()

    [/autoit] [autoit][/autoit] [autoit]

    If $player_x > $camera_x + 50 Then
    $camera_x += limit($player_x - $camera_x - 50,-10,10)
    ElseIf $player_x < $camera_x - 50 Then
    $camera_x -= limit($camera_x - 50 - $player_x,-10,10)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $player_y > $camera_y + 50 Then
    $camera_y += limit($player_y - $camera_y - 50,-10,10)
    ElseIf $player_y < $camera_y - 50 Then
    $camera_y -= limit($camera_y - 50 - $player_y,-10,10)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($Light ,$Player_x, 500, -200)
    SetPosition($Player_Node, $Player_x - 20, $Player_y + 24, $Player_z)
    SetRotationByAxis($Player_Node, "Y", $Player_dir)
    SetPosition($Camera, $camera_x, $camera_y + $camera_y_hight + $ccd, $camera_z)
    SetTarget($Camera, $camera_x, $camera_y , $Player_z)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Load_Level($map)

    [/autoit] [autoit][/autoit] [autoit]

    $Leben[0] = 5

    [/autoit] [autoit][/autoit] [autoit]

    Local $ini_map = @scriptdir & "\" & $map

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level_Ini = IniReadSection($ini_map,"Start-Ziel")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    If $Level_Ini[0][0] = 5 Then

    [/autoit] [autoit][/autoit] [autoit]

    $spawn_punkt[0] = Number($Level_Ini[1][1])*40+20
    $spawn_punkt[1] = Number($Level_Ini[2][1])*40
    $ziel_punkt[0] = Number($Level_Ini[3][1])*40+20
    $ziel_punkt[1] = Number($Level_Ini[4][1])*40+40
    $ziel_punkt[2] = $Level_Ini[5][1]

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Player_x = $spawn_punkt[0]
    $Player_y = $spawn_punkt[1]
    $Player_z = 0
    $Player_dir = 90
    $Player_look_dir = 90

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Rasen")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($level_ini) Then
    For $i = 0 To ($Level_Ini[0][0] / 3) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Box_Node[$i + 1]
    ReDim $Box_Coords[$i + 1][2]

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
    $Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$Box_Coords[$i][0]][$Box_Coords[$i][1]] = True

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Node[$i] = AddMeshSceneNode($Box_Mesh)

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($Box_Node[$i], 0, $Grass_Texture)

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($Box_Node[$i], $Box_Coords[$i][0] * 40, $Box_Coords[$i][1] * 40 + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level_Ini = IniReadSection($ini_map,"Stein")

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $i = 0 To ($Level_Ini[0][0] / 3) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Box_Node[$i + 1]
    ReDim $Box_Coords[$i + 1][2]

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
    $Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$Box_Coords[$i][0]][$Box_Coords[$i][1]] = True

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Node[$i] = AddMeshSceneNode($Box_Mesh)

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($Box_Node[$i], 0, $Stein_Texture)

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($Box_Node[$i], $Box_Coords[$i][0] * 40, $Box_Coords[$i][1] * 40 + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level_Ini = IniReadSection($ini_map,"Block")

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $i = 0 To ($Level_Ini[0][0] / 3) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Box_Node[$i + 1]
    ReDim $Box_Coords[$i + 1][2]

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
    $Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$Box_Coords[$i][0]][$Box_Coords[$i][1]] = True

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Node[$i] = AddMeshSceneNode($Box_Mesh)

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($Box_Node[$i], 0, $Block_Texture)

    [/autoit] [autoit][/autoit] [autoit]

    SetPosition($Box_Node[$i], $Box_Coords[$i][0] * 40, $Box_Coords[$i][1] * 40 + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Moving Objects")

    [/autoit] [autoit][/autoit] [autoit]

    Local $vec[2]

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 5) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $moving_objects_pos[$i + 1][2]
    ReDim $moving_objects_pos_mm[$i + 1][4]
    ReDim $moving_objects_speed[$i + 1]
    ReDim $moving_objects_vec[$i + 1][2]
    ReDim $objekt[$i + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $objekt[$i] = AddMeshSceneNode($Plattform_Mesh)
    SetMaterialTexture($objekt[$i], 0, $Plattform_Texture)

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_pos_mm[$i][0] = $Level_Ini[$i * 5 + 1][1] * 40 ; start x-punkt
    $moving_objects_pos_mm[$i][1] = $Level_Ini[$i * 5 + 2][1] * 40 ; start y-punkt
    $moving_objects_pos_mm[$i][2] = $Level_Ini[$i * 5 + 3][1] * 40 ; end x-punkt
    $moving_objects_pos_mm[$i][3] = $Level_Ini[$i * 5 + 4][1] * 40 ; end y-punkt

    [/autoit] [autoit][/autoit] [autoit]

    $vec = _punkte_zu_vektor($moving_objects_pos_mm[$i][0],$moving_objects_pos_mm[$i][1],$moving_objects_pos_mm[$i][2],$moving_objects_pos_mm[$i][3])

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_vec[$i][0] = $vec[0]
    $moving_objects_vec[$i][1] = $vec[1]

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_speed[$i] = $Level_Ini[$i * 5 + 5][1] ; geschwindigkeit

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_pos[$i][0] = $Level_Ini[$i * 5 + 1][1] * 40 ; startpunkt der plattform x-punkt
    $moving_objects_pos[$i][1] = $Level_Ini[$i * 5 + 2][1] * 40 ; startpunkt der plattform y-punkt

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Gegner")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 6) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $gegner_pos[$i + 1][2]
    ReDim $gegner_variablen[$i + 1][4]
    ReDim $gegner_speed[$i + 1]
    ReDim $gegner[$i + 1]
    ReDim $gegner_type[$i + 1]
    ReDim $gegner_rotation[$i + 1]
    ReDim $gegner_status[$i + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_status[$i] = "Alive"

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_type[$i] = $Level_Ini[$i * 6 + 6][1] ; gegner type

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_variablen[$i][0] = $Level_Ini[$i * 6 + 1][1] * 40 ; start x-punkt
    $gegner_variablen[$i][1] = $Level_Ini[$i * 6 + 2][1] * 40 ; start y-punkt
    $gegner_variablen[$i][2] = $Level_Ini[$i * 6 + 3][1] * 40 ; end x-punkt
    $gegner_variablen[$i][3] = $Level_Ini[$i * 6 + 4][1] * 40 ; end y-punkt

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_speed[$i] = $Level_Ini[$i * 6 + 5][1] ; geschwindigkeit

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_pos[$i][0] = $gegner_variablen[$i][0] ; startpunkt der plattform x-punkt
    $gegner_pos[$i][1] = $gegner_variablen[$i][1] ; startpunkt der plattform y-punkt

    [/autoit] [autoit][/autoit] [autoit]

    Switch $gegner_type[$i]
    Case "Pilz"
    $gegner[$i] = AddAnimatedMeshSceneNode($Gegner_Mesh)
    SetMaterialTexture($gegner[$i], 0, $Gegner_Tex)
    SetMD2Animation($gegner[$i], $EMAT_RUN)
    SetAnimationSpeed($gegner[$i], 10 )
    SetLoopMode($gegner[$i], 1)
    SetScale($gegner[$i], 0.5, 0.5, 0.5)
    Case "Fly"
    $gegner[$i] = AddAnimatedMeshSceneNode($Gegner_Mesh2)
    SetMaterialTexture($gegner[$i], 0, $Gegner_Tex2)
    Case "Shooter"
    $gegner[$i] = AddAnimatedMeshSceneNode($Gegner_Mesh4)
    SetMaterialTexture($gegner[$i], 0, $Gegner_Tex4)
    SetPosition($gegner[$i],$gegner_pos[$i][0],$gegner_pos[$i][1]+10,0)
    ;SetVisible($gegner_variablen[$i][3],0)
    $gegner_variablen[$i][2] = 0
    $gegner_variablen[$i][3] = AddAnimatedMeshSceneNode($Gegner_Mesh3)
    SetPosition($gegner_variablen[$i][3],$gegner_pos[$i][0],$gegner_pos[$i][1]+20,0)
    SetMaterialTexture($gegner_variablen[$i][3], 0, $Gegner_Tex3)
    $map_blocks[$gegner_variablen[$i][0]/40][$gegner_variablen[$i][1]/40] = True
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Save Points")

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($light_save, 0, $light_tex)
    SetMaterialType($light_save, $EMT_TRANSPARENT_ADD_COLOR)
    SetMaterialFlag($light_save, $EMF_LIGHTING, 0)
    SetPosition($light_save,$spawn_punkt[0] - 20,$spawn_punkt[1] + 20,0)

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 2) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $save_points[$i + 1][2]
    ReDim $save_point[$i + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $save_points[$i][0] = $Level_Ini[$i * 2 + 1][1] * 40
    $save_points[$i][1] = $Level_Ini[$i * 2 + 2][1] * 40

    [/autoit] [autoit][/autoit] [autoit]

    $save_point[$i] = AddMeshSceneNode($save_point_mesh)
    SetMaterialTexture($save_point[$i], 0, $save_point_tex)
    SetPosition($save_point[$i] , $Level_Ini[$i * 2 + 1][1] * 40, $Level_Ini[$i * 2 + 2][1] * 40,20)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Physik Box")

    [/autoit] [autoit][/autoit] [autoit]

    Local $physik_box_tex = GetTexture($mdl_dir & "physik box.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 2) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Box[$i + 1][2]
    ReDim $Box_Node[$i + 1]
    ReDim $Box_reset[$i + 1][2]
    ReDim $Box_fallen[$i + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $Box[$i][0] = $Level_Ini[$i * 2 + 1][1] * 40
    $Box[$i][1] = $Level_Ini[$i * 2 + 2][1] * 40 + 20
    $Box_reset[$i][0] = $Level_Ini[$i * 2 + 1][1] * 40
    $Box_reset[$i][1] = $Level_Ini[$i * 2 + 2][1] * 40 + 20

    [/autoit] [autoit][/autoit] [autoit]

    $Box_node[$i] = AddMeshSceneNode($Box_Mesh)
    SetMaterialTexture($Box_node[$i], 0, $physik_box_tex)
    SetPosition($Box_node[$i] , $Level_Ini[$i * 2 + 1][1] * 40, $Level_Ini[$i * 2 + 2][1] * 40 + 20,0)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Level_Ini = IniReadSection($ini_map,"Tueren Schalter")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Level_Ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 4) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Tuer[$i + 1][2]
    ReDim $Schalter[$i + 1][2]
    ReDim $Tuer_Status[$i + 1]
    ReDim $Tuer_node[$i + 1]
    ReDim $Tuer_move[$i + 1]
    ReDim $Schalter_node[$i + 1]
    ReDim $Schalter_node2[$i + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $Tuer[$i][0] = $Level_Ini[$i * 4 + 1][1] * 40
    $Tuer[$i][1] = $Level_Ini[$i * 4 + 2][1] * 40
    $Schalter[$i][0] = $Level_Ini[$i * 4 + 3][1] * 40
    $Schalter[$i][1] = $Level_Ini[$i * 4 + 4][1] * 40

    [/autoit] [autoit][/autoit] [autoit]

    $Tuer_Status[$i] = False

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$Tuer[$i][0] / 40][$Tuer[$i][1] / 40] = True

    [/autoit] [autoit][/autoit] [autoit]

    $Tuer_node[$i] = AddMeshSceneNode($Tuer_mesh)
    SetPosition($Tuer_node[$i] , $Tuer[$i][0], $Tuer[$i][1] + 1,0)
    SetMaterialTexture($Tuer_node[$i], 0, $Tuer_tex)

    [/autoit] [autoit][/autoit] [autoit]

    $Schalter_node[$i] = AddAnimatedMeshSceneNode($Schalter_mesh1)
    SetLoopMode($Schalter_node[$i], 0)
    SetMaterialTexture($Schalter_node[$i], 0, $Schalter_tex1)
    SetPosition($Schalter_node[$i] , $Schalter[$i][0], $Schalter[$i][1] + 0,0)

    [/autoit] [autoit][/autoit] [autoit]

    $Schalter_node2[$i] = AddAnimatedMeshSceneNode($Schalter_mesh2)
    SetLoopMode($Schalter_node2[$i], 0)
    SetMaterialTexture($Schalter_node2[$i], 0, $Schalter_tex2)
    SetMaterialFlag($Schalter_node2[$i], $EMF_LIGHTING, 0)
    ;SetMaterialType($Schalter_node2[$i], $EMT_TRANSPARENT_ADD_COLOR)
    SetPosition($Schalter_node2[$i] , $Schalter[$i][0], $Schalter[$i][1] + 0,0)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level_Ini = IniReadSection($ini_map,"BreakableBlock")

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $i = 0 To ($Level_Ini[0][0] / 3) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Box_Coords[$i + 1][2]
    ReDim $BreakableBlock[$i + 1][4]

    [/autoit] [autoit][/autoit] [autoit]

    $Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
    $Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $BreakableBlock[$i][0] = $Level_Ini[$i * 3 + 1][1]
    $BreakableBlock[$i][1] = $Level_Ini[$i * 3 + 2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $map_blocks[$Box_Coords[$i][0]][$Box_Coords[$i][1]] = True

    [/autoit] [autoit][/autoit] [autoit]

    $BreakableBlock[$i][2] = AddMeshSceneNode($Box_Mesh)

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($BreakableBlock[$i][2], 0, $BreakableBlock_Texture)
    SetPosition($BreakableBlock[$i][2], $Box_Coords[$i][0] * 40, $Box_Coords[$i][1] * 40 + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level_Ini = IniReadSection($ini_map,"Coin")

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($level_ini) Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To ($Level_Ini[0][0] / 2) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Coin[$i + 1][4]

    [/autoit] [autoit][/autoit] [autoit]

    $Coin[$i][1] = $Level_Ini[$i * 2 + 1][1]
    $Coin[$i][2] = $Level_Ini[$i * 2 + 2][1]
    $Coin[$i][3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    $map_objekte[$Coin[$i][1]][$Coin[$i][2]] = $CCoin

    [/autoit] [autoit][/autoit] [autoit]

    $Coin[$i][0] = AddMeshSceneNode($Coin_Mesh)

    [/autoit] [autoit][/autoit] [autoit]

    SetMaterialTexture($Coin[$i][0], 0, $Coin_Texture)
    SetPosition($Coin[$i][0], $Coin[$i][1] * 40, $Coin[$i][2] * 40 + 20, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func reset_game()

    [/autoit] [autoit][/autoit] [autoit]

    $Leben[0] -= 1
    If $Leben[0] = -1 Then beenden()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($moving_objects_speed) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_pos[$i][0] = $moving_objects_pos_mm[$i][0]
    $moving_objects_pos[$i][1] = $moving_objects_pos_mm[$i][1]

    [/autoit] [autoit][/autoit] [autoit]

    $moving_objects_speed[$i] = Abs($moving_objects_speed[$i])

    [/autoit] [autoit][/autoit] [autoit]

    Next
    For $i = 0 To UBound($gegner_speed) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $gegner_pos[$i][0] = $gegner_variablen[$i][0]
    $gegner_pos[$i][1] = $gegner_variablen[$i][1]
    SetVisible($gegner[$i],1)
    $gegner_status[$i] = "Alive"
    Next
    For $i = 0 To UBound($Box_fallen) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $Box[$i][0] = $Box_reset[$i][0]
    $Box[$i][1] = $Box_reset[$i][1]

    [/autoit] [autoit][/autoit] [autoit]

    SetVisible($Box_node[$i],1)
    SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    For $i = 0 To UBound($Tuer_move) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $Tuer_Status[$i] = False
    $Tuer_move[$i] = 0
    SetVisible($Tuer_Node[$i],1)
    SetPosition($Tuer_Node[$i], $Tuer[$i][0], $Tuer[$i][1] - $Tuer_move[$i], 0)
    $map_blocks[$Tuer[$i][0] / 40][$Tuer[$i][1] / 40] = True

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Player_x = $spawn_punkt[0]
    $Player_y = $spawn_punkt[1]
    $Player_z = 0
    $Player_dir = 90
    $Player_look_dir = 90

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func aufloesung()

    [/autoit] [autoit][/autoit] [autoit]

    If $width = 640 Then
    $width = @DesktopWidth
    $height = @DesktopHeight

    [/autoit] [autoit][/autoit] [autoit]

    GUIDelete($hwnd)

    [/autoit] [autoit][/autoit] [autoit]

    CreateDevice($EDT_DIRECT3D9, $width, $height, 32, 1, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Else

    [/autoit] [autoit][/autoit] [autoit]

    $hwnd = GUICreate($title, $width, $height)
    GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")

    [/autoit] [autoit][/autoit] [autoit]

    CreateDeviceOnWindow($hwnd, $EDT_DIRECT3D9, 0, 0, $width, $height, 32, 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $width = 640
    $width = 400
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func limit($var, $min, $max)
    If $var < $min Then
    Return $min
    ElseIf $var > $max Then
    Return $max
    Else
    Return $var
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_GetKeyboardState($iFlag = 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")

    [/autoit] [autoit][/autoit] [autoit]

    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))

    [/autoit] [autoit][/autoit] [autoit]

    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit] [autoit][/autoit] [autoit]

    Func beenden()

    [/autoit] [autoit][/autoit] [autoit]

    _SoundClose($snd_break)
    _SoundClose($snd_checkpoint)
    _SoundClose($snd_kill)
    _SoundClose($snd_lose)
    _SoundClose($snd_runterfallen)
    _SoundClose($snd_schalter)
    _SoundClose($snd_springen)

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    EndFunc

    [/autoit]


    Editor:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <Sound.au3>
    #include <Misc.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt('GuiOnEventMode', 1)
    Opt('MouseCoordMode', 0)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $felder_x = 255, $felder_y = 10
    Global Const $width = 1280, $height = 100
    Global Const $feld_x = $width / $felder_x, $feld_y = $height / $felder_y
    Local $hindernisse[$felder_x][$felder_y];
    Local $obj[$felder_x][$felder_y];

    [/autoit] [autoit][/autoit] [autoit]

    Global $file

    [/autoit] [autoit][/autoit] [autoit]

    Global $aktuellesobjekt[2] = [1,0]

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $devmode = False

    [/autoit] [autoit][/autoit] [autoit]

    _create_Workspace()

    [/autoit] [autoit][/autoit] [autoit]

    Global $draw_lines

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $hDwmApiDll = DllOpen("dwmapi.dll")

    [/autoit] [autoit][/autoit] [autoit]

    ;If @OSVersion = "WIN_VISTA" Or @OSVersion = "WIN_7" Then
    ;If _IsAeroEnable() = 0 Then _EnableDisableAero(False) ; Aero Deaktivierung
    ;EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $mouse_pos[2], $mouse_pos_a[2]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Editor", $width, $height+40)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")

    [/autoit] [autoit][/autoit] [autoit]

    Global $hWnd = WinGetHandle("Editor")

    [/autoit] [autoit][/autoit] [autoit]

    Global $GUI_Buttons[UBound($Objekte)]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($Objekte)-1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $GUI_Buttons[$i] = GUICtrlCreateButton(BinaryToString($Objekte[$i]),10+($i-1)*100,110,90,20)
    GUICtrlSetOnEvent ($GUI_Buttons[$i], "SetItem")
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup ()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd) ;create graphic
    Global $Bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic) ;create bitmap
    Global $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap) ;create buffer
    _GDIPlus_GraphicsSetSmoothingMode($Buffer, 4) ;Antialiasing
    _GDIPlus_GraphicsClear($Buffer,0xFFFFFFFF) ;clear buffer

    [/autoit] [autoit][/autoit] [autoit]

    Global $Brush = _GDIPlus_BrushCreateSolid(0xFFABCDEF)

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg

    [/autoit] [autoit][/autoit] [autoit]

    While True

    [/autoit] [autoit][/autoit] [autoit]

    If WinActive("Editor") Then

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($Buffer,0xFFFFFFFF)

    [/autoit] [autoit][/autoit] [autoit]

    If _IsPressed(53) Then save_map()
    If _IsPressed("4C") Then load_map()
    If _IsPressed("4E") Then erease_map()

    [/autoit] [autoit][/autoit] [autoit]

    If _IsPressed(01) Then

    [/autoit] [autoit][/autoit] [autoit]

    $mouse_pos = _mouse_feld_pos()

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then

    [/autoit] [autoit][/autoit] [autoit]

    If $mouse_pos[0] <> $mouse_pos_a[0] Or $mouse_pos[1] <> $mouse_pos_a[1] Then

    [/autoit] [autoit][/autoit] [autoit]

    If $hindernisse[$mouse_pos[0]][$mouse_pos[1]] = 1 And $aktuellesobjekt[1] = 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDelete($Objekte_CurValves,$obj[$mouse_pos[0]][$mouse_pos[1]])
    _ArrayDelete($Draw_Lines,$obj[$mouse_pos[0]][$mouse_pos[1]])

    [/autoit] [autoit][/autoit] [autoit]

    Local $comp = $obj[$mouse_pos[0]][$mouse_pos[1]]

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 0 To $felder_x - 1 Step 1
    For $y = 0 To $felder_y - 1 Step 1
    If $obj[$x][$y] = $comp Then
    $obj[$x][$y] = ""
    $hindernisse[$x][$y] = 0
    EndIf
    If $obj[$x][$y] > $comp Then
    $obj[$x][$y] -= 1
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $hindernisse[$mouse_pos[0]][$mouse_pos[1]] = 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    $hindernisse[$mouse_pos[0]][$mouse_pos[1]] = 1

    [/autoit] [autoit][/autoit] [autoit]

    ;Erweiterung des Objekte Arrays

    [/autoit] [autoit][/autoit] [autoit]

    If $aktuellesobjekt[1] = 0 Then
    If IsArray($Objekte_CurValves) Then
    ReDim $Objekte_CurValves[UBound($Objekte_CurValves)+1][$Objekte_MaxParameter+1]
    Else
    Dim $Objekte_CurValves[UBound($Objekte_CurValves)+1][$Objekte_MaxParameter+1]
    EndIf
    If IsArray($draw_lines) Then
    ReDim $draw_lines[UBound($Objekte_CurValves)][$Objekte_MaxTeile*2]
    Else
    Dim $draw_lines[UBound($Objekte_CurValves)][$Objekte_MaxTeile*2]
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $obj[$mouse_pos[0]][$mouse_pos[1]] = UBound($Objekte_CurValves)-1

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_CurValves[UBound($Objekte_CurValves)-1][0] = $aktuellesobjekt[0]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $Objekte_Parameter[$aktuellesobjekt[0]-1][0] Step 1 ; Geht alle Parameter des Objektes durch

    [/autoit] [autoit][/autoit] [autoit]

    If $Objekte_UsesTeile[$aktuellesobjekt[0]-1][$i] = Binary($aktuellesobjekt[1]+1) Then ; Wenn der Parameter zu dem teil gehört

    [/autoit] [autoit][/autoit] [autoit]

    Switch $Objekte_SetValves[$aktuellesobjekt[0]-1][$i-1]
    Case $setvalve_x
    $Objekte_CurValves[UBound($Objekte_CurValves)-1][$i] = $mouse_pos[0]
    $draw_lines[UBound($Objekte_CurValves)-1][$aktuellesobjekt[1]*2] = $mouse_pos[0]
    Case $setvalve_y
    $Objekte_CurValves[UBound($Objekte_CurValves)-1][$i] = $mouse_pos[1]
    $draw_lines[UBound($Objekte_CurValves)-1][$aktuellesobjekt[1]*2+1] = $mouse_pos[1]
    Case $setvalve_zahl
    $Objekte_CurValves[UBound($Objekte_CurValves)-1][$i] = InputBox("",$Objekte_TextInfos[$aktuellesobjekt[0]-1][$i-1])
    Case Else
    $Objekte_CurValves[UBound($Objekte_CurValves)-1][$i] = $Objekte_SetValves[$aktuellesobjekt[0]-1][$i-1]
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aktuellesobjekt[1] += 1
    If $aktuellesobjekt[1] = $Objekte_UsesTeile[$aktuellesobjekt[0]-1][0] Then $aktuellesobjekt[1] = 0

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $mouse_pos_a = $mouse_pos

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Else

    [/autoit] [autoit][/autoit] [autoit]

    $mouse_pos_a[0] = -1
    $mouse_pos_a[1] = -1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _zeichnen()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $Bitmap,0,0, $width, $height)
    ;Do
    ;Until _IsPressed(27)

    [/autoit] [autoit][/autoit] [autoit]

    ;Sleep(200)

    [/autoit] [autoit][/autoit] [autoit]

    Else
    Sleep(100)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func SetItem()

    For $i = 0 To UBound($objekte) - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    If @GUI_CtrlId = $gui_buttons[$i] Then $aktuellesobjekt[0] = $i

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Create_Workspace()

    [/autoit] [autoit][/autoit] [autoit]

    Global $Objekte = IniReadSectionNames("objekte.ini")
    If @error Then MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Wahrscheinlich keine INI Datei vorhanden.")

    [/autoit] [autoit][/autoit] [autoit]

    Global $Objekte_Parameter[1][1]
    Global $Objekte_SetValves[1][1]
    Global $Objekte_CurValves
    Global $Objekte_UsesTeile[1][1]
    Global $Objekte_HowtoDraw[$Objekte[0]][2] ; Wie die Objekt in Editor dargestellt werden sollen
    Global $Objekte_TextInfos[1][1]

    [/autoit] [autoit][/autoit] [autoit]

    Global $Objekte_MaxParameter
    Global $Objekte_MaxTeile

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $setvalve_x = Binary(1), $setvalve_y = Binary(2), $setvalve_zahl = Binary(3)

    [/autoit] [autoit][/autoit] [autoit]

    Local $num_para

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $Objekte[0] Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $num_para = IniRead("objekte.ini",$Objekte[$i],"Parameter",1)

    [/autoit] [autoit][/autoit] [autoit]

    If $Objekte_MaxParameter < $num_para Then $Objekte_MaxParameter = $num_para

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_HowtoDraw[$i-1][0] = IniRead("objekte.ini",$Objekte[$i],"color",1)
    $Objekte_HowtoDraw[$i-1][1] = IniRead("objekte.ini",$Objekte[$i],"verbunden",1)

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $Objekte_Parameter[$i][$Objekte_MaxParameter+1]
    ReDim $Objekte_SetValves[$i][$Objekte_MaxParameter]
    ReDim $Objekte_UsesTeile[$i][$Objekte_MaxParameter+1]
    ReDim $Objekte_TextInfos[$i][$Objekte_MaxParameter]

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_Parameter[$i-1][0] = $num_para

    [/autoit] [autoit][/autoit] [autoit]

    For $j = 0 To $num_para - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_Parameter[$i-1][$j+1] = IniRead("objekte.ini",$Objekte[$i],$j+1,1) ; Speicher Namen der Eigenschaften

    [/autoit] [autoit][/autoit] [autoit]

    Switch IniRead("objekte.ini",$Objekte[$i],$Objekte_Parameter[$i-1][$j+1],1) ; Welche Werte sollen die Paremeter zugewiesen bekommen?

    [/autoit] [autoit][/autoit] [autoit]

    Case "mausx"
    $Objekte_SetValves[$i-1][$j] = $setvalve_x
    Case "mausy"
    $Objekte_SetValves[$i-1][$j] = $setvalve_y
    Case "input"
    $Objekte_SetValves[$i-1][$j] = $setvalve_zahl
    $Objekte_TextInfos[$i-1][$j] = IniRead("objekte.ini",$Objekte[$i],"text"& $j+1,1)
    Case Else
    $Objekte_SetValves[$i-1][$j] = IniRead("objekte.ini",$Objekte[$i],$Objekte_Parameter[$i-1][$j+1],1)

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_UsesTeile[$i-1][$j+1] = Binary(Number(IniRead("objekte.ini",$Objekte[$i],$Objekte_Parameter[$i-1][$j+1] & "_gehoert_zu_objekt",1)))

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_UsesTeile[$i-1][0] = Number(IniRead("objekte.ini",$Objekte[$i],"Teile",1))
    If $Objekte_MaxTeile < $Objekte_UsesTeile[$i-1][0] Then $Objekte_MaxTeile = $Objekte_UsesTeile[$i-1][0]

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte[$i] = StringToBinary($Objekte[$i]) ; Binary für schnellere Zugriffszeiten
    Next

    [/autoit] [autoit][/autoit] [autoit]

    IF $devmode Then

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($Objekte)
    _ArrayDisplay($objekte_parameter)
    _ArrayDisplay($Objekte_SetValves)
    _ArrayDisplay($Objekte_CurValves)
    _ArrayDisplay($Objekte_UsesTeile)
    _ArrayDisplay($Objekte_HowtoDraw)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _mouse_feld_pos()

    [/autoit] [autoit][/autoit] [autoit]

    ;ToolTip("Doing2")

    [/autoit] [autoit][/autoit] [autoit]

    Local $pos[2]

    [/autoit] [autoit][/autoit] [autoit]

    $pos[0] = Int((MouseGetPos(0) - $feld_x/2) / $feld_x)
    $pos[1] = $felder_y - 1 - Int((MouseGetPos(1) -25) / $feld_y)

    [/autoit] [autoit][/autoit] [autoit]

    If $pos[0] >= 0 And $pos[1] >= 0 And $pos[0] < $felder_x And $pos[1] < $felder_y Then
    Return $pos
    Else
    SetError(1)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _zeichnen()

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 0 To $felder_x - 1 Step 1
    For $y = 0 To $felder_y - 1 Step 1
    If $hindernisse[$x][$y] = 1 Then
    _GDIPlus_BrushSetSolidColor($Brush,$Objekte_HowtoDraw[$Objekte_CurValves[$obj[$x][$y]][0]-1][0])
    _GDIPlus_GraphicsFillRect($Buffer,$x * $feld_x, ($felder_y - 1 - $y) * $feld_y, $feld_x, $feld_y, $brush)
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($draw_lines) - 1 Step 1
    If $Objekte_HowtoDraw[$Objekte_CurValves[$i][0]-1][1] = 1 Then
    _GDIPlus_GraphicsDrawLine($Buffer,$draw_lines[$i][0] * $feld_x + $feld_x, ($felder_y - 1 - $draw_lines[$i][1]) * $feld_y + $feld_y / 2, $draw_lines[$i][2] * $feld_x, ($felder_y - 1 - $draw_lines[$i][3]) * $feld_y + $feld_y / 2)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func save_map()

    [/autoit] [autoit][/autoit] [autoit]

    Local $k, $m , $h, $save_name

    [/autoit] [autoit][/autoit] [autoit]

    If $file = "" Then $file = InputBox("Map","unter welchem namen möchten sie die Map speichern? (map1)") & ".ini"

    [/autoit] [autoit][/autoit] [autoit]

    $save_name = @ScriptDir & "\" & $file

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists($save_name) Then

    [/autoit] [autoit][/autoit] [autoit]

    SwitchMsgBox(3,"Speichern","Die Map: Map1 existiert bereits wollen sie diese ersetzen")
    Case 2
    Return 0
    Case 7
    $save_name = FileSaveDialog("Speichern",@ScriptDir,"Maps (*.ini)") & ".ini"
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;-- Ini löschen und für neues Schreiben vorbereiten ------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($objekte) - 1 Step 1
    IniDelete($save_name,BinaryToString($objekte[$i]))
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Local $zaehler[UBound($objekte)]

    [/autoit] [autoit][/autoit] [autoit]

    ;_ArrayDisplay($Objekte_parameter)

    [/autoit] [autoit][/autoit] [autoit]

    For $objekt = 0 To UBound($Objekte_CurValves) - 1 Step 1 ; Geht alle Objekte durch
    ;MsgBox(0,"",UBound($Objekte_CurValves) - 1)
    ;MsgBox (0,"",$Objekte_parameter[$Objekte_CurValves[$objekt][0]][0])
    ;_ArrayDisplay($Objekte_parameter)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Type = $Objekte_CurValves[$objekt][0]

    [/autoit] [autoit][/autoit] [autoit]

    $zaehler[$type] += 1

    [/autoit] [autoit][/autoit] [autoit]

    For $parameter = 1 To $Objekte_parameter[$Type-1][0] Step 1 ; Geht alle Parameter des jeweiligen Objektes durch

    [/autoit] [autoit][/autoit] [autoit]

    ;ToolTip("Klasse: " & BinaryToString($objekte[$objekt]) & @LF & _
    ;"Wert: " & $Objekte_parameter[$Objekte_CurValves[$objekt][0]][$parameter] & @LF & _
    ;"Variable: " & $Objekte_CurValves[$objekt][$parameter])
    ;MsgBox(0,"",$Objekte_CurValves[$objekt][$parameter])
    IniWrite($save_name,BinaryToString($objekte[$Type]),$Objekte_parameter[$Type-1][$parameter] & $zaehler[$type],$Objekte_CurValves[$objekt][$parameter])
    ;IniWrite($save_name,BinaryToString($objekte[$objekt]),$Objekte_parameter[$Objekte_CurValves[$objekt][0]][$parameter],$Objekte_CurValves[$objekt][$parameter])

    [/autoit] [autoit][/autoit] [autoit]

    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"","Die Map wurde erfolgreich gespeichert!")

    [/autoit] [autoit][/autoit] [autoit]

    Return 1

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func load_map()

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Objekte_CurValves) Then erease_map()

    [/autoit] [autoit][/autoit] [autoit]

    $file = InputBox("Map","Welche map möchten sie öffnen (map1)") & ".ini"

    [/autoit] [autoit][/autoit] [autoit]

    Local $Level, $var

    [/autoit] [autoit][/autoit] [autoit]

    For $objekt = 1 To $Objekte[0] Step 1

    [/autoit] [autoit][/autoit] [autoit]

    Local $Sektion = IniReadSection(@scriptdir & "\" & $file,BinaryToString($Objekte[$objekt]))

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Sektion) Then ; Wenn die Sektion existiert
    For $i = 1 To $Sektion[0][0] Step $objekte_parameter[$objekt-1][0]

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($Objekte_CurValves) Then
    ReDim $Objekte_CurValves[UBound($Objekte_CurValves)+1][$Objekte_MaxParameter+1]
    Else
    Dim $Objekte_CurValves[1][$Objekte_MaxParameter+1]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_CurValves[UBound($Objekte_CurValves)-1][0] = $objekt

    [/autoit] [autoit][/autoit] [autoit]

    For $parameter = 0 To $objekte_parameter[$objekt-1][0] - 1 Step 1 ; Gebt alle Parameter eines Objektes durch

    [/autoit] [autoit][/autoit] [autoit]

    $Objekte_CurValves[UBound($Objekte_CurValves)-1][$parameter + 1] = $Sektion[$i+$parameter][1]
    If $Objekte_SetValves[$objekt-1][$parameter] = $setvalve_x Then $var = $Sektion[$i+$parameter][1]
    If $Objekte_SetValves[$objekt-1][$parameter] = $setvalve_y Then
    $obj[$var][$Sektion[$i+$parameter][1]]= UBound($Objekte_CurValves)-1
    $hindernisse[$var][$Sektion[$i+$parameter][1]] = 1
    EndIf
    Next
    Next
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $devmode Then _ArrayDisplay($Objekte_CurValves)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"","Die Map wurde erfolgreich geladen")

    [/autoit] [autoit][/autoit] [autoit]

    Return 1

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func erease_map()

    [/autoit] [autoit][/autoit] [autoit]

    SwitchMsgBox(3,"Löschen","Wollen sie wirklich die gesamte Map löschen?")
    Case 2
    Return 0
    Case 7
    Return 0
    Case 6

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 0 To $felder_x - 1 Step 1
    For $y = 0 To $felder_y - 1 Step 1
    $hindernisse[$x][$y] = 0
    $obj[$x][$y] = ""
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Dim $draw_lines[1][1]
    Dim $Objekte_CurValves[1][1]

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDelete($Objekte_CurValves,0)
    _ArrayDelete($draw_lines,0)

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_GetKeyboardState($iFlag = 0)
    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")
    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))
    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf
    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_BrushSetSolidColor($hBrush, $iARGB = 0xFF000000)
    Local $aResult

    [/autoit] [autoit][/autoit] [autoit]

    $aResult = DllCall($ghGDIPDll, "int", "GdipSetSolidFillColor", "hwnd", $hBrush, "int", $iARGB)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
    EndFunc ;==>_GDIPlus_BrushSetSolidColor

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_GraphicsDrawStringColor($hGraphics, $sString, $nX, $nY, $sFont = "Arial", $nSize = 10, $iFormat = 0, $iBrush = 0xFF000000)
    Local $hBrush, $iError, $hFamily, $hFont, $hFormat, $aInfo, $tLayout, $bResult

    [/autoit] [autoit][/autoit] [autoit]

    $hBrush = _GDIPlus_BrushCreateSolid($iBrush)
    $hFormat = _GDIPlus_StringFormatCreate($iFormat)
    $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    $hFont = _GDIPlus_FontCreate($hFamily, $nSize)
    $tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    $bResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush)
    $iError = @error
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    Return SetError($iError, 0, $bResult)
    EndFunc ; ==> String in Farbe zeichnen

    [/autoit] [autoit][/autoit] [autoit]

    Func _EnableDisableAero($bEnable = True) ;True/False
    Local $aDll = DllCall($hDwmApiDll, "int", "DwmEnableComposition", "int", $bEnable)
    If @error Then Return SetError(@error, 0, 0)
    Return $aDll[0]
    EndFunc ;==>_EnableDisableAero

    [/autoit] [autoit][/autoit] [autoit]

    Func _IsAeroEnable()
    Local $asDll = DllCall($hDwmApiDll, "int", "DwmIsCompositionEnabled", "str", "")
    If @error Then Return SetError(@error, 0, 0)
    Return StringReplace(StringReplace(Asc($asDll[1]), "1", True), "0", False)
    EndFunc ;==>_IsAeroEnable

    [/autoit] [autoit][/autoit] [autoit]

    Func _beenden()
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_GraphicsDispose($Buffer)
    ;_GDIPlus_BrushDispose($hBrush)
    _GDIPlus_Shutdown ()

    [/autoit] [autoit][/autoit] [autoit]

    ;DllClose ($dll)

    [/autoit] [autoit][/autoit] [autoit]

    DllClose($hDwmApiDll)

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    EndFunc; ==> beenden und speicher wieder frei geben

    [/autoit]

    Ich hoffe euch gefällt das Spiel ;)

    Hier noch die Downloades:
    autoit.de/wcf/attachment/7121/
    autoit.de/wcf/attachment/7122/
    autoit.de/wcf/attachment/7123/
    autoit.de/wcf/attachment/7124/
    Hier noch die EXE da es bei einigen zu fehlern kommt:
    autoit.de/wcf/attachment/7140/

  • Saubere Arbeit :thumbup: Einige Konstanten kommen mir bekannt vor... ;)

    Ich habe mich noch nie mit Irrlicht befasst. Sieht so aus, als ob man tolle 3D Sachen darstellen kann...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • wow krass
    wusste garnicht das soetwas mit autoit möglich ist
    eignet ihr euch das ganze Wissen durch probieren an oder gibt es irgendwo noch weiterführende Tutorials als jenes für Einsteiger?

  • OH MEIN GOTT!
    Wie geil ist das denn???
    ich wusst ja gar nicht dass man sowas in Autoit machen kann?
    geht das auch mit richtigen 3d Spielen?
    Also mit xyz Achse :D
    Dann könnt man en richtiges Ego-Shooter machen! muhahahahaha
    nene Spaß beiseite...klasse Arbeit
    RESPEKT
    mfg Tim

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Das ist ja Geil. :thumbup:

  • Echt cool, klasse
    Ich hab damit auch schon mal ein bischen rumprobiert, habs dann aber bleiden lassen, weil ich ständig probleme mit selber animieren hatte, momit hast du die sachen animiert die md2 und so?

    mfg. Jam00

  • Also erstmal finde ich es gut, dass sich so viele dafür interessieren. Ich habe mir das Wissen dazu selber aus dem I-NEt bzw der Readme zusammengesucht und ja es ist möglich einen richtigen Ego-Shooter damit zu erstellen. - Wenn ihr noch Ideen für das Spiel habt - ich bin für Anregungne immer offen. ;)
    Übrigens, ich wollte das Spiel ursprünglich in 2D mit GDIPLUs machen aber das ist leider zu langsam :(

  • sehr sehr gut ;) das lässt einen ja träumen :D will das unbedingt auch können und mir dann ein 3D Spiel machen .. Noch eine Frage wäre es dann auch möglich einen richtigen guten Ego-Shooter zu machen wie zum Beispiel CS oder packt das AutoIt bzw. Irrlicht nicht mehr ? ;)

  • Ich hatte mal einen 3D-Shooter mit der Irrlicht-Engine gemacht, hatte die Links zu den Videos davon in Youtube gestellt oder auch schon Screenshots gezeigt. Jedoch finde ich einige wichtige Dateien nicht mehr.

  • Und die ganzen Models? Selbst erstellt? .. weil das ist ja eine Heidenarbeit die zu animieren, dazu kommt noch das Terrain..

  • Hatte auch schon öfters mich mit Irrlicht versucht, anscheinend binn ich ein Grottiger 3D-Programierer.
    Wollt nur ne Gui erstellen, und hatte nach ner Woche die schnauze echt voll!!!

    Aber echt gute Arbeit :rock:

  • Also bei Irrlicht war es denke ich der C++ Anteil, der dich scheitern lassen hat oder?

    Ich habe eine "zukunftsweisendere" 3D-Spieleprogrammierumgebung für mich gefunden -> Blender Game Engine.

  • Wenn ich eins nie verstamdem habe, dann ist es C++
    ...hatte mich schon vor 10 Jahren mit 'Borland C++ 5 Pro + Lizenz' versucht; hatte auch extra das super Teure Entwicklerhandbuch dazugekauft, und nach knapp 400DM war ich schlauer...

    Ein Lob an Au3!!!

    Aber bei der 'Irrlicht-Engine-Programierung' benötigt man nicht zwangsläufig C++... man kann die Elemente auch mit Au3 steuern.
    Hmmm, und von der 'Blender Game Engine' habe ich noch nie was gehört; auch OpenSource bzw. kostenlos???

    Und mit Irrlicht wollt ich sowas ähnliches wie Aero erstellen, welche die GUI´s eben plastischer erscheinen lässt weil in 3D erstellt.

    [edit]
    Habe mal auf Blender Game Engine geschaut, sieht richtig gut aus; aber isses auch mit AU3 verwendbar???

    Einmal editiert, zuletzt von Techmix (28. September 2009 um 10:25)