F1: 1632 octets
4 participants
Page 1 sur 1
F1: 1632 octets
Voici une version (qui reste à améliorer) de mon jeu "F1" en mois de 2Ko: évitez les voitures qui arrivent du haut de l'écran (touches fléchés). A chaque voiture évitée vous marquez un point ! Attention à l'accélération ....
codé en QB64
codé en QB64
- Code:
SCREEN 13: _FULLSCREEN: DO: t = -30: x = 100: y = -40: x1 = 56 + INT(RND * 184): c = INT(RND * 5) + 1: nbr = 0: DO: _LIMIT 60: LINE (0, 0)-(320, 200), 0, BF: LINE (50, 0)-(56, 319), 15, BF: LINE (264, 0)-(270, 619), 15, BF: FOR i = 0 TO 3: LINE (50, t + (i * 60))-(56, t + 30 + (i * 60)), 4, BF: LINE (264, t + (i * 60))-(270, t + 30 + (i * 60)), 4, BF: NEXT: t = t + INT(nbr / 3) + 2: IF t > 30 THEN t = -30
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233)): LINE (x + 5, 150)-(x + 25, 155), 4, BF: LINE (x + 10, 155)-(x + 20, 170), 12, BF: LINE (x + 5, 170)-(x + 25, 185), 12, BF: LINE (x, 185)-(x + 30, 190), 4, BF: LINE (x + 7, 158)-(x + 8, 167), 7, BF: LINE (x + 22, 158)-(x + 23, 167), 7, BF: LINE (x + 1, 172)-(x + 3, 183), 7, BF: LINE (x + 27, 172)-(x + 29, 183), 7, BF: LINE (x + 13, 172)-(x + 17, 180), 15, BF
y = y + 1 + INT(nbr / 3): LINE (x1 + 5, y)-(x1 + 25, y + 5), c, BF: LINE (x1 + 10, y + 5)-(x1 + 20, y + 20), c + 8, BF: LINE (x1 + 5, y + 20)-(x1 + 25, y + 35), c + 8, BF: LINE (x1, y + 35)-(x1 + 30, y + 40), c, BF: LINE (x1 + 7, y + 8)-(x1 + 8, y + 15), 7, BF: LINE (x1 + 22, y + 8)-(x1 + 23, y + 15), 7, BF: LINE (x1 + 1, y + 22)-(x1 + 3, y + 33), 7, BF: LINE (x1 + 27, y + 22)-(x1 + 29, y + 33), 7, BF: LINE (x1 + 13, y + 22)-(x1 + 17, y + 30), 15, BF
IF y > 200 THEN y = -40: x1 = 56 + INT(RND * 184): nbr = nbr + 1: c = INT(RND * 5) + 1
LOCATE 1, 16: ? "SCORE: " + STR$(nbr): _DISPLAY: LOOP UNTIL (SGN(x - x1) * (x - x1) < 30) AND (SGN(y - 150) * (y - 150) < 40) OR INKEY$ = "q": LOCATE 16, 7: INPUT "Voulez-vous rejouer (O/N)"; r$: LOOP UNTIL r$ = "n"
Dernière édition par goux.m le Mar 28 Juil 2015 - 21:15, édité 1 fois
Re: F1: 1632 octets
Arfe c'est bien entendu pour la rubrique Deukilos ! désolé Doc, posté au mauvais endroit
Re: F1: 1632 octets
bravo pour ton programme. malgré les 1316 octets, les autos sont assez jolies !
pour ce concours des 2ko, le niveau est élévé !!
pour ce concours des 2ko, le niveau est élévé !!
Re: F1: 1632 octets
Trés sympa à jouer !!
Et aussi dur que l'original !!
Beau travail Goux !
Et aussi dur que l'original !!
Beau travail Goux !
Invité- Invité
Re: F1: 1632 octets
UPDATE: 1344 octets !
il me reste encore de la place pour améliorer le jeu...
il me reste encore de la place pour améliorer le jeu...
- Code:
SCREEN 13: _FULLSCREEN: DO: t = -30: x = 100: y = -40: x1 = 56 + INT(RND * 184): c = INT(RND * 5) + 1: nbr = 0: DO: _LIMIT 60: LINE (0, 0)-(320, 200), 0, BF: LINE (50, 0)-(56, 319), 15, BF: LINE (264, 0)-(270, 619), 15, BF: FOR i = 0 TO 3: LINE (50, t + (i * 60))-(56, t + 30 + (i * 60)), 4, BF: LINE (264, t + (i * 60))-(270, t + 30 + (i * 60)), 4, BF: NEXT: t = t + INT(nbr / 3) + 2: IF t > 30 THEN t = -30
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233)): CALL f1(x, 150, 4):y = y + 1 + INT(nbr / 3): CALL f1(x1, y, c):IF y > 200 THEN y = -40: x1 = 56 + INT(RND * 184): nbr = nbr + 1: c = INT(RND * 5) + 1
LOCATE 1, 16: ? "SCORE: " + STR$(nbr): _DISPLAY: LOOP UNTIL (SGN(x - x1) * (x - x1) < 30) AND (SGN(y - 150) * (y - 150) < 40) OR INKEY$ = "q": LOCATE 16, 7: INPUT "Voulez-vous rejouer (O/N)"; r$: LOOP UNTIL r$ = "n"
SUB f1 (xf, yf, cf): LINE (xf + 5, yf)-(xf + 25, yf + 5), cf, BF: LINE (xf + 10, yf + 5)-(xf + 20, yf + 20), cf + 8, BF: LINE (xf + 5, yf + 20)-(xf + 25, yf + 35), cf + 8, BF: LINE (xf, yf + 35)-(xf + 30, yf + 40), cf, BF: LINE (xf + 7, yf + 8)-(xf + 8, yf + 15), 7, BF: LINE (xf + 22, yf + 8)-(xf + 23, yf + 15), 7, BF: LINE (xf + 1, yf + 22)-(xf + 3, yf + 33), 7, BF: LINE (xf + 27, yf + 22)-(xf + 29, yf + 33), 7, BF: LINE (xf + 13, yf + 22)-(xf + 17, yf + 30), 15, BF: END SUB
Re: F1: 1632 octets
dur dur de depasser + de 12 voitures !
il faudrait que la voiture bouge plus vite quand le niveau de difficulté monte aussi
il faudrait que la voiture bouge plus vite quand le niveau de difficulté monte aussi
Re: F1: 1632 octets
UPDATE 2: 1477 octets !
- Changement des couleurs de la route, des pneus, ajout du vert de chaque coté (herbe).
- Modification de la difficulté (maintenant limitée) qui permet d'avancer un peu plus loin dans le jeu et de dépasser les 12 voitures !
- quelques autres petites modifs...
Une image valant mieux qu'un long discours:
- Changement des couleurs de la route, des pneus, ajout du vert de chaque coté (herbe).
- Modification de la difficulté (maintenant limitée) qui permet d'avancer un peu plus loin dans le jeu et de dépasser les 12 voitures !
- quelques autres petites modifs...
- Code:
SCREEN 13: _FULLSCREEN: DO: t = -30: x = 100: y = -40: x1 = 56 + INT(RND * 184): c = INT(RND * 5) + 1: nbr = 0: DO: _LIMIT 60: LINE (0, 0)-(56, 200), 2, BF: LINE (264, 0)-(320, 200), 2, BF: LINE (57, 0)-(263, 200), 7, BF: LINE (50, 0)-(56, 319), 15, BF: LINE (264, 0)-(270, 619), 15, BF: FOR i = 0 TO 3: LINE (50, t + (i * 60))-(56, t + 30 + (i * 60)), 4, BF: LINE (264, t + (i * 60))-(270, t + 30 + (i * 60)), 4, BF: NEXT: t = t + 2 - INT(nbr / 3) * (nbr < 10) - 3 * (nbr > 9): IF t > 30 THEN t = -30
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233)): CALL f1(x, 150, 4): y = y + 1 - INT(nbr / 3) * (nbr < 10) - 3 * (nbr > 9): CALL f1(x1, y, c): IF y > 200 THEN y = -40: x1 = 56 + INT(RND * 184): nbr = nbr + 1: c = INT(RND * 5) + 1
LOCATE 1, 16: ? "SCORE: " + STR$(nbr): _DISPLAY: LOOP UNTIL (SGN(x - x1) * (x - x1) < 30) AND (SGN(y - 150) * (y - 150) < 40) OR UCASE$(INKEY$) = "Q": LOCATE 16, 12: INPUT "PLAY AGAIN (Y/N) "; r$: LOOP UNTIL UCASE$(r$) = "N"
SUB f1 (xf, yf, cf): LINE (xf + 5, yf)-(xf + 25, yf + 5), cf, BF: LINE (xf + 10, yf + 5)-(xf + 20, yf + 20), cf + 8, BF: LINE (xf + 5, yf + 20)-(xf + 25, yf + 35), cf + 8, BF: LINE (xf, yf + 35)-(xf + 30, yf + 40), cf, BF: LINE (xf + 7, yf + 8)-(xf + 8, yf + 15), 0, BF: LINE (xf + 22, yf + 8)-(xf + 23, yf + 15), 0, BF: LINE (xf + 1, yf + 22)-(xf + 3, yf + 33), 0, BF: LINE (xf + 27, yf + 22)-(xf + 29, yf + 33), 0, BF: LINE (xf + 13, yf + 22)-(xf + 17, yf + 30), 15, BF: END SUB
Une image valant mieux qu'un long discours:
Re: F1: 1632 octets
UPDATE 3: 1439 octets !
- Modification du dessin des voitures (ajout des essieux)
- Barre noire en haut pour le score
- Quelques simplifications
J'essaie d'optimiser un maximum afin de tenter d'ajouter le maximum de trucs
Quelques idées (tout n'est pas forcément réalisable, hein !):
- animation des roues des voitures
- bonus qui permettraient de réduire la vitesse
- buissons qui défilent sur les bas cotés
- du son
- ???
- Modification du dessin des voitures (ajout des essieux)
- Barre noire en haut pour le score
- Quelques simplifications
- Code:
SCREEN 13: _FULLSCREEN: DO: t = -30: x = 100: y = 200: z = 0: DO: _LIMIT 60: LINE (0, 0)-(56, 200), 2, BF: LINE (264, 0)-(320, 200), 2, BF: LINE (57, 0)-(263, 200), 7, BF: LINE (50, 0)-(56, 319), 15, BF: LINE (264, 0)-(270, 619), 15, BF: FOR i = 0 TO 3: LINE (50, t + (i * 60))-(56, t + 30 + (i * 60)), 4, BF: LINE (264, t + (i * 60))-(270, t + 30 + (i * 60)), 4, BF: NEXT: t = t + 2 - INT(z / 3) * (z < 10) - 3 * (z > 9): IF t > 30 THEN t = -30
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233)): CALL f1(x, 150, 4): y = y + 1 - INT(z / 3) * (z < 10) - 3 * (z > 9): CALL f1(w, y, c): LINE (0, 0)-(320, 8), 0, BF: IF y > 200 THEN y = -40: w = 56 + INT(RND * 184): z = z + 1: c = INT(RND * 5) + 1
LOCATE 1, 16: ?"SCORE: " + STR$(z): _DISPLAY: LOOP UNTIL (SGN(x - w) * (x - w) < 30) AND (SGN(y - 150) * (y - 150) < 40): LOCATE 16, 12: INPUT "PLAY AGAIN (y/n) "; r$: LOOP UNTIL r$ = "n": CLS
SUB f1 (a, b, d): LINE (a + 5, b)-(a + 25, b + 5), d, BF: LINE (a + 7, b + 11)-(a + 22, b + 11), d: LINE (a + 2, b + 27)-(a + 29, b + 27), d: LINE (a + 10, b + 5)-(a + 20, b + 20), d + 8, BF: LINE (a + 5, b + 20)-(a + 25, b + 35), d + 8, BF: LINE (a, b + 35)-(a + 30, b + 40), d, BF: LINE (a + 7, b + 8)-(a + 8, b + 15), 0, BF: LINE (a + 22, b + 8)-(a + 23, b + 15), 0, BF: LINE (a + 1, b + 22)-(a + 3, b + 33), 0, BF: LINE (a + 27, b + 22)-(a + 29, b + 33), 0, BF: LINE (a + 13, b + 22)-(a + 17, b + 30), 15, BF: END SUB
J'essaie d'optimiser un maximum afin de tenter d'ajouter le maximum de trucs
Quelques idées (tout n'est pas forcément réalisable, hein !):
- animation des roues des voitures
- bonus qui permettraient de réduire la vitesse
- buissons qui défilent sur les bas cotés
- du son
- ???
Re: F1: 1632 octets
Je m'autocite :
Sinon pour la partie graphique tu devrais jeter un œil à la commande "DRAW" de QB64
PS: Je me demande si
PS2 : on a la division entière avec QB64: au lieu de faire
astuce avec QB64 : désactiver l'Auto Spacing et l'Auto Indent dans Options/Code layout
Sinon pour la partie graphique tu devrais jeter un œil à la commande "DRAW" de QB64
PS: Je me demande si
- Code:
SGN(x - w) * (x - w)
- Code:
ABS(x - w)
PS2 : on a la division entière avec QB64: au lieu de faire
- Code:
INT(z / 3)
- Code:
z \ 3
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: F1: 1632 octets
vingazole a écrit:Je m'autocite :astuce avec QB64 : désactiver l'Auto Spacing et l'Auto Indent dans Options/Code layout
Sinon pour la partie graphique tu devrais jeter un œil à la commande "DRAW" de QB64
PS: Je me demande sine serait pas la même chose que
- Code:
SGN(x - w) * (x - w)
- Code:
ABS(x - w)
PS2 : on a la division entière avec QB64: au lieu de faireon peut faire
- Code:
INT(z / 3)
- Code:
z \ 3
Merci Vingazole je viens de supprimer les espaces inutiles et de remplacer les SGN par ABS (j'avais oublié cette instruction...) et la taille du code est passée à ..... 984 octets
Il ne me reste plus qu'a regarder pour la division entière !
Re: F1: 1632 octets
Bien vu la multiplication pour remplacer le AND
- Code:
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233))
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: F1: 1632 octets
vingazole a écrit:Bien vu la multiplication pour remplacer le AND
- Code:
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233))
C'est une combinaison avec l'état TRUE (-1) ou FALSE (0) des expressions... pas besoin de IF ... THEN ... END IF ni de AND tout le déplacement de la voiture est géré en une seule ligne !
Re: F1: 1632 octets
listing à publier dans la rubrique 2ko. je ferme ce sujet (sinon super programme !)
_______________________________________________________
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum