Ich habe heute kurz mal ein Spiel zusammen gezimmert, welches ich dann aber gut genug fand, dass ich es mal hier rein stellen wollte.
Es geht bei diesem Spiel nur darum Punkte zu bekommen, d.h. du kannst nicht sterben oder so.
So jetzt näheres zu meinem Spiel:
Man fliegt im Weltall und muss Gegner abschießen, welche von vorne auf ein zufliegen. Die Gegner sind unterschiedlich groß und unterschiedlich schnell, aber sie sehen alle gleich aus und haben ansonsten die gleichen Eigenschaften. Man hat zwei Waffen zur Verfügung, nämlich die Laserkanone und die Anti-Materie-Kanone.
Die Laserkanone zerstört gezielt das nächste Raumschiff vor einem, während die Anti-Materie-Kanone einfach alles zerstört.
Anzeigen:
Die grünen Kästen oben links zeigen die Lebensenergie an. Immer wenn ein UFO gegen einen prallt, verliert man einen Lebenspunkt. Wenn sie alle sind, verwackelt das Bild etwas und man verliert Punkte, die Lebenspunkte werden danach wieder auf drei gesetzt.
Die blaue Anzeige rechts daneben zeigt dir an, wie lange es noch dauert bis du die Anti-Materie-Kanone benützen kannst
Die roten Kästchen rechts daneben stellen die Energie dar, die für den Laser gebraucht wird. Wenn man schießt verbraucht sich ein Kästchen. Diese Kästchen laden sich langsam wieder auf (je höher das Level desto schneller), aber nur bis zehn Schüsse.
Noch weiter rechts befindet sich die lila Entfernungsanzeige, welche dir zeigt wie lange es noch bis zum nächsten Level dauert.
Ganz oben rechts hast du noch eine kleine Karte die Gegner (rot) und dich(blau) anzeigt.
Steuerung:
{up} = bewegt dich nach oben
{down} = bewegt dich nach unten
{left} = bewegt dich nach links
{right} = bewegt dich nach rechts
{Space} = benützt die Laserkanone
{CTRL} = benützt die Anti-Materie-Kanone
{P} = Pausiert das Spiel
{Esc} = Beendet das Spiel
Punkte Verteilung:
Es gibt verschiedene Sachen, die bewertet werden:
Zerstörte Gegner =
Punkte für jeden mit Laser zerstörten Gegner, wobei die kleineren am meisten Punkte bringen.
Überlebende Gegner =
Jeder durchkommende Gegner zieht 20 Punkte ab
Beschädigung =
Punkte werden permanent verteilt, je nach dem wie viel Schaden du hast
Antimaterie =
Für die Benutzung der Anti-Materie-Kanone werden dir 200 Punkte abgezogen, du erhältst aber auch Punkte für jeden zerstörten Gegner (lohnt sich erst in späteren Levels)
Sicheres Fliegen =
Hier wird bewertet, ob du dich defensiv nach hinten verkriechst (negativ) oder ob du dich offensiv nach vorne traust (positiv)
Lvl Bonus=
Hier stehen deine Punkte, die du für jedes abgeschlossene Level bekommst
Spoiler anzeigen
#include<Misc.au3>
#include<GDIPlus.au3>
$Punkte_anzeigen = true
HotKeySet("{esc}","End")
Dim $Attribute[5] = [9.9,0,3,50,90] ; HP SP ZT XPos YPos
Dim $Punkte[6] = [0,0,0,0,0,0] ; Abgeschossen Durchkommer Hülle Spezial Flucht lvl
Dim $Lvl = 1
Dim $Wackeln = 0
Dim $Schuss[4] = [0,0,0,0] ; X Y Breite Zeit
Dim $Feuer = 0
_GDIPlus_Startup()
$hGUI = GUICreate("Sehr kleines Minispiel",500,200)
$hGrafik = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(500,200,$hGrafik)
$Context = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$PBlau = _GDIPlus_PenCreate(0xFF0000FF)
$BBlau = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$PGruen = _GDIPlus_PenCreate(0xFF00FF55)
$BGruen = _GDIPlus_BrushCreateSolid(0xFF00FF55)
$BRot = _GDIPlus_BrushCreateSolid(0xFFFF1133)
$PGelb = _GDIPlus_PenCreate(0xFFFFFF00)
$BLila = _GDIPlus_BrushCreateSolid(0xFFFF00FF)
$PLila = _GDIPlus_PenCreate(0xFFFF00FF)
$PLaser = _GDIPlus_PenCreate(0xFFFF0077)
$BWeis = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 12)
$tRect = _GDIPlus_RectFCreate(20, 170, 0, 0)
$aInfo = _GDIPlus_GraphicsMeasureString($hGrafik, "Punkte: ", $hFont, $tRect, $hFormat)
$label = GUICtrlCreateLabel("",0,0,500,200)
GUICtrlSetBkColor($Label,0x000000)
GUICtrlSetColor($Label,0xFFFFFF)
GUISetState(1,$hGUI)
$stext = "Weltraumpilot gesucht"&@cr&@cr&"Benötigt wird nur:"&@cr&"Raumflugkenntnisse"&@cr&@cr&"Bei Interesse bitte melden."
For $i = 1 to StringLen($stext) - 1
$Timer = TimerInit()
GUICtrlSetData($label,Stringleft($stext,$i)&"|")
sleep (50-Timerdiff($Timer))
If _IsPressed(1) Then exitloop
next
GUICtrlSetData($label,$stext)
While _IsPressed("0D") = 0
WEnd
$stext = "Sehr schön, dass Sie sich für diesen Job entschieden haben."&@cr&"Ihre Aufgabe besteht darin, den Erkundungsflug in Richtung Mars zu leiten."&@cr&"Dies ist nicht weiter schwierig, Sie müssen nur verhindern, dass die Erkundungsflotte beschädigt wird."&@cr&"Leider haben wir in der letzten Zeit einige Probleme mit UFOs gehabt, deswegen wird Ihr Schiff mit zwei Waffen ausgestattet sein:"&@cr&@cr&"Laserkanone:"&@cr&"Dies ist eine schnelle Waffe, die nur wenig Ladezeit benötigt. Sie kann auf Space aktiviert werden."&@cr&"Die Einheiten der Lasermunition werden oben als rote Rechtecke dargestellt."&@cr&@cr&"Die Anti-Materie-Kanone:"&@cr&"Die Durchschlagskraft ist 100mal höher als die von Fusionswaffen. Diese Waffe zerstört alle feindlichen Raumschiffe. Sie wird auf Strg aktiviert."&@cr&"Die Waffe muss lange aufgeladen werden. Wie weit sie ist sieht du am blauen Balken oben."
For $i = 1 to StringLen($stext) - 1
$Timer = TimerInit()
GUICtrlSetData($label,Stringleft($stext,$i)&"|")
sleep (50-Timerdiff($Timer))
If _IsPressed(1) Then exitloop
next
GUICtrlSetData($label,$stext)
While _IsPressed("0D") = 0
WEnd
GUICtrlSetData($label,"")
For $lvl = 1 to 10 step + 1
Dim $Gegner[$lvl][4]; X Y Größe Speed
For $i = 0 to $lvl-1
$Gegner[$i][2] = Random(20,50,1)
$Gegner[$i][0] = Random(500,501 + $lvl * 100,1)
$Gegner[$i][1] = Random(0,200 -$Gegner[$i][2],1)
$Gegner[$i][3] = Random(200,201+100*$lvl,1) / 100
next
For $i = -50 to $Attribute[3]
$i += 5
$Timer = TimerInit()
_GDIPlus_GraphicsDrawPolygon($Context,Raumschiff($i,$Attribute[4],50,20),$PBlau)
_GDIPlus_GraphicsDrawImage($hGrafik,$hBitmap,0,0)
_GDIPlus_GraphicsClear($Context,0xFF000000)
sleep (50-Timerdiff($Timer))
next
For $Weite = 0 to $lvl * 15 + 50 step + 0.1
$Timer = TimerInit()
_GDIPlus_GraphicsClear($Context,0xFF000000)
_GDIPlus_GraphicsDrawPolygon($Context,Raumschiff($Attribute[3],$Attribute[4],50,20),$PBlau)
For $i = 0 to Int($Attribute[0])
_GDIPlus_GraphicsFillRect($Context,5 + 5 * $i,2,3,5,$BGruen)
next
_GDIPlus_GraphicsdrawRect($Context,70,2,50,5,$PBlau)
_GDIPlus_GraphicsfillRect($Context,70,2,$Attribute[1] / 2,5,$BBlau)
_GDIPlus_GraphicsdrawRect($Context,200,2,100,5,$PLila)
_GDIPlus_GraphicsfillRect($Context,200,2,$Weite/($lvl * 15 + 50) * 100,5,$BLila)
For $i = 1 to Int($Attribute[2])
_GDIPlus_GraphicsFillRect($Context,130 + 5 * $i,2,3,5,$BRot)
next
_GDIPlus_GraphicsdrawRect($Context,350,2,100,20,$PGruen)
If $Attribute[3] > -40 and $Attribute[3] < 490 and $Attribute[4] >-10 and $Attribute[4] < 190 Then _GDIPlus_GraphicsfillPie($Context,350+$Attribute[3]/10,2+$Attribute[4]/10,5,5,0,360,$BBlau)
For $i = 0 to $lvl-1
$Gegner[$i][0] -= $Gegner[$i][3]
_GDIPlus_GraphicsDrawPolygon($Context,Gegner($Gegner[$i][0],$Gegner[$i][1],$Gegner[$i][2],$Gegner[$i][2]),$PGelb)
If $Gegner[$i][0]< 900 and $Gegner[$i][0]> 0 Then _GDIPlus_GraphicsfillPie($Context,350+$Gegner[$i][0]/10,2+$Gegner[$i][1]/10,2,2,0,360,$BRot)
If $Gegner[$i][0] < -50 Then
$Gegner[$i][2] = Random(20,50,1)
$Gegner[$i][0] = Random(500,501 + $lvl * 100,1)
$Gegner[$i][1] = Random(0,200 -$Gegner[$i][2],1)
$Gegner[$i][3] = Random(200,201+100*$lvl,1) / 100
$Punkte[1] -= 20
EndIf
If $Gegner[$i][0] -50 < $Attribute[3] and $Gegner[$i][0] +$Gegner[$i][2] > $Attribute[3] and $Gegner[$i][1] -20 < $Attribute[4] and $Gegner[$i][1] +$Gegner[$i][2] > $Attribute[4] Then
$Gegner[$i][2] = Random(20,50,1)
$Gegner[$i][0] = Random(500,501 + $lvl * 100,1)
$Gegner[$i][1] = Random(0,200 -$Gegner[$i][2],1)
$Gegner[$i][3] = Random(200,201+100*$lvl,1) / 100
$Attribute[0] -=1
$Wackeln += 5
EndIf
next
If _IsPressed(74) Then $Punkte_anzeigen = true
If _IsPressed(75) Then $Punkte_anzeigen = false
If _IsPressed(26) Then $Attribute[4] -=5
If _IsPressed(28) Then $Attribute[4] +=5
If _IsPressed(25) Then $Attribute[3] -=5
If _IsPressed(27) Then $Attribute[3] +=5
If _IsPressed(11) and $Attribute[1] >= 100 Then
$Attribute[1] = 0
$Punkte[3] -= 200
$Schuss[0] = $Attribute[3] + 50
$Schuss[1] = $Attribute[4] + 19-100
$Schuss[2] = 200
$Schuss[3] = 2
$Wackeln += 20
For $i = 0 to $lvl -1
$Punkte[3] += 100 - $Gegner[$i][2]
$Gegner[$i][2] = Random(20,50,1)
$Gegner[$i][0] = Random(500,501 + $lvl * 100,1)
$Gegner[$i][1] = Random(0,200 -$Gegner[$i][2],1)
$Gegner[$i][3] = Random(200,201+100*$lvl,1) / 100
next
EndIf
If $Punkte_anzeigen = True Then _GDIPlus_GraphicsDrawStringEx($Context,"Punkte:"&Round($Punkte[0]+$Punkte[1]+$Punkte[2]+$Punkte[3]+$Punkte[4]+$Punkte[5]),$hFont,$tRect,$hFormat,$BWeis)
If _IsPressed(20) Then
IF $Feuer = 0 Then
If $Attribute[2] >= 1 Then
$Feuer = 1
$Attribute[2] -= 1
Dim $YPos[2] = [500,-1]
For $i = 0 to $lvl-1
If $Gegner[$i][1] -20 < $Attribute[4] and $Gegner[$i][1] +$Gegner[$i][2] > $Attribute[4] and $Gegner[$i][0] > $Attribute[3] and $YPos[0] >$Gegner[$i][0] Then
$YPos[0] = $Gegner[$i][0]
$YPos[1] = $i
EndIf
next
If $YPos[1] > -1 Then
$Schuss[0] = $Gegner[$YPos[1]][0]
$Schuss[1] = $Gegner[$YPos[1]][1]
$Schuss[2] = $Gegner[$YPos[1]][2]
$Schuss[3] = 1
$Punkte[0] += 100 - $Gegner[$YPos[1]][2]
$Gegner[$YPos[1]][2] = Random(20,50,1)
$Gegner[$YPos[1]][0] = Random(500,501 + $lvl * 100,1)
$Gegner[$YPos[1]][1] = Random(0,200 -$Gegner[$YPos[1]][2],1)
$Gegner[$YPos[1]][3] = Random(200,201+100*$lvl,1) / 100
$Wackeln += 5
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3]+50,$Attribute[4]+19,$Schuss[0],$Attribute[4]+19,$PLaser)
Else
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3]+50,$Attribute[4]+19,500,$Attribute[4]+19,$PLaser)
EndIf
EndIf
EndIf
Else
$Feuer = 0
EndIf
If $Schuss[0] <> 0 Then
_GDIPlus_GraphicsfillPolygon($Context,Schuss($Schuss[0],$Schuss[1] + $Schuss[2]/2 *(1-$Schuss[3]),$Schuss[2] * 2,$Schuss[2] * $Schuss[3]),$BRot)
$Schuss[3] -= 0.1
If $Schuss[3] < 0 Then $Schuss[0] = 0
EndIf
If $Attribute[3] < -50 or $Attribute[3] > 500 or $Attribute[4] <-20 or $Attribute[4] > 200 Then
$Attribute[0] -= 0.05
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3],$Attribute[4],250,100,$PGruen)
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3] + 50,$Attribute[4],250,100,$PGruen)
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3] + 50,$Attribute[4]+20,250,100,$PGruen)
_GDIPlus_GraphicsDrawLine($Context,$Attribute[3],$Attribute[4]+20,250,100,$PGruen)
EndIf
If $Attribute[2] < 10 Then $Attribute[2] += 0.02 * $lvl
If $Attribute[1] < 100 Then $Attribute[1] += 0.05
$Wackeln *= 0.9
$Punkte[2] +=(-5 + $Attribute[0]) / 10
$Punkte[4] +=(-225 + $Attribute[3]) / 400
If $Attribute[0] < 0 Then
$Attribute[0] -= 0.5
$Wackeln += 1
If $Attribute[0] < -40 Then $Attribute[0] = 2.9
EndIf
_GDIPlus_GraphicsDrawImage($hGrafik,$hBitmap,Random(-$Wackeln,$Wackeln),Random(-$Wackeln,$Wackeln))
sleep (50 -Timerdiff($Timer))
If _IsPressed(50) or Not WinActive($hGUI) Then
While _IsPressed(50)
Wend
While _IsPressed(50) = 0 or WinActive($hGUI) = 0
sleep(50)
Wend
While _IsPressed(50)
Wend
EndIf
next
If $Attribute[0] < 0 Then $Attribute[0] = 2.9
For $i = 0 to 1000
$i += 5
$Timer = TimerInit()
_GDIPlus_GraphicsDrawPolygon($Context,Raumschiff($i+$Attribute[3],$Attribute[4],50,20),$PBlau)
For $i2 = 0 to 4
_GDIPlus_GraphicsDrawPolygon($Context,Raumschiff($i-100*$i2-100,25 +$i2*30,50,20),$PLila)
next
_GDIPlus_GraphicsDrawImage($hGrafik,$hBitmap,0,0)
_GDIPlus_GraphicsClear($Context,0xFF000000)
sleep (50-Timerdiff($Timer))
next
$Attribute[2] = 3
$Attribute[3] = 50
$Attribute[4] = 90
$Punkte[5] += 500 *$lvl
$sText = "Level "&$lvl&" erfolgreich"&@cr&@cr&@cr&"Punkte:"&@cr&@cr&"Zerstörte Gegner: "&Round($Punkte[0])&@cr&"Überlebende Gegner: "&Round($Punkte[1])&@cr&"Beschädigung: "&Round($Punkte[2])&@cr&"Antimaterie: "&Round($Punkte[3])&@cr&"Sicheres Fliegen: "&Round($Punkte[4])&@cr&"Lvl Bonus: "&Round($Punkte[5])&@cr&@cr&"Gesamt: "&Round($Punkte[0]+$Punkte[1]+$Punkte[2]+$Punkte[3]+$Punkte[4]+$Punkte[5])
For $i = 0 to Stringlen($sText)
$Timer = TimerInit()
GUICtrlSetData($label,Stringleft($stext,$i)&"|")
sleep (50-Timerdiff($Timer))
If _IsPressed(1) Then exitloop
next
GUICtrlSetData($label,$stext)
While _IsPressed("0D") = 0
WEnd
next
$sText = "Alle Level erfolgreich"&@cr&@cr&@cr&"Punkte:"&Round($Punkte[0]+$Punkte[1]+$Punkte[2]+$Punkte[3]+$Punkte[4]+$Punkte[5])&@cr&@cr&"Bis zum nächsten mal."
For $i = 0 to Stringlen($sText)
$Timer = TimerInit()
GUICtrlSetData($label,Stringleft($stext,$i)&"|")
sleep (50-Timerdiff($Timer))
If _IsPressed(1) Then exitloop
next
GUICtrlSetData($label,$stext)
While _IsPressed("0D") = 0
WEnd
Func Raumschiff($x,$y,$breite,$hohe)
Dim $Raumschiff[4][2]
$Raumschiff[0][0] = 3
;------------------------Punkt 1----------------
$Raumschiff[1][0] = $x
$Raumschiff[1][1] = $y
;------------------------Punkt 2----------------
$Raumschiff[2][0] = $x + $breite
$Raumschiff[2][1] = $y + $hohe
;------------------------Punkt 3----------------
$Raumschiff[3][0] = $x
$Raumschiff[3][1] = $y + $hohe
Return $Raumschiff
EndFunc
Func Gegner($x,$y,$breite,$hohe)
Dim $Raumschiff[13][2]
$Raumschiff[0][0] = 12
;------------------------Punkt 1----------------
$Raumschiff[1][0] = $x
$Raumschiff[1][1] = $y
;------------------------Punkt 2----------------
$Raumschiff[2][0] = $x + $breite * 0.4
$Raumschiff[2][1] = $y
;------------------------Punkt 3----------------
$Raumschiff[3][0] = $x + $breite * 0.7
$Raumschiff[3][1] = $y + $hohe * 0.1
;------------------------Punkt 4----------------
$Raumschiff[4][0] = $x + $breite
$Raumschiff[4][1] = $y + $hohe * 0.4
;------------------------Punkt 5----------------
$Raumschiff[5][0] = $x + $breite
$Raumschiff[5][1] = $y + $hohe * 0.6
;------------------------Punkt 6----------------
$Raumschiff[6][0] = $x + $breite * 0.7
$Raumschiff[6][1] = $y + $hohe * 0.9
;------------------------Punkt 7----------------
$Raumschiff[7][0] = $x + $breite * 0.4
$Raumschiff[7][1] = $y + $hohe
;------------------------Punkt 8----------------
$Raumschiff[8][0] = $x
$Raumschiff[8][1] = $y + $hohe
;------------------------Punkt 9----------------
$Raumschiff[9][0] = $x
$Raumschiff[9][1] = $y + $hohe * 0.7
;------------------------Punkt 10----------------
$Raumschiff[10][0] = $x + $Breite * 0.5
$Raumschiff[10][1] = $y + $hohe * 0.7
;------------------------Punkt 11----------------
$Raumschiff[11][0] = $x + $Breite * 0.5
$Raumschiff[11][1] = $y + $hohe * 0.3
;------------------------Punkt 12----------------
$Raumschiff[12][0] = $x
$Raumschiff[12][1] = $y + $hohe * 0.3
Return $Raumschiff
EndFunc
Func Schuss($x,$y,$breite,$hohe)
Dim $Raumschiff[13][2]
$Raumschiff[0][0] = 12
;------------------------Punkt 1----------------
$Raumschiff[1][0] = $x
$Raumschiff[1][1] = $y + $hohe * 0.5
;------------------------Punkt 2----------------
$Raumschiff[2][0] = $x + $Breite
$Raumschiff[2][1] = $y
;------------------------Punkt 3----------------
$Raumschiff[3][0] = $x + $Breite * 0.9
$Raumschiff[3][1] = $y + $hohe * 0.1
;------------------------Punkt 4----------------
$Raumschiff[4][0] = $x + $Breite
$Raumschiff[4][1] = $y + $hohe * 0.2
;------------------------Punkt 5----------------
$Raumschiff[5][0] = $x + $Breite * 0.9
$Raumschiff[5][1] = $y + $hohe * 0.3
;------------------------Punkt 6----------------
$Raumschiff[6][0] = $x + $Breite
$Raumschiff[6][1] = $y + $hohe * 0.4
;------------------------Punkt 7----------------
$Raumschiff[7][0] = $x + $Breite * 0.9
$Raumschiff[7][1] = $y + $hohe * 0.5
;------------------------Punkt 8----------------
$Raumschiff[8][0] = $x + $Breite
$Raumschiff[8][1] = $y + $hohe * 0.6
;------------------------Punkt 9----------------
$Raumschiff[9][0] = $x + $Breite * 0.9
$Raumschiff[9][1] = $y + $hohe * 0.7
;------------------------Punkt 10----------------
$Raumschiff[10][0] = $x + $Breite
$Raumschiff[10][1] = $y + $hohe * 0.8
;------------------------Punkt 11----------------
$Raumschiff[11][0] = $x + $Breite * 0.9
$Raumschiff[11][1] = $y + $hohe * 0.9
;------------------------Punkt 12----------------
$Raumschiff[12][0] = $x + $Breite
$Raumschiff[12][1] = $y + $hohe
Return $Raumschiff
EndFunc
Func End()
exit
EndFunc
Es gibt 10 Levels. Dies kann aber im Code geändert werden, vorausgesetzt ihr findet die richtige Stelle.
Viel Spaß