F1: 1632 octets

Voir le sujet précédent Voir le sujet suivant Aller en bas

F1: 1632 octets

Message par goux.m le Mar 28 Juil 2015 - 21:12

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 .... Wink
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
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Mar 28 Juil 2015 - 21:15

Arfe c'est bien entendu pour la rubrique Deukilos ! désolé Doc, posté au mauvais endroit Sad
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par F.L le Mar 28 Juil 2015 - 21:30

bravo pour ton programme. malgré les 1316 octets, les autos sont assez jolies !
pour ce concours des 2ko, le niveau est élévé !!
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2152
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par Vetea le Mar 28 Juil 2015 - 22:39

Trés sympa à jouer !!
Et aussi dur que l'original !! Wink
Beau travail Goux ! thumleft
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4105
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Mer 29 Juil 2015 - 20:59

UPDATE: 1344 octets !

il me reste encore de la place pour améliorer le jeu... Mr. Green 

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
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par F.L le Jeu 30 Juil 2015 - 13:13

dur dur de depasser + de 12 voitures !
il faudrait que la voiture bouge plus vite quand le niveau de difficulté monte aussi Wink
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2152
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Jeu 30 Juil 2015 - 21:42

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...

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:

avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Dim 2 Aoû 2015 - 18:21

UPDATE 3: 1439 octets !


- 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
- ???





avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Dim 2 Aoû 2015 - 18:56

je viens de réduire le source à 1315 octets affraid
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par vingazole le Dim 2 Aoû 2015 - 20:46

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 Wink

PS: Je me demande si
Code:
SGN(x - w) * (x - w)
ne serait pas la même chose que
Code:
ABS(x - w)

PS2 : on a la division entière avec QB64: au lieu de faire
Code:
INT(z / 3)
on peut faire
Code:
z \ 3
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4008
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Dim 2 Aoû 2015 - 22:01

@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 Wink

PS: Je me demande si
Code:
SGN(x - w) * (x - w)
ne serait pas la même chose que
Code:
ABS(x - w)

PS2 : on a la division entière avec QB64: au lieu de faire
Code:
INT(z / 3)
on peut faire
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 affraid affraid affraid affraid

Il ne me reste plus qu'a regarder pour la division entière !
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par vingazole le Mer 5 Aoû 2015 - 16:27

Bien vu la multiplication pour remplacer le AND Wink
Code:
x = x - (_KEYDOWN(19200) * (x > 57)) + (_KEYDOWN(19712) * (x < 233))
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4008
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par goux.m le Mer 5 Aoû 2015 - 20:59

@vingazole a écrit:Bien vu la multiplication pour remplacer le AND Wink
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 !
avatar
goux.m
Patient contaminé

Masculin Nombre de messages : 119
Age : 51
Localisation : 77
Date d'inscription : 30/08/2013

http://michel.goux.pagesperso-orange.fr/

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par drfloyd le Sam 8 Aoû 2015 - 10:35

listing à publier dans la rubrique 2ko. je ferme ce sujet (sinon super programme !)

_______________________________________________________


Mon profil Gamoapt Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 122051
Age : 47
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: F1: 1632 octets

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum