3D Snake, echt Klasse

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

MadMental

Betreff: 3D Snake, echt Klasse

BeitragSa, Jul 12, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

Da ich mich noch nie wirklich mit 3D-Programmierung auseinandergesetzt habe, habe ich mich einfach mal dran gesetzt um einen 3D-Snake Klon zu schreiben Smile
Er funktioniert auch wunderbar, ich wollte euch nur fragen, was ich besser machen könnte und wie ihr ihn findet.
Es sind wirklich bemerkenswerte Effekte zu sehen.

Hier der Code: (habe versucht übersichtlich zu schreiben, was nicht gerade meine Stärke ist xD)
Code: [AUSKLAPPEN]

;---------------------------------
; so dann versuche ich es einmal..|
; mein erstes 3d-game            |
;  -- MadMental --            |
;---------------------------------
Graphics3D 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

timer = CreateTimer(60)

Global cam = CreateCamera()
PositionEntity cam,10,15,-7
TurnEntity cam,35,0,0

;das snake spielfeld
Dim feld(19,19)
feld(0,0) = 1

;plane
Global plane = CreatePlane()
EntityAlpha plane,.7
Global plane_brush

;zufällige farben für das plane
Global plane_rot = Rnd(255):Global plane_rot_add = -1
Global plane_green = Rnd(255):Global plane_green_add = 1
Global plane_blau = Rnd(255):Global plane_blau_add = -1

;licht
licht = CreateLight()
PositionEntity licht,10,10,10

;das fressen .. mjamjam
Global fress_x = Rnd(1,19)
Global fress_z = Rnd(1,19)
Global fress_cube = CreateCube()
fress_brush = CreateBrush(100,0,0)
PaintMesh fress_cube,fress_brush
PositionEntity fress_cube,fress_x,1,fress_z

;spiegeln.. jaa xDd
spiegel1 = CreateMirror()
PositionEntity spiegel1,0,0,20
TurnEntity spiegel1,90,0,0

spiegel2 = CreateMirror()
PositionEntity spiegel2,20,0,0
TurnEntity spiegel2,90,90,0

spiegel3 = CreateMirror()
PositionEntity spiegel3,0,0,0
TurnEntity spiegel3,90,90,0


;dann der schlangenkopf
Global score = 0
Global kopf_x = 10
Global kopf_z = 10
Global richtung = 1;1 = oben, 2 = links, 3 = unten, 4 = rechts
Global kopf_cube = CreateSphere(80)
PositionEntity kopf_cube,kopf_x,1,kopf_z
kopf_brush = CreateBrush(0,255,0)
PaintMesh kopf_cube,kopf_brush
Global ms = MilliSecs() ;alle 200 ms einmal bewegen

;der schlangenkörper
Type koerper
   Field x
   Field z
   Field cube
End Type

;einen hauptschlangen cube, wo andere von "klonen"
Global koerper_cube = CreateCube()
Global koerper_brush = CreateBrush()
PaintMesh koerper_cube,koerper_brush
ScaleEntity koerper_cube,.5,.5,.5
HideEntity koerper_cube

;am anfang mit 3 koerperteilen anfangen :)
For i = 0 To 2
   neues_koerper_teil()
Next

trisrender = 0

While Not KeyHit(1)
   
   move()
   randomize_plane()
   
   RenderWorld
   Color 100,100,100
   Rect 0,0,100,40,1
   Color 255,255,255
   Text 5,5,"Punkte: "+score
   trisrender = TrisRendered()
   Text 5,15,"Tris:"+trisrender
   
   Flip
   
   WaitTimer(timer)
Wend

Function move()
   
   If KeyDown(200) ;nach oben
      If richtung <> 3
         richtung = 1
      EndIf
   EndIf
   If KeyDown(203) ;nach links
      If richtung <> 4
         richtung = 2
      EndIf
   EndIf
   If KeyDown(208) ;nach unten
      If richtung <> 1
         richtung = 3
      EndIf
   EndIf
   If KeyDown(205) ;nach oben
      If richtung <> 2
         richtung = 4
      EndIf
   EndIf
   If (MilliSecs() - ms) > 200 Then   
      ms = MilliSecs()
      bewege_koerper()
   
      If richtung = 1 Then kopf_z = kopf_z + 1
      If richtung = 2 Then kopf_x = kopf_x - 1
      If richtung = 3 Then kopf_z = kopf_z - 1
      If richtung = 4 Then kopf_x = kopf_x + 1
   
      ;damit man nich aus ner "map" kann
      If kopf_x > 19 Then kopf_x = 0
      If kopf_x < 0 Then kopf_x = 19
      If kopf_z > 19 Then kopf_z = 0
      If kopf_z < 0 Then kopf_z = 19
   
      PositionEntity kopf_cube,kopf_x,1,kopf_z
      
      For k.koerper = Each koerper
         If (k\x = kopf_x) And (k\z = kopf_z) Then End
      Next
      
      ;dann das fressen überprüfen :D .. hört sich iwie seltsam an
      If (kopf_x = fress_x) And (kopf_z = fress_z)
         neues_koerper_teil()
         score = score + 1
         fress_x = Rnd(1,19): fress_z = Rnd(1,19): PositionEntity fress_cube,fress_x,1,fress_z
      EndIf
      
      
   EndIf
   
End Function

Function bewege_koerper()
   k.koerper = First koerper
   FreeEntity k\cube
   Delete k.koerper
   k.koerper = New koerper
   k\x = kopf_x
   k\z = kopf_z
   k\cube = CopyEntity(koerper_cube)
   PositionEntity k\cube,k\x,1,k\z
End Function

Function neues_koerper_teil()
   k.koerper = New koerper
   k\x = kopf_x
   k\z = kopf_z
   k\cube = CopyEntity(koerper_cube)
   PositionEntity k\cube,k\x,1,k\z
End Function

Function randomize_plane()
   plane_rot = plane_rot + plane_rot_add
   plane_green = plane_green + plane_green_add
   plane_blau = plane_blau + plane_blau_add
   
   If plane_rot < 1 Then plane_rot_add = plane_rot_add * -1
   If plane_green < 1 Then plane_green_add = plane_green_add * -1
   If plane_blau < 1 Then plane_blau_add = plane_blau_add * -1
   If plane_rot > 254 Then plane_rot_add = plane_rot_add * -1
   If plane_green > 254 Then plane_green_add = plane_green_add * -1
   If plane_blau > 254 Then plane_blau_add = plane_blau_add * -1   
   plane_brush= CreateBrush(plane_rot,plane_green,plane_blau)
   PaintEntity plane,plane_brush

End Function

End


Mal sehen, was ihr davon haltet.

Die Steuerung ist mit den Pfeiltasten.

MM

the FR3AK

BeitragSa, Jul 12, 2008 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss das nicht in ein anderes Forum? Ich glaub Codearchiv Very Happy

Firstdeathmaker

BeitragSa, Jul 12, 2008 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
- Ändere die diskreten Schritte der Schlange in weiche Bewegungen um.
- mach das Spiegeln weg, das irritiert nur
- Die Kameraperspektive sollte vielleicht etwas höher liegen?

und welche bemerkenswerten Effekte meinst du?

weiterhin viel Erfolg!
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

MadMental

BeitragSa, Jul 12, 2008 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@Firstdeathmaker das mit weichen bewegungen hatte ich schonmal versucht, nur leider fehlt mir der "Denkanstoß" dafür... Ich meine mit bemerkenswerten Effekte die wechselnde Farbe des Planes und die tollen 3 Spiegel Smile

Danke dir,

MM

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group