Erstes (richtiges) Spiel

Nebensache

Wir programmieren eine 2D-Weltraum Simulation.(aus dem Tutorial von Schattendieb).

Die ersten Zeilen:
____________________________________
Graphics 800,600,16,1;sollte noch jeder verstehen :-)
SetBuffer BackBuffer();benutzt den Backbuffer
TFormFilter 1;Dadurch sehen gedrehte grafiken schöner aus.
AutoMidHandle 1
SeedRnd MilliSecs()
____________________________________

Die nächsten Zeilen:
____________________________________

Dim sp_grafik(360) ;Grafik für den Spieler

For gr=0 To 359;für jeden Grad
 sp_grafik(gr)=LoadImage("gfxspieler.bmp")
 RotateImage sp_grafik(gr),gr
 Cls
 DrawBlock sp_grafik(gr),400,300
 Flip
Next
____________________________________
Jetzt wurde die Grafik für das Spielerraumschif geladen, ihr solltet die .bb oder .exe datei in einen Ordner speichern, in diesen Ordner erstellt ihr dann den Ordner
'gfx' in dem ihr die Grafiken speichert, ihr müsst euch die Grafiken selber malen oder ihr nehmt welche aus dem Internet.

Nun wollen wir die Sterne machen, es gibt sie in 3 verschiedenen Entfernungen:
____________________________________
Dim star_grafik(3)
For x=1 To 3
star_grafik(x)=LoadImage("gfxstar"+Str$(x)+".bmp")
Next
____________________________________

Da sieht man mal wieder, wie wichtig die 'For...Next'-Schleife ist.

Nun die Types:
____________________________________
Type player
Field x#,y#,grad#
Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung#
End Type;Die Attribute werden später deutlich.

Type stern
Field x#,y#,tiefe#,nummer;Tiefe gibt an, wie nah sie am Spieler sind, nummer welches Bild für sie gemalt wird
End Type

Global spieler.player=New player
;Der Spieler wird für das ganze Programm;"bekannt" gemacht und erzeugt.

;Das sind Parameter, die ich später erkläre.
spielermaxspeed#=5
spielerbeschleunigung#=0.05
spielerwendigkeit#=2;hantiert ein Wenig damit und schaut was passiert.
____________________________________

Die Parameter spielermayspeed#=5, und so weiter sind beliebig editierbar, wenn ihr sie verändert wird das Schiff schneller oder wendiger.

Weiter:
____________________________________
;Damit die Bewegung verdeutlicht wird, rauschen im Hintergrund Sterne
;vorbei. Je weiter sie weg sind, um so langsamer.
;Davon erzeuge ich nun einige und lege deren Tiefen-Nähe zum Spieler fest.
For z=1 To 20
stern.stern=New stern
sternx=Rand(-500,500)
sterny=Rand(-400,400)
If z<=20 Then sterntiefe#=Rnd(1,1.2):sternnummer=1
If z<17 Then sterntiefe#=Rnd(0.8,1):sternnummer=2
If z<10 Then sterntiefe#=Rnd(0.5,0.8):sternnummer=3;Davon gibts am meisten, weil die am weitesten weg sind
Next
____________________________________

Jetzt haben wir eingestellt, dass die Sterne vorbeirauschen, nun wollen wir, dass das Spielerschiff immer in der Mitte des Bildschirmms ist:
____________________________________
;So, an diesem Punkt wusste ich nicht genau, ob ich wirklich so machen sollte,
;wie ich es letztendlich getan habe.
;Wie ihr wisst, soll sich das Raumschiff immer in der Mitte des Bildschirms
;befinden. Deswegen müsste man beim malen des Spielers und der Objekte
;immer etwas hinzufügen.
;Ich habe mich deswgen dazu entschieden, den Nullpunkt mir origin auf
;die Mitte des Bildschirms zu setzen.
;Ob das die richtige Entscheidung war, weiß ich bis jetzt noch nicht.
;Da bin ich sehr gespannt, was ihr davon haltet.
Origin 400,300
____________________________________

Ab jetzt beginnt der Mainloop(Hauptschleife):
____________________________________
While Not KeyHit(1);solange nicht ESC gedrückt wird
weltliches();Hier werden Dinge wie Bildschirmlöschen und Sternemalen erledigt.
steuerung();Hier werden die Eingaben des Spielers überprüft.
spieler_versetzten()
spieler_malen()
Flip
Wend
End
____________________________________

Wie sehen, dass dieser Teil des Mainloops 4 Funktionen enthält:
weltliches()
steuerung()
spieler_versetzten()
spieler_malen()
Diese werden nun mit einprogrammiert:
____________________________________ 
Function weltliches()
Cls
For stern.stern=Each stern;Jeder Stern soll berechnet werden.
;da die Sterne nur fürs optische sind, kann ich ruhig ihre x/y-Werte
;verändern, anstatt beim malen die Spielerx/y werte abzuzihen.
sternx#=sternx#-spielerspx#*sterntiefe#;durch sterntiefe erziehlt man den Effekt,
;dass die Sterne wirklich weiter weg anstatt nur unterschiedlich groß erhscheinen.
sterny#=sterny#-spielerspy#*sterntiefe#
If sternx<-500 Then sternx=Rand(500,600):sterny=Rand(-400,400)
If sternx>500 Then sternx=Rand(-500,-600):sterny=Rand(-400,400) 
;sobald der Stern zu weit vom Spieler weg ist, kann man ihn ruhig auf die andere Seite des Spielers sezten,
;anstatt dort einen neuen zu erzeugen, da sich der Spieler wohl kaum an die Position jedes einzelnen Sterns erinnert. 
If sterny<-400 Then sternx=Rand(-500,500):sterny=Rand(400,500)
If sterny>400 Then sternx=Rand(-500,500):sterny=Rand(-500,-400)
;Wenn der Stern im Bildschirm ist, soll er gemalt werden.
If sternx>-420 And sternx<420 And sterny>-320 And sterny<320 Then DrawImage star_grafik(sternnummer),sternx#,sterny#
Next
End Function
Function steuerung();Die Steuerung des Spielers
;Hier kommt z.b. die Wendigkeit des Raumschiffs des Spielers zum Einsatz.
;Dadurch und mit anderen Attributen lassen sich ganz einfach unterschiedliche
;Raumschifftypen erzeugen. Ihr könnt ja mal ein wenig mit den Werten spielen.
;Mit den links/rechts Tasten kann man das Raumschiff drehen.
;Wenn spielergrad=0 ist, dann fliegt man nach rechts.
;Bei 90° nach unten und so weiter.
If KeyDown(203)Then spielergrad#=spielergrad-spielerwendigkeit#
If KeyDown(205)Then spielergrad#=spielergrad+spielerwendigkeit#
If spielergrad#>=360 Then spielergrad#=spielergrad# Mod 360
If spielergrad#<0 Then spielergrad#=360+spielergrad#
;wenn beispielsweise Spielergrad=0 ist und man sich um eins nach
;links dreht, dann ist spielergrad=-1
;Das ist das selbe wie 359.
;Wenn man nun die Leertaste drückt, soll das Raumschiff in die momentante
;Richtung(spielergrad) beschleunigen.
;Hierfür sollte man unbedingt die Befehele Sin/Cos verstanden haben.
;Diese sollte man sich lieber noch mal angucken
;empfehlen. Durch dieses habe ich viel gelernt.
If KeyDown(200) Then
;wenn die x-Geschwindigkeit geringer als die maximale x-Geschwindigkeit dem Winkel entsprechend ist, so soll die x-Geschwindigkeit dem Winkel und der Beschleunigung entsprechend erhöht werden.
;Die Sache mit dem Winkel bei der Beschleunigung ist wichtig, weil bei einer Ausrichtung von 45° die Schubkraft sowohl auf die X- wie auch auf die Y-Geschwindigkeit wirkt.
If spielerspx#<Cos(spielergrad#)*spielermaxspeed# Then spielerspx#=spielerspx#+Abs(Cos(spielergrad#)*spielerbeschleunigung#)
If spielerspx#>Cos(spielergrad#)*spielermaxspeed# Then spielerspx#=spielerspx#-Abs(Cos(spielergrad#)*spielerbeschleunigung#)
If spielerspy#<Sin(spielergrad#)*spielermaxspeed# Then spielerspy#=spielerspy#+Abs(Sin(spielergrad#)*spielerbeschleunigung#)
If spielerspy#>Sin(spielergrad#)*spielermaxspeed# Then spielerspy#=spielerspy#-Abs(Sin(spielergrad#)*spielerbeschleunigung#)
;Durch diese Berechnung wird der Trägheitseffekt sehr gut simuliert.
End If
End Function
_____________________________________

Oh, viel Code nicht?, macht eine kleine Pause und holt euch 'ne Limo ausm Kühlschrank.

So, weiter gehts:
_____________________________________
Function spieler_versetzten()
spielerx#=spielerx#+spielerspx#
spielery#=spielery#+spielerspy#
;zu den X/Y Koordinaten werden die x/y Geschwindigkeiten addiert.
End Function

Function spieler_malen()
DrawImage sp_grafik(Int(spielergrad#)),0,0
;Fürs malen muss mit int() die Gradzahl gerundet werden, weil es z.b. nicht das bild sp_grafik(2.5) gibt.
;Dies ist nur nötig, wenn man für spielerwendigkeit keine ganzen Zahlen nimmt.
End Function
_____________________________________

So, das wars, geschafft, endlich, hier sind eine ganze Anzahl an Befehlen, die wir noch nicht kennen. Aber man sollte sie eigentlich verstehen, wenn mann sie sich genauer ansieht.


Weiter gehst mit '2D-Editor'.


Aufgaben:
1. Porbiert ein wenig mit dem Code herum, verändert die Parameter Geschwindigkeit und Wendigkeit.
2.Macht einen eigenes 2D-Space Spiel, ihr könnt herfür den Sourcecode des Tutorials in geänderetr Form nehmen.

 

 

X-the forgotten battle
 
Das bisher größte Spiel, was Aletes - Software im Moment produziert, ist X-the forgotten battle.
 
Vote 4 me
 
Es waren schon 12317 Besucher (38777 Hits) hier!
Diese Webseite wurde kostenlos mit Homepage-Baukasten.de erstellt. Willst du auch eine eigene Webseite?
Gratis anmelden