Hey, die Tage hatte jmd ein Spiel geschrieben was sich PUNKTI nannte, es war eigentlich sehr lustig, nur etwas verbugt und mit Controls gemacht...
Ich hab angefangen es ein wenig umzuschreiben in GDI+ an sich ist es nichts schweres, doch ich konnte ein wenig üben mit Hex zu arbeiten
Zur Steuerung:
Das Viereck mit dem Schweif bewegt sich immer nach rechts. Man muss den blinkenden Kugeln ausweichen, wenn man nach links klick bleibt das Viereck stehen, doch man verliert Punkte. Wenn man nach rechts klickt wird man schneller und bekommt mehr Punkte. Lenken kann man indem man nach oben bzw unten klickt.
Jedes mal wenn man die andere Seite erreicht werden mehr Kugeln hinzugefügt, dadurch wird es schwerer.
Ich hoffe euch gefällt das kleine Spiel und ihr könnt vllt ein paar Teile gebrauchen.
Dodge the bullet
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=..\Punkterennen.exe
#AutoIt3Wrapper_UseX64=n
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Array.au3>
;;;>>>>> BUGS!!!!:::
;;; - Wenn man eine Kollision verursacht nachdem man Level 1 geschafft hat > Error z. 92. Array hat falsche Anzahl!?
;;;
Global $oi
_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 $Min_Speed = 50, $Max_Speed = 20, $Spieler_Geschwindigkeit = $Min_Speed
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
;; >> Gegner Variablen
Global $iGegnerAnzahl = 50 ;;; 50 +10!!!! WARUM!!?!?!?!
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("Game", $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)
_GDIPlus_GraphicsSetSmoothingMode($hBackbuffer, 2)
$Spieler_hBrush = _GDIPlus_BrushCreateSolid("0x" & Hex(1000, 2) & "ff0000")
$hPen = _GDIPlus_PenCreate(0xff0000ff, 4)
$hPenKreis = _GDIPlus_PenCreate(0xffff0000, 10)
While 1
Sleep(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 $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
;; 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
;; 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)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
_GetCollision()
WEnd
Func _GetCollision()
For $qr = 0 To UBound($aGegner) - 1
If $Spieler_X = $aGegner[$qr][0] And $Spieler_Y = $aGegner[$qr][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[$qr][0], $aGegner[$qr][1], $Spieler_Width, $Spieler_Height, $aGegner[$qr][2])
_GDIPlus_GraphicsDrawLine($hBackbuffer, $aGegner[$qr][0], $aGegner[$qr][1] - 2, $aGegner[$qr][0] + $Spieler_Width, $aGegner[$qr][1] + $Spieler_Height, $hPen)
_GDIPlus_GraphicsDrawLine($hBackbuffer, $aGegner[$qr][0], $aGegner[$qr][1] + $Spieler_Height - 1, $aGegner[$qr][0] + $Spieler_Width, $aGegner[$qr][1], $hPen)
_GDIPlus_GraphicsDrawArc($hBackbuffer, ($aGegner[$qr][0] + $Spieler_Width / 2) - $x / 3, ($aGegner[$qr][1] + $Spieler_Height / 2) - $x / 3, $x / 1.5, $x / 1.5, 0, 360, $hPenKreis)
_GDIPlus_GraphicsDrawArc($hBackbuffer, ($aGegner[$qr][0] + $Spieler_Width / 2) - $x / 2, ($aGegner[$qr][1] + $Spieler_Height / 2) - $x / 2, $x, $x, 0, 360, $hPenKreis)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
Until $x = 1500
If MsgBox(4, "Verloren", "Du bist kollidiert. Das Spiel ist aus." & @CRLF & "Punkte: " & $Punkte & @CRLF & "Zeit: " & $OptTime & " Sek." & @CRLF & "Möchtest du nochmal Spielen?") = 7 Then
_exit()
EndIf
;; WENN TOT!!!
$Punkte = 0
$Startzeit = TimerInit()
$Spieler_X = 10
$Spieler_Y = ($iHeight - 80) / 2 - $Spieler_Height
$iGegnerAnzahl = 50
For $k = 0 To UBound($aSpieler_Pos) - 1
$aSpieler_Pos[$k][0] = 0
$aSpieler_Pos[$k][1] = $Spieler_Y
Next
Global $iGegnerAnzahl = 50
ReDim $aGegner[$iGegnerAnzahl][3]
;; 0 = X
;; 1 = Y
;; 2 = BRUSH
For $t = 0 To UBound($aGegner) - 1
;;>> X
$aGegner[$t][0] = (Random($start, ($iWidth - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
$aGegner[$t][1] = (Random(0, (($iHeight - 80) - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
$aGegner[$t][2] = _GDIPlus_BrushCreateSolid("0xFF" & Hex(Random(99999999, 999999999), 6))
Next
Return
EndIf
Next
EndFunc ;==>_GetCollision
Func _SetNewPlayerPos(ByRef $x, ByRef $Y, ByRef $Speed)
If TimerDiff($ChangeColorTime) >= 500 Then
For $l = 0 To UBound($aGegner) - 1
_GDIPlus_BrushDispose($aGegner[$l][2])
Next
For $l = 0 To UBound($aGegner) - 1
;;>> X
$aGegner[$l][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 $m = 0 To UBound($aSpieler_Pos) - 2
$aSpieler_Pos[$m][0] = $aSpieler_Pos[$m + 1][0]
$aSpieler_Pos[$m][1] = $aSpieler_Pos[$m + 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) And Not _IsPressed(25) Then $Spieler_Geschwindigkeit = $Max_Speed ;; RECHTS
If Not _IsPressed(27) Then $Spieler_Geschwindigkeit = $Min_Speed ;; Wieder langsamer
;; WENN NEUES LEVEL!
If $Spieler_X >= $iWidth Then
$iGegnerAnzahl += 10
ReDim $aGegner[$iGegnerAnzahl][3]
$Spieler_X = 0
For $q = 0 To UBound($aGegner) - 1
;;>> X
$aGegner[$q][0] = (Random($start, ($iWidth - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
$aGegner[$q][1] = (Random(0, (($iHeight - 80) - $Spieler_Speed) / $Spieler_Speed, 1)) * 10
$aGegner[$q][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
Würde mich über Feedback, Lob und Bugs freuen.
Bekannte Bugs
Noch keine
Behobene Bugs
Noch keine