Das Spiel PUNKTI

  • Hallo,

    Ich bin erst seit kurzem Hier im Forum, sonst hätte ich diesen Beitrag schon vorher gemacht.
    Ich kenne auch erst seit kurzem AutoIt, finde es aber eine tolle Sprache, die mir viel Spaß macht, deshalb habe ich mich eingeübt und bin nun soweit, dass ich mir ein eigenes Spiel mache.
    Mein Onkel, selber Programmierer ist, hat zu C64 und DOS Zeiten ein Spiel Programmiert, wo man als Raumschiff verschiedenen gegnerischen Raumschiffen ausweichen muss. Da habe ich mir gedacht, dass ich sowas auch machen kann.

    Lange rede kurzer Sinn:
    Man selber in dem Spiel ist ein Raumschiff und muss Gegnerischen ROTEN Punkten ausweichen. Wenn man gegen solche Punkte stößt ist man sofort Tot.

    Dann etwas zur Planung insgesamt:
    - Das Spiel soll am ende 10 Level haben mit 100 gegnerischen Punkten.
    - Man soll ein eigenes Profil erstellen können ( Erst in Version 2.1_a )
    - Man soll Updates per "Updater" aus dem Internet bekommen können
    - Punkte, die angezeigt werden und nach ein paar Sekunden verschwinden, sodass man sich die merken muss
    - Grüne ( Gute ) und Orange ( Pflicht ) Punkte

    Version 2.0_b ( 11.05.2011 gestartet ) soll haben:
    - 2 weitere Level ( bis Level 5 )
    - Bug mit dem Fenster ( Bugs §2 )
    - ab Level 5 "Gute" Punkte ( + Sammelpunkte )

    Bugs:
    - Manchmal verschiwnden Punkte unbeabsichtigt
    - Der Startbildschirm bleibt bestehen
    - Man sieht das Raumschiff immer am Sartpunkt stehen

    Daten:
    - 326 Zeilen lang ( 11.05.2011 )
    - Level: 3
    - Rote Punkte: 30
    - GDI+? --> Nein
    - aktuell wird an Version 2.0_b gearbeitet

    Hier sind ein paar Bilder:

    Der Startbildschirm:
    [Blockierte Grafik: http://hauke96.bplaced.net/Punkti/Punkti_start.bmp]


    Im Spiel ( Level 1 von 3 :(
    [Blockierte Grafik: http://hauke96.bplaced.net/Punkti/Punkti_burner.bmp]


    Wenn man verloren hat:
    [Blockierte Grafik: http://hauke96.bplaced.net/Punkti/Punkti_gameover.bmp]


    Und die Highscore Liste von 2.0_a:
    [Blockierte Grafik: http://hauke96.bplaced.net/Punkti/Punkti_high.bmp]


    Nun, ich hoffe die Bilder sind gut geworden.

    Neues an Version 2.0_a ( 11.05.2011 beendet :(
    - Highscoreliste übernommen
    - Zeilen extrem veringert ( um ca. 400 Zeilen )
    - Nun greift Punkti auf Dateien Zu, muss also die Punkte nicht immer schon intus haben und man kann selber level erstellen ;)
    - Punkte sind PUNKTE und keine Vierecke mehr
    - Warum kein GDI+? --> Weil ich das noch nicht so gut kann.

    Version 1.0_a:
    - Man kann nun nicht mehr außerhalb des Bereiches
    - Die Highscoreliste sortiert sich von selber
    - es gibt nun "Gute" Punkte ( bringen 50 Punkte )

    Wenn ihr irgendwas zu meckern habt, meckert ruhig, aber bitte auch mit verbesserungen, wie gesagt, ich bin noch kein Profi und lerne noch immer dazu, danke.

    Download:
    autoit.de/wcf/attachment/13256/
    autoit.de/wcf/attachment/13062/


    mfg
    hauke96

  • Da solltest nochmal drüberschauen. Scite gibt aus: 0 error(s), 52 warning(s)

    Halt mal die rechte Pfeiltaste gedrückt und warte bis der blaue Punkt rechts raus ist. Dann geht das Level unendlich weiter und ebenso die Punkte.


    Folgende includes sind überflüssig:

    Array.au3
    ButtonConstants.au3
    Date.au3
    File.au3
    GUIConstants.au3

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (4. April 2011 um 07:43)

  • Zitat von Hauke96

    Nun zum Eingemachten:
    Der Code hat inzwischen über 1200 Zeilen.

    Wenn man sich den Code betrachtet sieht man als erstes, das man es SEHR STARK verkürzen könnte. Die ganzen Controls Löschen udn erstellen... 3 zeilen um alle zu löschen.
    Das Zauberwort heißt: Arrays
    Guck dir mal das Tutorial von BugFix an, damit sollte man es schnell lernen.

    Die ganzen If Fragen etc könnte man dadurch auch verkürzen. Das Spiel an sich hat (nach meinen erkenntnissen) noch ein paar Bugs. Und wie Mattthias schon sagte, in GDI+ wäre es eindeutig besser. Das Pukte Label flackert auch, weil es zu schnell geändert wird.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Hallo,

    Leute, ich habe geschrieben, dass es noch Bugs gibt, dass ich erst ein Anfänger bin und dass es noch nicht fertig ist, ich werde das mit den Arrays ausprobieren, habe gerade erst ein paar Tutorials angesehen und bin noch nicht ganz so geübt. Zu den Includes kann ich sagen: Stimmt!, doch habe ich die mal gebraucht, als das Spiel in den Kinderschuhen steckte. Villeicht brauche ich sie ja nochmal.

    Aber ich hätte da noch eine Frage: Was ist GDI+?

    mfg
    hauke96

  • So, hab es mal in GDI+ geschrieben. Unter 100 Zeilen. Zu deiner Frage: GDI+ Ist eine UDF die man verwenden kann um z.B. Formen, Farben etc zu zeichnen. Sie beruht (GLAUBE ICH!) auf einer DLL Die GDIPlus heißt.
    Es gibt viele Tutorials z.B. das von Ubuntu, da bekommst du es genauer erklärt.

    Hab noch einen Schweif drangehangen :D
    Langsam fängts an Spaß zu machen... hab jetzt Bunte flackernde Kugeln als Wände benutzt :D

    Mein Script:

    PUNKTI mal anders...
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    _GDIPlus_Startup()
    Opt("GUIOnEventMode", 1)
    ;; >> GUI Variablen
    Global $iWidth = 800, $iHeight = 400
    Global $start = 8
    ;; >> Spielfigur Variablen
    Global $Spieler_Speed = 10, $TimerInit = TimerInit(), $Startzeit = TimerInit(), $ChangeColorTime = TimerInit()
    Global $Spieler_Height = $Spieler_Speed, $Spieler_Width = $Spieler_Speed, $Spieler_X = 10, $Spieler_Y = ($iHeight - 80) / 2 - $Spieler_Height
    Global $Spieler_Geschwindigkeit = 100

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

    Global $altX = $Spieler_X, $altY = $Spieler_Y

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

    Global $Schweif = 20
    Dim $aSpieler_Pos[$Schweif][3]
    For $i = 0 To UBound($aSpieler_Pos) - 1
    $aSpieler_Pos[$i][0] = 0
    $aSpieler_Pos[$i][1] = $Spieler_Y
    $aSpieler_Pos[$i][2] = _GDIPlus_BrushCreateSolid("0x" & Hex(((250 / $Schweif) * $i), 2) & "FF0000")
    Next

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

    ;; >> Gegner Variablen
    Global $iGegnerAnzahl = 50
    Dim $aGegner[$iGegnerAnzahl][3]
    ;; 0 = X
    ;; 1 = Y
    ;; 2 = BRUSH
    For $i = 0 To UBound($aGegner) - 1
    ;;>> X
    $aGegner[$i][0] = (Random($start, ($iWidth - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
    $aGegner[$i][1] = (Random(0, (($iHeight - 80) - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
    $aGegner[$i][2] = _GDIPlus_BrushCreateSolid("0xFF" & Hex(Random(99999999, 999999999), 6))
    Next
    ;; SoNSTIGE VARIABLEN
    Global $Punkte = 0, $PunktePlus = 1
    $hWnd = GUICreate("PUNKTI mal anders...", $iWidth, $iHeight, -1, -1, $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUISetState()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $Spieler_hBrush = _GDIPlus_BrushCreateSolid("0x" & Hex(1000, 2) & "ff0000")
    $hPen = _GDIPlus_PenCreate(0xff0000ff, 4)
    $hPenKreis = _GDIPlus_PenCreate(0xffff0000, 10)

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

    While 1
    _GDIPlus_GraphicsClear($hBackbuffer, 0xffaaaaaa)
    ;; HINTERGRUND
    _GDIPlus_GraphicsFillRect($hBackbuffer, 0, 0, $iWidth, $iHeight - 80)

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

    ;; SPIELER
    _GDIPlus_GraphicsFillRect($hBackbuffer, $Spieler_X, $Spieler_Y, $Spieler_Width, $Spieler_Height, $Spieler_hBrush)

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

    $aSpieler_Pos[UBound($aSpieler_Pos) - 1][0] = $altX
    $aSpieler_Pos[UBound($aSpieler_Pos) - 1][1] = $altY

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

    For $i = 0 To UBound($aSpieler_Pos) - 1
    _GDIPlus_GraphicsFillRect($hBackbuffer, $aSpieler_Pos[$i][0], $aSpieler_Pos[$i][1], $Spieler_Width, $Spieler_Height, $aSpieler_Pos[$i][2])
    Next

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

    ;; Neue Pos setzen!
    _SetNewPlayerPos($Spieler_X, $Spieler_Y, $Spieler_Speed)
    ;; HINDERNISSe!
    For $i = 0 To UBound($aGegner) - 1
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, $aGegner[$i][0], $aGegner[$i][1], $Spieler_Width, $Spieler_Height, $aGegner[$i][2])
    Next

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

    ;; Strings!
    _GDIPlus_GraphicsDrawString($hBackbuffer, "Punkte: " & $Punkte, 0, $iHeight - 80, "Times", 14)
    $time = StringSplit((TimerDiff($Startzeit)), ".")
    $OptTime = StringLeft($time[1], StringLen($time[1]) - 3)
    _GDIPlus_GraphicsDrawString($hBackbuffer, "Zeit: " & $OptTime & " Sek.", 0, $iHeight - 60, "Times", 14)

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

    _GetCollision()

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
    WEnd

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

    Func _GetCollision()
    For $i = 0 To UBound($aGegner) - 1
    If $Spieler_X = $aGegner[$i][0] And $Spieler_Y = $aGegner[$i][1] Then
    $x = 0
    Do
    $hPenKreis = _GDIPlus_PenCreate("0x" & Hex($x / 10, 2) & "ff0000", 10)
    $x += 20
    _GDIPlus_GraphicsClear($hBackbuffer, 0xffaaaaaa)
    ;; HINTERGRUND
    _GDIPlus_GraphicsFillRect($hBackbuffer, 0, 0, $iWidth, $iHeight - 80)
    ;; SPIELER
    _GDIPlus_GraphicsFillRect($hBackbuffer, $Spieler_X, $Spieler_Y, $Spieler_Width, $Spieler_Height, $Spieler_hBrush)
    $aSpieler_Pos[UBound($aSpieler_Pos) - 1][0] = $altX
    $aSpieler_Pos[UBound($aSpieler_Pos) - 1][1] = $altY
    For $t = 0 To UBound($aSpieler_Pos) - 1
    _GDIPlus_GraphicsFillRect($hBackbuffer, $aSpieler_Pos[$t][0], $aSpieler_Pos[$t][1], $Spieler_Width, $Spieler_Height, $aSpieler_Pos[$t][2])
    Next
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, $aGegner[$i][0], $aGegner[$i][1], $Spieler_Width, $Spieler_Height, $aGegner[$i][2])
    _GDIPlus_GraphicsDrawLine($hBackbuffer, $aGegner[$i][0], $aGegner[$i][1] - 2, $aGegner[$i][0] + $Spieler_Width, $aGegner[$i][1] + $Spieler_Height, $hPen)
    _GDIPlus_GraphicsDrawLine($hBackbuffer, $aGegner[$i][0], $aGegner[$i][1] + $Spieler_Height - 1, $aGegner[$i][0] + $Spieler_Width, $aGegner[$i][1], $hPen)

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

    _GDIPlus_GraphicsDrawArc($hBackbuffer, ($aGegner[$i][0] + $Spieler_Width / 2) - $x / 3, ($aGegner[$i][1] + $Spieler_Height / 2) - $x / 3, $x / 1.5, $x / 1.5, 0, 360, $hPenKreis)
    _GDIPlus_GraphicsDrawArc($hBackbuffer, ($aGegner[$i][0] + $Spieler_Width / 2) - $x / 2, ($aGegner[$i][1] + $Spieler_Height / 2) - $x / 2, $x, $x, 0, 360, $hPenKreis)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
    Until $x = 1500
    MsgBox(0, "Verloren", "Du bist kollidiert. Das Spiel ist aus." & @CRLF & "Punkte: " & $Punkte & @CRLF & "Zeit: " & $OptTime & " Sek.")
    _exit()
    EndIf
    Next
    EndFunc ;==>_GetCollision

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

    Func _SetNewPlayerPos(ByRef $x, ByRef $Y, ByRef $Speed)
    If TimerDiff($ChangeColorTime) >= 500 Then
    For $i = 0 To UBound($aGegner) - 1
    _GDIPlus_BrushDispose($aGegner[$i][2])
    Next
    For $i = 0 To UBound($aGegner) - 1
    ;;>> X
    $aGegner[$i][2] = _GDIPlus_BrushCreateSolid("0xFF" & Hex(Random(99999999, 999999999), 6))
    Next
    $ChangeColorTime = TimerInit()
    EndIf
    If TimerDiff($TimerInit) >= $Spieler_Geschwindigkeit Then
    $altX = $x
    $altY = $Y
    $Punkte += $PunktePlus
    $x += $Speed
    For $i = 0 To UBound($aSpieler_Pos) - 2
    $aSpieler_Pos[$i][0] = $aSpieler_Pos[$i + 1][0]
    $aSpieler_Pos[$i][1] = $aSpieler_Pos[$i + 1][1]
    Next
    $TimerInit = TimerInit()
    If Not _IsPressed(25) Then
    $Speed = $Spieler_Width
    $PunktePlus = 1
    EndIf
    If _IsPressed(25) Then
    $PunktePlus = -1
    $Speed = 0
    EndIf
    If _IsPressed(26) And $Spieler_Y >= $Spieler_Height Then $Spieler_Y -= $Speed;; OBEN
    If _IsPressed(28) And $Spieler_Y <= ($iHeight - 80) - $Spieler_Width * 2 Then $Spieler_Y += $Speed;; UNTEN
    If _IsPressed(27) Then $Spieler_Geschwindigkeit = 50 ;; RECHTS
    If Not _IsPressed(27) Then $Spieler_Geschwindigkeit = 100 ;; Wieder langsamer

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

    ;; WENN NEUES LEVEL!
    If $Spieler_X >= $iWidth Then
    $iGegnerAnzahl += 10
    ReDim $aGegner[$iGegnerAnzahl][3]
    $Spieler_X = 0
    For $i = 0 To UBound($aGegner) - 1
    ;;>> X
    $aGegner[$i][0] = (Random($start, ($iWidth - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
    $aGegner[$i][1] = (Random(0, (($iHeight - 80) - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
    $aGegner[$i][2] = _GDIPlus_BrushCreateSolid("0xFF" & Hex(Random(99999, 999999), 6))
    Next
    EndIf
    EndIf
    EndFunc ;==>_SetNewPlayerPos
    Func _exit()
    For $i = 0 To UBound($aSpieler_Pos) - 1
    _GDIPlus_BrushDispose($aSpieler_Pos[$i][2])
    Next
    For $i = 0 To UBound($aGegner) - 1
    _GDIPlus_BrushDispose($aGegner[$i][2])
    Next
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BrushDispose($Spieler_hBrush)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

    4 Mal editiert, zuletzt von BadBunny (4. April 2011 um 18:24)

  • Update auf 2.0_a:

    Hallo, ich habe mir ein wenig Zeit genommen und versucht Punkti in GDI+ zu programmieren, bin aber leider noch nicht soweit, deshalb habe ich das Script ohne GDI+ gekürzt und etwas verbessert. Mehr infos gibt es oben.

    mfg
    Hauke96

  • Fals du dir mal GDI+ und Arrays anschauen willst, kannst du auch mal Dodge the Bullet anschauen, du findest es in meiner Signatur. Die Idee kam mit durch Punkti. Wenn du was erklärt haben möchtest kannst du einfach fragen :)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Kenn ich, hab ich mir schonmal angesehen ;)

    Ich habe eine Frage: Wie hast du es hinbekommen, dass er a.) soviele Punkte generiert und b.) dass er kontrolliert ob man gegen einen Punkt gestoßen ist?

    Wäre cool wenn du ein kleines mini Beispielscript schreiben könntest, muss ja nur mit drei Punkten oder so sein, weil mit Scripten verstehe ich das immer besser, vielen dank schon mal!

    mfg
    hauke96

  • Zitat

    a.) soviele Punkte generiert


    ich lass ein Array mit zufalls Daten füllen, also immer X und Y, und diese Zeichne ich dann (je mehr Indexe das Array hat, desto langsamer wird das Programm)

    Zitat

    dass er kontrolliert ob man gegen einen Punkt gestoßen ist?


    Man überprüft ob die X und Y Daten der Figur (Also die Spitze der Figur) gleich irgend einer anderen Position der Kreise ist.

    Beispiel:

    X_Spieler = 1
    Y_Spieler = 1

    X_Kreis = 2
    Y_Kreis = 1

    Würde NICHT kollidieren

    X_Spieler = 2
    Y_Spieler = 1

    X_Kreis = 2
    Y_Kreis = 1

    Jetzt wo X_Spieler auch gleich 2 ist, kollidiert unsere Figur.

    Ein kleines Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    Global $Figur_X = 0
    Global $Figur_Y = 50
    Global $Figur_Width = 10
    Global $Figur_Height = 10

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

    Global $iWidth = 200
    Global $iHeight = 100

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

    Global $Next_Timer = TimerInit()

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

    Global $iEnemyAnzahl = 8
    Dim $aEnemys[$iEnemyAnzahl][2] ; Array mit Größe $iEnemyAnzahl [n]=Gegner, [n][0] = X [n][1] = Y

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

    ;; Für jeden Gegner eine Zufallsposition setzen
    For $i = 0 To UBound($aEnemys) - 1
    ;; X setzen
    $aEnemys[$i][0] = Random(0, $iWidth / $Figur_Width, 1) * $Figur_Width
    ;; Y setzen
    $aEnemys[$i][1] = Random(0, $iHeight / $Figur_Height, 1) * $Figur_Height
    Next

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

    $hWND = GUICreate("Beispiel", $iWidth, $iHeight)
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWND)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphic)
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBackbuffer, 2)

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

    While GUIGetMsg() <> $GUI_EVENT_CLOSE

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

    ;; Malt alles Weiß
    _GDIPlus_GraphicsClear($hBackbuffer, 0xffffffff)

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

    ;; Zeichne unsere Figur
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, $Figur_X, $Figur_Y, $Figur_Width, $Figur_Height)

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

    ;; Setzt unsere Figur nach rechts, wenn Timer >= 200 ist
    If TimerDiff($Next_Timer) >= 200 Then

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

    ;; Überprüft Tastendruck
    ;; Oben (26)
    If _IsPressed(26) Then
    $Figur_Y -= $Figur_Height
    ;; Unten (28)
    ElseIf _IsPressed(28) Then
    $Figur_Y += $Figur_Height
    EndIf

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

    ;; Schritt nach Rechts
    $Figur_X += $Figur_Width
    $Next_Timer = TimerInit()
    EndIf

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

    ;; malt Gegner
    For $i = 0 To UBound($aEnemys) - 1
    _GDIPlus_GraphicsFillRect($hBackbuffer, $aEnemys[$i][0], $aEnemys[$i][1], $Figur_Width, $Figur_Height)
    Next

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

    ;; Überprüft ob Figur aus dem Feld ist, wenn ja dann nach vorne und neue Gegnerposition
    If $Figur_X >= $iWidth - $Figur_Width Then
    ;; Setzt X auf 0
    $Figur_X = 0

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

    ;; Für jeden Gegner eine Zufallsposition setzen
    For $i = 0 To UBound($aEnemys) - 1
    ;; X setzen
    $aEnemys[$i][0] = Random(0, $iWidth / $Figur_Width, 1) * $Figur_Width
    ;; Y setzen
    $aEnemys[$i][1] = Random(0, $iHeight / $Figur_Height, 1) * $Figur_Height
    Next
    EndIf

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

    ;; Überprüft Kollision
    For $i = 0 To UBound($aEnemys) - 1
    If $aEnemys[$i][0] = $Figur_X And $aEnemys[$i][1] = $Figur_Y Then
    MsgBox(0, "Verloren", "Du hast verloren")
    Exit
    EndIf
    Next

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

    ;; Malt Bitmap auf Graphic
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iWidth, $iHeight)
    WEnd

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()

    [/autoit]

    Ich hoffe es ist gut erklärt, fals du noch was nicht verstehst frag einfach :)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake