Page 1 sur 6

Jeu de voiture à l’ancienne....

Publié : jeu. 27/sept./2007 22:07
par Mytic
Je me suis lancé le défi de créer un jeu de voiture à l’ancienne (donné l’effet 3D en 2D)
Voici le moteur qui va gérer la route (utilisez les flèches de direction pour contrôler la route)

:D

Code : Tout sélectionner

InitSprite()
InitScreen()
InitKeyboard()
Global mx.d,my.d
OpenWindow(0,0,0,500,500,"test")
OpenWindowedScreen(WindowID(0),0,0,500,500,0,0,0)
FlipBuffers()

Procedure bloc(x1.l,y1.l,x2.l,y2.l,x3.l,y3.l,x4.l,y4.l,coul.l)
;3  -------- 4
;   |      |
;   |      |
;   |      |
;1  -------- 2
LineXY(x1,y1,x2,y2,coul)
LineXY(x3,y3,x4,y4,coul)
LineXY(x1,y1,x3,y3,coul)
LineXY(x2,y2,x4,y4,coul)
x.l = (x1+x2+x3+x4)/4
y.l = (y1+y2+y3+y4)/4
FillArea(x,y,-1,coul)
EndProcedure

Procedure create_route()
Static c

x3 = 100
y3 = 500
x4 = 400
y4 = 500
;n = saut bloc de route
;L = profondeur
;H = hauteur de route
n.d = 50
L = 0
H.d = 5
For i = 0 To 20
n =  10
L = 5

x1 = x3 
y1 = y3 
x2 = x4
y2 = y4

x3 = x3 + L + (mx/20)*i
y3 = y3 - n + (my/20)*i
x4 = x4 - L + (mx/20)*i
y4 = y4 - n + (my/20)*i

If c = -1
c = 1
bloc(x1,y1,x2,y2,x3,y3,x4,y4,RGB(255,255,255))
bloc(x1+10,y1,x2-10,y2,x3+10,y3,x4-10,y4,RGB(180,180,180))
Else
c = -1
bloc(x1,y1,x2,y2,x3,y3,x4,y4,RGB(255,0,0))
bloc(x1+10,y1,x2-10,y2,x3+10,y3,x4-10,y4,RGB(200,200,200))
EndIf

Next i


EndProcedure

Repeat
ClearScreen(0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up)
my = my - 1
EndIf
If KeyboardPushed(#PB_Key_Down)
my = my + 1
EndIf
If KeyboardPushed(#PB_Key_Left)
mx = mx - 1
EndIf
If KeyboardPushed(#PB_Key_Right)
mx = mx + 1
EndIf

StartDrawing(ScreenOutput())
create_route()
StopDrawing()
FlipBuffers()
event = WindowEvent()
Delay(100)
Until event = #PB_Event_CloseWindow
End

Image


Et voici la progression du programme :
(Quoi de new ?! ! les ennemis [idiots], la vitesse, quelques améliorations)
>Demo2<

Pour les touches :

UP = accélération
Down = freinage
Left \ Right = direction
Echape = elle parle d’elle-même.

Publié : jeu. 27/sept./2007 22:28
par Ollivier
Dire que j'ai voulu faire ça quand j'avais 8 ans, mes tout premiers mois de prog. Je n'avais réussi qu'à faire une route fixe monochrome. Je n'avais jamais retenté d'en faire depuis.

Merci Mytic!

Publié : jeu. 27/sept./2007 23:05
par ATHOW
C'est un des styles de jeu auquel j'ai jamais osé m'attaquer !
C'est bien réalisé, ca me rappelle GP500 sur AmstradCPC !

J'ai hâte de voir la suite... comment tu vas créer/stocker les circuits ?

Publié : jeu. 27/sept./2007 23:54
par Ollivier
@mytic

Je remarque que tu n'utilise que peu les structures.

Publié : ven. 28/sept./2007 0:00
par Mytic
Pour le moment c’est que la phase de test.
Après je vais enregistrer le résultat dans des tableaux avec structure.

Publié : ven. 28/sept./2007 0:05
par Backup
bien joué !! :D

dommage que le remplissage ralentisse a mort le system !! :)

Publié : ven. 28/sept./2007 0:09
par Dr. Dri
Ca me rappelle un début de projet en DB j'avais "perdu" les sprites des véhicules donc je me suis arrêté avant d'avoir un truc jouable... Si tu veux un conseil, utilise les Sprite3D.

Avec ClipSprite3D (cherche sur le forum) tu peux récupérer ton image de route ligne par ligne en te décalant à chaque fois d'un pixel.
Avec ZoomSprite3D tu peux jouer sur la largeur de chaque tranche et donc reproduire l'effet de profondeur!
Enfin avec cette solution tu consommera énormément moins de temps CPU (il faut 5 seconde pour que la route s'affiche chez moi) et surtout tu pourras facilement faire plusieurs types de routes (cricuit, rally, desert) en changeant simplement de sprite.

Dri ;)

Publié : ven. 28/sept./2007 0:20
par Mytic
@Dobro
Le ralentissement vient du : Delay(100)

@Dr. Dri
J’ai envisagé d’utiliser les Sprites pour les véhicules et les objets seulement.
Tu peu m’éclairé un peu sur la façon d’utiliser les Sprites pour la route ?

Est-ce qu’on peut redimensionner un sprite avec décalage ? :idea:

Publié : ven. 28/sept./2007 0:54
par Ollivier
Pour les sprite3D, tu es carrément sur la bonne voie :

Compare ta procédure Bloc() avec la fonction TransformSprite3D() ! C'est quasiment la même chose. Tu feras le décalage après.

Pour utiliser les sprite3D, il te faut passer par les sprites normaux.

Pour commencer simple, fait 4 sprites carrés tout bêtes, un gris clair, un gris foncé, un rouge et un blanc (les 4 couleurs qui apparaissent sur ton écran).

Pour les construire, c'est comme sur un écran avec StartDrawing(Spriteoutput(n) ) et Box()

Après, chaque forme (ou appel de la fonction Bloc() ) à l'écran est un sprite3D que tu créées avec le CreateSprite3D().

Si tu planches, structure un peu ce code (sauf la procédure Bloc() puisqu'elle va être remplacée) et je tâcherai de te le convertir avec Sprite3D dans la nuit.

Publié : ven. 28/sept./2007 3:23
par Huitbit
Super :P

Ca fera un cousin (très) évolué de Pure_vroom_2 (qui est en marche tout doucement 8), j'en suis aux sprites et à l'éditeur de circuit :oops: )
@Dobro
Le ralentissement vient du : Delay(100)
:? Sur mon pentium IX à l'azote liquide( :lol: ) ça raaaaaaaame même avec un delay(1).

Bonne continuation...

PS : "test" en haut de la fenêtre c'est mieux :wink:

Publié : ven. 28/sept./2007 10:53
par Backup
Mytic a écrit :@Dobro
Le ralentissement vient du : Delay(100)

heu ! tu me prends pour un bleu ?? 8O (vermisceau) :D

Image :lol:

j'avais mis un delay(2) (qui suffit amplement d'ailleurs !! )

je te dit que le ralentissement viens du remplissage !!
pour t'en convaincre , met le en rem , et utilise tes touches pour bouger la route, tu vas voir si j'ai pas raison !! :)

Publié : ven. 28/sept./2007 10:55
par djes
Génial! Si u arrives à reproduire mon jeu de voiture préféré à l'ancienne (Lotus Esprit Turbo Challenge II), je te donne mille ... pour t'acheter une rue de M...q dans le futur monopoly! Je rigole ;=) ; mais c'est vrai que ce serait extra :D

Publié : ven. 28/sept./2007 12:30
par Mytic
Merci des conseils, je vais essayer d’adapter tout ça en sprites.

Publié : ven. 28/sept./2007 12:34
par comtois
Racing Test utilisait les sprites 3D aussi .
Image
Le code source était dispo. Je ne sais pas s'il est encore possible de le trouver quelque part ?

Publié : ven. 28/sept./2007 13:20
par Progi1984