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 .
[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
Hier noch der Quellcode:
Spiel:
Spoiler anzeigen
#include "IrrlichtPluginUtils.au3"
#include <windowsconstants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <Array.au3>
#include <Partikel.au3>
#include <Mathe.au3>
#include <Sound.au3>
Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)
Opt('MouseCoordMode', 1)
HotKeySet("{ESC}","beenden")
;HotKeySet("{F9}","aufloesung") ; funktioniert noch nicht
Global $width = @DesktopWidth
Global $height = @DesktopHeight
Global $title = "Model"
Global Const $tex_dir = @ScriptDir & "\texturen\"
Global Const $mdl_dir = @ScriptDir & "\models\"
Global Const $snd_dir = @ScriptDir & "\sounds\"
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,
Opt( "TrayIconHide", 1 )
Opt( "WinTitleMatchMode", 3 )
Global $hwnd = GUICreate($title, $width, $height)
GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")
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)
Global $camera_x, $camera_y, $camera_z = -300, $camera_y_hight = 100
Global $Camera = AddCameraSceneNode(0, 0,150,-200,0,0,0 )
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))
;#### 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")
Global Const $leben_max = 10
Global $Leben[2]
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)
#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")
Global $Plattform_Mesh = GetMesh($mdl_dir & "Plattform.md2")
Global $Plattform_Texture = GetTexture($mdl_dir & "Plattform.jpg")
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")
Global $save_point_mesh = GetMesh($mdl_dir & "save.md2")
Global $save_point_tex = GetTexture($mdl_dir & "save.jpg")
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")
Global $light_save = AddBillboardSceneNode( 0, 128, 128 )
Global $light_tex = GetTexture($tex_dir & "\particlewhite.bmp")
#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
Global $Box[1][2]
Global $Box_Node[1]
Global $Box_Coords[1][2]
Global $map_blocks[256][11]
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
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]
Global $Coin[1][4]
Global $Coins_rotation
Global $Coins_collected = 0
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")
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
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 ()
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]
$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]
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")
If $gegner_status[$i] = "Alive" Then
[/autoit] [autoit][/autoit] [autoit]Switch $gegner_type[$i]
Case "Pilz"
$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]
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
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
$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
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
$gegner_pos[$i][0] += $gegner_speed[$i]
Else
$gegner_speed[$i] = -$gegner_speed[$i]
EndIf
Else
$gegner_speed[$i] = -$gegner_speed[$i]
EndIf
EndIf
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
SetPosition($gegner[$i], $gegner_pos[$i][0], $gegner_pos[$i][1] + 20, 0)
SetRotationByAxis($gegner[$i], "Y", $gegner_rotation[$i])
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
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"
$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)
_SoundPlay($snd_kill)
Else
$jump_p = 100
$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]
_SoundPlay($snd_kill)
EndIf
Else
reset_game()
EndIf
EndIf
EndIf
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]
;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
$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
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
Local $kolli = True
Local $kolli_pl = True
Local $bewegung_ges[2] = [0,$bewegung_y_o + $jump_p / 20]
;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
$bewegung_ges[0] = $bewegung_x_o + $bewegung_x
$bewegung_ges[1] = $bewegung_y_o + $jump_p / 20
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
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]
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
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
;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
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
$map_blocks[$BreakableBlock[$breakblock][0]][$BreakableBlock[$breakblock][1]] = False
Setvisible($BreakableBlock[$breakblock][2],0)
$BreakableBlock[$breakblock][3] = True
_SoundPlay($snd_break)
$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
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
Else
$Player_y += $jump_p / 20
If $Player_y < -100 Then
_SoundPlay($snd_runterfallen)
reset_game()
EndIf
EndIf
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
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
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
Else
$Box[$i][1] += $Box_fallen[$i] / 5
SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)
If $Box[$i][1] - 20 < -100 Then
SetVisible($Box_node[$i],0)
EndIf
EndIf
[/autoit] [autoit][/autoit] [autoit]Next
EndFunc
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
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
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
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
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])
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)
_SoundPlay($snd_checkpoint)
EndIf
EndIf
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
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
$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
#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
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
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
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
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)
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]
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
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
ReDim $Box_Node[$i + 1]
ReDim $Box_Coords[$i + 1][2]
$Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
$Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]
$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
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
ReDim $Box_Node[$i + 1]
ReDim $Box_Coords[$i + 1][2]
$Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
$Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]
$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
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
ReDim $Box_Node[$i + 1]
ReDim $Box_Coords[$i + 1][2]
$Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
$Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]
$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
$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]
$objekt[$i] = AddMeshSceneNode($Plattform_Mesh)
SetMaterialTexture($objekt[$i], 0, $Plattform_Texture)
$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
$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]
$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
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]
$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
$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
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
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)
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]
$save_points[$i][0] = $Level_Ini[$i * 2 + 1][1] * 40
$save_points[$i][1] = $Level_Ini[$i * 2 + 2][1] * 40
$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)
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]
$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
$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)
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]
$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
$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)
$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)
$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)
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
ReDim $Box_Coords[$i + 1][2]
ReDim $BreakableBlock[$i + 1][4]
$Box_Coords[$i][0] = $Level_Ini[$i * 3 + 1][1]
$Box_Coords[$i][1] = $Level_Ini[$i * 3 + 2][1]
$BreakableBlock[$i][0] = $Level_Ini[$i * 3 + 1][1]
$BreakableBlock[$i][1] = $Level_Ini[$i * 3 + 2][1]
$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)
Next
EndIf
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
$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)
Next
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func reset_game()
[/autoit] [autoit][/autoit] [autoit]$Leben[0] -= 1
If $Leben[0] = -1 Then beenden()
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]
$moving_objects_speed[$i] = Abs($moving_objects_speed[$i])
[/autoit] [autoit][/autoit] [autoit]Next
For $i = 0 To UBound($gegner_speed) - 1 Step 1
$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
$Box[$i][0] = $Box_reset[$i][0]
$Box[$i][1] = $Box_reset[$i][1]
SetVisible($Box_node[$i],1)
SetPosition($Box_node[$i], $Box[$i][0], $Box[$i][1], 0)
Next
For $i = 0 To UBound($Tuer_move) - 1 Step 1
$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
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
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func aufloesung()
[/autoit] [autoit][/autoit] [autoit]If $width = 640 Then
$width = @DesktopWidth
$height = @DesktopHeight
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")
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
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
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
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)
Exit
EndFunc
Editor:
Spoiler anzeigen
#include <GuiConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Sound.au3>
#include <Misc.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)
Opt('MouseCoordMode', 0)
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];
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
Local $mouse_pos[2], $mouse_pos_a[2]
[/autoit] [autoit][/autoit] [autoit]Global $hGUI = GUICreate("Editor", $width, $height+40)
GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
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
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
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()
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]])
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
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
$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
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
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
EndIf
[/autoit] [autoit][/autoit] [autoit]_zeichnen()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImageRect($hGraphic, $Bitmap,0,0, $width, $height)
;Do
;Until _IsPressed(27)
;Sleep(200)
[/autoit] [autoit][/autoit] [autoit]Else
Sleep(100)
EndIf
WEnd
[/autoit] [autoit][/autoit] [autoit]Func SetItem()
For $i = 0 To UBound($objekte) - 1 Step 1
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.")
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]
Global $Objekte_MaxParameter
Global $Objekte_MaxTeile
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)
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]
$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)
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]
$Objekte[$i] = StringToBinary($Objekte[$i]) ; Binary für schnellere Zugriffszeiten
Next
IF $devmode Then
[/autoit] [autoit][/autoit] [autoit]_ArrayDisplay($Objekte)
_ArrayDisplay($objekte_parameter)
_ArrayDisplay($Objekte_SetValves)
_ArrayDisplay($Objekte_CurValves)
_ArrayDisplay($Objekte_UsesTeile)
_ArrayDisplay($Objekte_HowtoDraw)
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)
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
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
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
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
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
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)
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])
Next
Next
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]
If IsArray($Objekte_CurValves) Then
ReDim $Objekte_CurValves[UBound($Objekte_CurValves)+1][$Objekte_MaxParameter+1]
Else
Dim $Objekte_CurValves[1][$Objekte_MaxParameter+1]
EndIf
$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
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
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
Dim $draw_lines[1][1]
Dim $Objekte_CurValves[1][1]
_ArrayDelete($Objekte_CurValves,0)
_ArrayDelete($draw_lines,0)
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
Func _GDIPlus_BrushSetSolidColor($hBrush, $iARGB = 0xFF000000)
Local $aResult
$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
Func _GDIPlus_GraphicsDrawStringColor($hGraphics, $sString, $nX, $nY, $sFont = "Arial", $nSize = 10, $iFormat = 0, $iBrush = 0xFF000000)
Local $hBrush, $iError, $hFamily, $hFont, $hFormat, $aInfo, $tLayout, $bResult
$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
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
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
Func _beenden()
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_BitmapDispose($Bitmap)
_GDIPlus_GraphicsDispose($Buffer)
;_GDIPlus_BrushDispose($hBrush)
_GDIPlus_Shutdown ()
;DllClose ($dll)
[/autoit] [autoit][/autoit] [autoit]DllClose($hDwmApiDll)
[/autoit] [autoit][/autoit] [autoit]Exit
EndFunc; ==> beenden und speicher wieder frei geben
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/