Jeu de voiture à l’ancienne....

Programmation avancée de jeux en PureBasic
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Jeu de voiture à l’ancienne....

Message 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.
Dernière modification par Mytic le lun. 01/oct./2007 15:34, modifié 3 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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!
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Message 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 ?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@mytic

Je remarque que tu n'utilise que peu les structures.
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bien joué !! :D

dommage que le remplissage ralentisse a mort le system !! :)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message 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:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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.
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message 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:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 !! :)
Dernière modification par Backup le ven. 28/sept./2007 11:05, modifié 5 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Merci des conseils, je vais essayer d’adapter tout ça en sprites.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Répondre