J'ai tenté un remake de ce petit jeu de voiture:(voir post: http://www.purebasic.fr/french/viewtopic.php?t=7155)A LIRE EN PREMIER![]()
J'ai essayé de faire un programme avec le strict minimum : pas de tableaux, pas de structures, pas de listes chaînées, très peu de mots clés, pas de déclaration de type de variable, pas de macros, pas de procédures.....
Forcément le code s'allonge très vite!
Le but c'est de faire un programme lisible dès le CM1 ou le CM2 (quelque soit la longueur!)
Si ça vous intéresse, mettez-vous à la place d'un pokémon de 9, 10 ans et dites-moi ce qui vous semble difficile
Si vous avez des modifications à faire, ça m'intéresse.
Je me souviens(

Ici, le principe est simple : 4 portions de circuit, 3 visibles et 1 cachée que l'on permute(comme dans les studios d'hollywood

(Avec cette version, je rajouterai peut-être des voitures "ennemis"

Les sprites viennent de ce jeu

http://www.youtube.com/watch?v=QHK0s8R3Xnw
Je ne gère pas la partie grise extérieure de la route!
SPRITE NECESSAIRE (à placer dans le même dossier que le programme)
Code : Tout sélectionner
;pure_vroom
;auteur Huitbit
;pb v4.02
;-constantes
;{
Enumeration
#spr_pure_vroom
#spr_bordure_tout_droit
#spr_bordure_virage_droite
#spr_bordure_virage_gauche
#spr_voiture_tout_droit
#spr_voiture_virage_droite
#spr_voiture_virage_gauche
EndEnumeration
#largeur_ecran=96*8
#distance_sprites_routes_gauche_et_droite=96*2
#moitie_largeur_route=(#distance_sprites_routes_gauche_et_droite-32)*0.5
#decalage_droit_droit=0
#decalage_droit_droite=32
#decalage_droit_gauche=-32
#decalage_droite_droit=32
#decalage_droite_droite=64
#decalage_droite_gauche=0
#decalage_gauche_droit=-32
#decalage_gauche_droite=0
#decalage_gauche_gauche=-64
;}
;-initialisation
;{
x_tranche_1=(#largeur_ecran-#distance_sprites_routes_gauche_et_droite-96)*0.5
y_tranche_1=128
spr_tranche_1=#spr_bordure_tout_droit
x_tranche_2=x_tranche_1
y_tranche_2=64
spr_tranche_2=#spr_bordure_tout_droit
x_tranche_3=x_tranche_1
y_tranche_3=0
spr_tranche_3=#spr_bordure_tout_droit
x_tranche_4=x_tranche_1
y_tranche_4=-64
spr_tranche_4=#spr_bordure_tout_droit
tranche_test_voiture=spr_tranche_2
x_tranche_test_voiture=x_tranche_2
y_tranche_test_voiture=y_tranche_2
x_voiture=x_tranche_1+#moitie_largeur_route+48
spr_voiture=#spr_voiture_tout_droit
vitesse_voiture=0
;}
;-PROGRAMME PRINCIPAL
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,#largeur_ecran,192,"Pure_Vroom (vitesse : v ^ / freinage : espace / direction : < > )",#PB_Window_ScreenCentered|#PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,#largeur_ecran,192,0,0,0)
UsePNGImageDecoder()
TransparentSpriteColor(#PB_Default ,RGB(255, 0, 255))
LoadSprite(#spr_pure_vroom,"pure_vroom.png")
;-création des sprites
;{
CreateSprite(#spr_bordure_tout_droit,96,64)
CopySprite(#spr_pure_vroom,#spr_bordure_tout_droit)
ClipSprite(#spr_bordure_tout_droit,0,0,96,64)
CreateSprite(#spr_bordure_virage_droite,96,64)
CopySprite(#spr_pure_vroom,#spr_bordure_virage_droite)
ClipSprite(#spr_bordure_virage_droite,0,64,96,64)
CreateSprite(#spr_bordure_virage_gauche,96,64)
CopySprite(#spr_pure_vroom,#spr_bordure_virage_gauche)
ClipSprite(#spr_bordure_virage_gauche,0,128,96,64)
CreateSprite(#spr_voiture_tout_droit,32,32)
CopySprite(#spr_pure_vroom,#spr_voiture_tout_droit)
ClipSprite(#spr_voiture_tout_droit,0,192,32,32)
CreateSprite(#spr_voiture_virage_droite,32,32)
CopySprite(#spr_pure_vroom,#spr_voiture_virage_droite)
ClipSprite(#spr_voiture_virage_droite,32,192,32,32)
CreateSprite(#spr_voiture_virage_gauche,32,32)
CopySprite(#spr_pure_vroom,#spr_voiture_virage_gauche)
ClipSprite(#spr_voiture_virage_gauche,64,192,32,32)
;}
;-BOUCLE PRINCIPALE
;-information
;pour des variations de vitesse moins brusques, on travaille avec des divisions entières de la vitesse(voir plus loin)
Repeat
ClearScreen(RGB(128,128,128))
;-gestion des évènements de la fenêtre
;{
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
;}
;-défilement de l'écran
;{
;pour le défilement, tout est synchronisé sur la portion de circuit n°1
y_tranche_1=y_tranche_1+vitesse_voiture/10
If y_tranche_1>192
y_tranche_1=-64
;choix aléatoire des nouvelles portions de circuit
random_1=Random(3)
random_2=Random(3)
random_3=Random(3)
random_4=Random(3)
EndIf
; cas n°1 ordre des portions de circuit (de haut en bas):4;3;2;1
If y_tranche_1>128 And y_tranche_1<192
y_tranche_2=y_tranche_1-64
y_tranche_3=y_tranche_1-128
y_tranche_4=y_tranche_1-192
y_tranche_test_voiture=y_tranche_2
If random_4<>4 ; 4 valeur choisie pour savoir si les calculs ont déjà été faits
tranche_test_voiture=spr_tranche_2
x_tranche_test_voiture=x_tranche_2
If random_4=3;même décision(portion de route droite>voir plus loin) pour deux valeurs du random
random_4=0
EndIf
;on empêche les sorties d'écran
If x_tranche_3>#largeur_ecran-#distance_sprites_routes_gauche_et_droite-96
random_4=2
ElseIf x_tranche_3<96
random_4=1
EndIf
Select random_4
Case 0
spr_tranche_4=#spr_bordure_tout_droit
Select spr_tranche_3
Case #spr_bordure_tout_droit
x_tranche_4=x_tranche_3+#decalage_droit_droit
Case #spr_bordure_virage_droite
x_tranche_4=x_tranche_3+#decalage_droite_droit
Case #spr_bordure_virage_gauche
x_tranche_4=x_tranche_3+#decalage_gauche_droit
EndSelect
Case 1
spr_tranche_4=#spr_bordure_virage_droite
Select spr_tranche_3
Case #spr_bordure_tout_droit
x_tranche_4=x_tranche_3+#decalage_droit_droite
Case #spr_bordure_virage_droite
x_tranche_4=x_tranche_3+#decalage_droite_droite
Case #spr_bordure_virage_gauche
x_tranche_4=x_tranche_3+#decalage_gauche_droite
EndSelect
Case 2
spr_tranche_4=#spr_bordure_virage_gauche
Select spr_tranche_3
Case #spr_bordure_tout_droit
x_tranche_4=x_tranche_3+#decalage_droit_gauche
Case #spr_bordure_virage_droite
x_tranche_4=x_tranche_3+#decalage_droite_gauche
Case #spr_bordure_virage_gauche
x_tranche_4=x_tranche_3+#decalage_gauche_gauche
EndSelect
EndSelect
EndIf
random_4=4
EndIf
; cas n°2 ordre des portions de circuit (de haut en bas):1;4;3;2
If y_tranche_1>-64 And y_tranche_1<0
y_tranche_2=y_tranche_1+192
y_tranche_3=y_tranche_1+128
y_tranche_4=y_tranche_1+64
y_tranche_test_voiture=y_tranche_3
If random_1<>4
tranche_test_voiture=spr_tranche_3
x_tranche_test_voiture=x_tranche_3
If random_1=3
random_1=0
EndIf
If x_tranche_4>#largeur_ecran-#distance_sprites_routes_gauche_et_droite-96
random_1=2
ElseIf x_tranche_4<96
random_1=1
EndIf
Select random_1
Case 0
spr_tranche_1=#spr_bordure_tout_droit
Select spr_tranche_4
Case #spr_bordure_tout_droit
x_tranche_1=x_tranche_4+#decalage_droit_droit
Case #spr_bordure_virage_droite
x_tranche_1=x_tranche_4+#decalage_droite_droit
Case #spr_bordure_virage_gauche
x_tranche_1=x_tranche_4+#decalage_gauche_droit
EndSelect
Case 1
spr_tranche_1=#spr_bordure_virage_droite
Select spr_tranche_4
Case #spr_bordure_tout_droit
x_tranche_1=x_tranche_4+#decalage_droit_droite
Case #spr_bordure_virage_droite
x_tranche_1=x_tranche_4+#decalage_droite_droite
Case #spr_bordure_virage_gauche
x_tranche_1=x_tranche_4+#decalage_gauche_droite
EndSelect
Case 2
spr_tranche_1=#spr_bordure_virage_gauche
Select spr_tranche_4
Case #spr_bordure_tout_droit
x_tranche_1=x_tranche_4+#decalage_droit_gauche
Case #spr_bordure_virage_droite
x_tranche_1=x_tranche_4+#decalage_droite_gauche
Case #spr_bordure_virage_gauche
x_tranche_1=x_tranche_4+#decalage_gauche_gauche
EndSelect
EndSelect
EndIf
random_1=4
EndIf
; cas n°3 ordre des portions de circuit (de haut en bas):2;1;4;3
If y_tranche_1>0 And y_tranche_1<64
y_tranche_2=y_tranche_1-64
y_tranche_3=y_tranche_1+128
y_tranche_4=y_tranche_1+64
y_tranche_test_voiture=y_tranche_4
If random_2<>4
tranche_test_voiture=spr_tranche_4
x_tranche_test_voiture=x_tranche_4
If random_2=3
random_2=0
EndIf
If x_tranche_1>#largeur_ecran-#distance_sprites_routes_gauche_et_droite-96
random_2=2
ElseIf x_tranche_1<96
random_2=1
EndIf
Select random_2
Case 0
spr_tranche_2=#spr_bordure_tout_droit
Select spr_tranche_1
Case #spr_bordure_tout_droit
x_tranche_2=x_tranche_1+#decalage_droit_droit
Case #spr_bordure_virage_droite
x_tranche_2=x_tranche_1+#decalage_droite_droit
Case #spr_bordure_virage_gauche
x_tranche_2=x_tranche_1+#decalage_gauche_droit
EndSelect
Case 1
spr_tranche_2=#spr_bordure_virage_droite
Select spr_tranche_1
Case #spr_bordure_tout_droit
x_tranche_2=x_tranche_1+#decalage_droit_droite
Case #spr_bordure_virage_droite
x_tranche_2=x_tranche_1+#decalage_droite_droite
Case #spr_bordure_virage_gauche
x_tranche_2=x_tranche_1+#decalage_gauche_droite
EndSelect
Case 2
spr_tranche_2=#spr_bordure_virage_gauche
Select spr_tranche_1
Case #spr_bordure_tout_droit
x_tranche_2=x_tranche_1+#decalage_droit_gauche
Case #spr_bordure_virage_droite
x_tranche_2=x_tranche_1+#decalage_droite_gauche
Case #spr_bordure_virage_gauche
x_tranche_2=x_tranche_1+#decalage_gauche_gauche
EndSelect
EndSelect
EndIf
random_2=4
EndIf
; cas n°4 ordre des portions de circuit (de haut en bas):3;2;1;4
If y_tranche_1>64 And y_tranche_1<128
y_tranche_2=y_tranche_1-64
y_tranche_3=y_tranche_1-128
y_tranche_4=y_tranche_1+64
y_tranche_test_voiture=y_tranche_1
If random_3<>4
tranche_test_voiture=spr_tranche_1
x_tranche_test_voiture=x_tranche_1
If random_3=3
random_3=0
EndIf
If x_tranche_2>#largeur_ecran-#distance_sprites_routes_gauche_et_droite-96
random_3=2
ElseIf x_tranche_2<96
random_3=1
EndIf
Select random_3
Case 0
spr_tranche_3=#spr_bordure_tout_droit
Select spr_tranche_2
Case #spr_bordure_tout_droit
x_tranche_3=x_tranche_2+#decalage_droit_droit
Case #spr_bordure_virage_droite
x_tranche_3=x_tranche_2+#decalage_droite_droit
Case #spr_bordure_virage_gauche
x_tranche_3=x_tranche_2+#decalage_gauche_droit
EndSelect
Case 1
spr_tranche_3=#spr_bordure_virage_droite
Select spr_tranche_2
Case #spr_bordure_tout_droit
x_tranche_3=x_tranche_2+#decalage_droit_droite
Case #spr_bordure_virage_droite
x_tranche_3=x_tranche_2+#decalage_droite_droite
Case #spr_bordure_virage_gauche
x_tranche_3=x_tranche_2+#decalage_gauche_droite
EndSelect
Case 2
spr_tranche_3=#spr_bordure_virage_gauche
Select spr_tranche_2
Case #spr_bordure_tout_droit
x_tranche_3=x_tranche_2+#decalage_droit_gauche
Case #spr_bordure_virage_droite
x_tranche_3=x_tranche_2+#decalage_droite_gauche
Case #spr_bordure_virage_gauche
x_tranche_3=x_tranche_2+#decalage_gauche_gauche
EndSelect
EndSelect
EndIf
random_3=4
EndIf
;}
;-gestion du clavier
;{
ExamineKeyboard()
;-déplacement latéral de la voiture
If KeyboardPushed(#PB_Key_Left) And vitesse_voiture/10>0
If vitesse_voiture/15>0
x_voiture=x_voiture-vitesse_voiture/15
Else
x_voiture=x_voiture-1
EndIf
spr_voiture=#spr_voiture_virage_gauche
ElseIf KeyboardPushed(#PB_Key_Right) And vitesse_voiture/10>0
If vitesse_voiture/15>0
x_voiture=x_voiture+vitesse_voiture/15
Else
x_voiture=x_voiture+1
EndIf
spr_voiture=#spr_voiture_virage_droite
Else
spr_voiture=#spr_voiture_tout_droit
EndIf
;-gestion de la vitesse
If KeyboardPushed(#PB_Key_Up)
If vitesse_voiture<80
vitesse_voiture=vitesse_voiture+1
EndIf
ElseIf KeyboardPushed(#PB_Key_Down)
If vitesse_voiture>0
vitesse_voiture=vitesse_voiture-1
EndIf
EndIf
;-freinage
If KeyboardPushed(#PB_Key_Space)
If vitesse_voiture>0
vitesse_voiture=vitesse_voiture-2
EndIf
EndIf
;}
;-affichage
;{
DisplayTransparentSprite(spr_tranche_1,x_tranche_1,y_tranche_1)
DisplayTransparentSprite(spr_tranche_1,x_tranche_1+#distance_sprites_routes_gauche_et_droite,y_tranche_1)
DisplayTransparentSprite(spr_tranche_2,x_tranche_2,y_tranche_2)
DisplayTransparentSprite(spr_tranche_2,x_tranche_2+#distance_sprites_routes_gauche_et_droite,y_tranche_2)
DisplayTransparentSprite(spr_tranche_3,x_tranche_3,y_tranche_3)
DisplayTransparentSprite(spr_tranche_3,x_tranche_3+#distance_sprites_routes_gauche_et_droite,y_tranche_3)
DisplayTransparentSprite(spr_tranche_4,x_tranche_4,y_tranche_4+dy)
DisplayTransparentSprite(spr_tranche_4,x_tranche_4+#distance_sprites_routes_gauche_et_droite,y_tranche_4)
DisplayTransparentSprite(spr_voiture,x_voiture,128)
;}
;-collisions
;{
If SpritePixelCollision(spr_voiture,x_voiture,128,tranche_test_voiture,x_tranche_test_voiture,y_tranche_test_voiture) Or SpritePixelCollision(spr_voiture,x_voiture,128,tranche_test_voiture,x_tranche_test_voiture+#distance_sprites_routes_gauche_et_droite,y_tranche_test_voiture)
StartDrawing(ScreenOutput())
Select spr_voiture
Case #spr_voiture_tout_droit
decalage_poussiere=0
Case #spr_voiture_virage_droite
decalage_poussiere=-16
Case #spr_voiture_virage_gauche
decalage_poussiere=16
EndSelect
For i=0 To 30
Plot(x_voiture+ decalage_poussiere+Random(30),144+Random(30),RGB(120-2*i,120-2*i,120-2*i))
Next i
StopDrawing()
FlipBuffers()
If vitesse_voiture>40
vitesse_voiture=vitesse_voiture-2
EndIf
EndIf
;}
Delay(15)
FlipBuffers()
ForEver