Hilfe bei Vertikal-Autorennspiel

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ja Jumpen ;)

Oder wie wär's mit 3 Terrains die parallaxmäßig hintereinander liegen, und dann auch mit 3 Buggys, die sich gegenseitig ein Rennen liefern. Zudem könnten die dann an jeder Stelle, wo sich Linien zweier Terrains schneiden, durch Zufall entscheiden auf welchem Terrain sie weiterfahren ;)

Oder Du bastelst gleich ein Open Buggy SDK, dann kann ich das vielleicht auch selbst übernehmen :mrgreen:
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Das ist echt 'ne Idee! Ich find die Umsetzung hier schon Klasse. Nur wenn sich da ein Rennen geliefert wird, muß es auch Schwierigkeiten geben, damit fahrerisches können abverlangt wird, sonst drückt ja jeder nur aufs Gas.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Naja wenn erstmal geschanzt wird, sind auch Überschläge denkbar, bei entsprechendem Vorsprungs-Verlust :mrgreen:
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

oink :shock:

ach du lieber bisschen....

ok... wenn man noch sowas wie jumpen einbaut, dann könnte man auch zu schnellen sturz und so sachen mit einbaun, is klar...

aber dann wirds echt haarig, und dann isses ein komplett anderes "game"...

also, ich hab jetzt erstmal versucht, die schräge mit einfließen zu lassen,
um etwas "realistischeres" (is ja fnord, ey) zu erreichen.

den faktor des beschleunigungssystems hab ich in ne konstante gepackt,
ebenso die pos und die neg grenze.
aber in der rechnung selber hab ich noch viel zu viele konstanten als literale drinstehen,
um da sauber dran schrauben zu können.
(außerdem hat der krempel einen level erreicht, wo es vielleicht doch einfacher wäre,
mit doubles statt mit fixkomma zu arbeiten.)

naja.... schauts euch einfach mal an und verreißt es, wenn euch danach ist,
ich hab für heute ersma jenuch...

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenWindow(0,0,0,500,300,"Buggy Buster", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,500,300,0,0,0)
#PosFact = 50
#NegMov = 1
#PosMov = 2
Global Dim Land.b(10000)
Procedure CreateLevel()
  ; *** Create Level ***
  Hi    = 7500
  Dir   = 0
  Turn  = 0
  count = 0
  While count < 10000
    Land(count) = 20 + Hi / 100
    Turn = (Random(25000)-Hi-5000)/666
    Dir + Turn
    If Dir >  100 : Dir =  100 : EndIf
    If Dir < -100 : Dir = -100 : EndIf
    Hi + Dir 
    If Hi > 15000 : Hi = 15000 : EndIf
    If Hi <     0 : Hi =     0 : EndIf
    count + 1
  Wend
  Land(count) = 20 + Hi / 100
EndProcedure
CreateLevel()
RelPos = 100
Pos = RelPos
FPos = Pos*10
Repeat
  event = WaitWindowEvent(10)
  ExamineKeyboard()
  ClearScreen($FFC080)

    X1 = RelPos-6
    Y1 = 295-(Land(Pos-6)&$FF)
    X2 = RelPos+6
    Y2 = 295-(Land(Pos+6)&$FF)
    DY = Y1 - Y2

  If KeyboardPushed(#PB_Key_Right) : Move +(15-DY)/2 : EndIf
  If KeyboardPushed(#PB_Key_Left)  : Move -(15-DY)/2 : EndIf
  If Move > -DY*2+1 : Move -1
  ElseIf Move < -DY*2 : Move +1
  EndIf
  If Move > #PosMov * #PosFact : Move = #PosMov * #PosFact : EndIf
  If Move < -#NegMov * #PosFact : Move = -#NegMov * #PosFact : EndIf
  FPos + Move
  If FPos >  #PosFact * (10000 - 500 + RelPos)
    FPos = #PosFact * (10000 - 500 + RelPos)
    Finish = 1
  EndIf
  If FPos < #PosFact * RelPos
    FPos = #PosFact * RelPos
  EndIf
  Pos = FPos / #PosFact

  StartDrawing(ScreenOutput())
  ; Draw Level
    For n=-RelPos To 499-RelPos
      Hi = Land(Pos+n) & $FF
      Line(RelPos+n,299,0,-Hi,$0080C0)
      Line(RelPos+n,299-Hi,0,1,$000000)
      If Pos+n = 10000 - 500 + RelPos
        Line(RelPos+n,299-Hi,0,-30,$0000FF)
        Box(RelPos+n,269-Hi,10,10,$0000FF)
      EndIf
    Next
  ; Draw Car
    X3 = X1 - DY / 2
    Y3 = Y1 - 6
    X4 = X2 - DY / 2
    Y4 = Y2 - 6
    LineXY(X1,Y1,X2,Y2,$202000)
    LineXY(X1,Y1,X3,Y3,$202000)
    LineXY(X2,Y2,X4,Y4,$202000)
    LineXY(X3,Y3,X4,Y4,$202000)
    Circle(X1,Y1,4,$603000)
    Circle(X2,Y2,4,$603000)
    Select (Pos & 6 >> 1)
     Case 0
       Line(X1    , Y1 - 3, 0, 6, $FFC000)
       Line(X2    , Y2 - 3, 0, 6, $FFC000)
     Case 1
       Line(X1 - 2, Y1 + 2, 4,-4, $FFC000)
       Line(X2 - 2, Y2 + 2, 4,-4, $FFC000)
     Case 2
       Line(X1 - 3, Y1    , 6, 0, $FFC000)
       Line(X2 - 3, Y2    , 6, 0, $FFC000)
     Case 3
       Line(X1 - 2, Y1 - 2, 4, 4, $FFC000)
       Line(X2 - 2, Y2 - 2, 4, 4, $FFC000)
    EndSelect
  ; Draw Speedo
    Mov.f = Move 
    angle.f = (#NegMov * #PosFact + Move ) * #PI / ((#NegMov + #PosMov) * #PosFact)
    Circle(400,294,29,$000000)
    Circle(400,294,27,$2040FF)
    Box(371,296,58,2,$000000)
    Box(370,298,60,3,$0080C0)
    Line(400,294,-25*Cos(angle),-25*Sin(angle),$000000)
    DrawText(10,270,"Way: " + Right("0000"+Str(Pos-RelPos),4) + " m",$000000,$0080C0)
    DrawText(10,250,"Move: "+Str(Move),$000000,$0080C0) 
    DrawText(10,230,"DY: "+Str(DY),$000000,$0080C0) 
    If Finish
      DrawText(180,50,"## F I N I S H ##",$000000,$FFC080)
    EndIf
  StopDrawing()
  FlipBuffers()
  If event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    EXIT = 1
  EndIf
Until EXIT = 1
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Nett!
Und wenn Du noch Schnee fallen lässt, hätte es den 1.Preis im Wintercontest 2006/07 gewinnen können (vorrausgesetzt das Ganze wäre 1 Monat früher passiert ;-)

Also hier nun noch ein Vorschlag um das ganze auch als 'Rennspiel' durchgehen zu lassen:
Sprünge!
Ähnlich wie bei einem Skispringer, ist es dabei wichtig in welchen Winkel das Fahrzeug den Boden berührt.
Vorschlag:
Beide Räder berühren gleichzeitig den Boden, keine Geschwindigkeitsverlust.
Ansonsten reduzierte Geschwindigkeit abhängig vom unterchiedlichen Berührungszeitpunkt der Räder.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

netter vorschlag, aber dazu braucht man dann erstmal extra bewegungsvektoren für die räder,
und muss sich überlegen, ob sie rein nach 9.81 wieder runtergehen sollen oder wie überhaupt,
und es ist ne komplett andere herangehensweise.

bisher ist es ja einfach so, dass die koordinaten der räder direkt aus dem boden-array geholt werden.
und die hang-beschleunigung ist alleine eine auswirkung eines potentianunterschieds der räder.


> Und wenn Du noch Schnee fallen lässt, hätte es den 1.Preis im Wintercontest 2006/07 gewinnen können (vorrausgesetzt das Ganze wäre 1 Monat früher passiert

yo ich schüttel hier auch schon den kopp....

über nen monat sitz ich da und mir fällt einfach nix ein...
am SAMSTAG von einsendeschluss hab ich ne idee, hab ich halbwegs gecodet,
ich hab noch nen komplett anderen levelgenerator fürn flug-game...
und dann häck ich noch einen runter, diesen hier....
argl... aber vor nem monat funkstille.. is echt zum schrein...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Kaeru Gaman hat geschrieben:netter vorschlag, aber dazu braucht man dann erstmal extra bewegungsvektoren für die räder,
und muss sich überlegen, ob sie rein nach 9.81 wieder runtergehen sollen oder wie überhaupt,
und es ist ne komplett andere herangehensweise.

bisher ist es ja einfach so, dass die koordinaten der räder direkt aus dem boden-array geholt werden.
und die hang-beschleunigung ist alleine eine auswirkung eines potentianunterschieds der räder.
Mach es nicht so kompliziert ;-)
Lass es doch so wie bissher, nur mit folgender Änderung:

Während des Fluges:
Berechne einfach das bodenarray + y = Räder

Code: Alles auswählen

BodenarrayVorne + YV= RadVorne
BodenarrayHinten + YH = RadHinten
geschwindigkeit + max(YV-YH)
Ist nur ein einfacher Ansatz!

Noch so eine Idee:
Wenn jemand keinen Gegner hat, lass einen Gost mitfahren....damit der Spieler sieht wie der beste gefahren ist.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hmnuja...

ein bissel komplexer würde es schon, weil der flug ja nicht einfach ein bodenabstand wäre,
die höhe des bodens verändert sich ja unabhängig...

und die dritte zeile bei die raff ich grad garnich was du meinst...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Kaeru Gaman hat geschrieben:hmnuja...

ein bissel komplexer würde es schon, weil der flug ja nicht einfach ein bodenabstand wäre,
die höhe des bodens verändert sich ja unabhängig...

und die dritte zeile bei die raff ich grad garnich was du meinst...
Nein komplexer ist es nicht (...ausser Du möchtest es realistischer machen)

1. Es muss möglich sein das Fahrzeug zu kippen im Flug (z.B.: Pfeil oben/unten)
2. Wenn die 'Kippneigung im Flug' = 'Kippneigung am Boden' dann 'kein abbremsen' ansonsten wird das Fahrzeug abgebremst.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Nein komplexer ist es nicht (...ausser Du möchtest es realistischer machen)

nuja... komplexere konzepte leuchten mir oft besser ein...


> 1. Es muss möglich sein das Fahrzeug zu kippen im Flug (z.B.: Pfeil oben/unten)
> 2. Wenn die 'Kippneigung im Flug' = 'Kippneigung am Boden' dann 'kein abbremsen' ansonsten wird das Fahrzeug abgebremst.

:shock: aha... nu wie du meinst :| *bahnhof*

ne, scherz.. ich versteh schon, wie du meinst, nur gehen meine überlegungen der letzten stunden komplett in ne andere richtung.

SO komplex ist der code doch nicht...
du hast meinen ersten, das Mod von Artus, und meinen zweiten zur verfügung...

dann nimm dir doch raus, was du magst, und setz das mal um, was du grad vorschlägst...
wär ich echt gespannt drauf, wies aussieht... :D
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten