Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Répondre
Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par Zaxxon »

Bonsoir à tous,

Edit : Mise à jour, version 2.

Suite à un post sur le groupe Thomsonistes, concernant un concours de programme basic en 10 lignes, je me suis amusé à essayer de faire un casse brique en mode texte en 10 lignes (max 255 caractères). C'est juste pour le fun et le défi.

Si cela vous intéresse : Je vous mets ici le code source et les fichiers k7 pour mo5 et TO770 (
Je m'étais fixé comme contrainte de n'utiliser aucun appel assembleur, et pas de caractères graphiques.
Ce n'est pas fabuleux et le code est un peu horrible (10 lignes...) mais ça fonctionne.

Donc un casse brique simple, très, très simple :

Capture Casse10 - Version 2
Image
Il se joue à la manette (conseillée) ou au clavier (avec le bip clavier, car pas de code asm). Il y a des niveaux (Pas sûr que quelqu'un aie envie de passer le premier niveau), j'ai rajouté un chenillard qui soit peut vous aider ou vous compliquer la tâche, la gestion des vies (et donc un game over), et quelques sons rudimentaires.

Changement de cette version (Edit : Merci à Orion,Xavier et Hlide pour les retours) :

- Changement graphique mineurs, et ajout son + bordure quand on perd une vie

- Modification de l'emplacement des briques, des collisions, du rebond, du chenillard (qui décale maintenant légèrement la balle et inverse sa direction), augmentation de la taille de la raquette et affichage de celle-ci plus rapide.

-Corrections de quelques bugs (il doit en rester ;-)

Voici le code, attention ça pique :D

Code : Tout sélectionner

10 DEFINT A-Z:CLS:SCREEN 3,0,0:v=3:vi=3:xd=1:lvl=1:lvlsc=0:yd=-1:x=int(rnd*15)+3:y=10:c=1:d=1:psx=19:rq$="("+chr$(127)+"-"+"-"+chr$(127)+")":rv$="  ":sc=0:x2=10:y2=14:x2D=-1
20 c$="X":line(0,21)-(0,0)c$,7,4:line-(31,0) c$,7,4:line(31,0)-(31,21) c$,7,4:BOXF(32,0)-(39,21)"*",4,0:c$=chr$(127):FOR I=1 TO 8STEP2:LINE(3,I+1)-(28,i+1) c$,1+int(i/2),0
30 next:locate 33,3,0:color3,0:?"CASSE":locate36,4:?"10":locate psx,21,0:color 3,1:?rq$:c$="o":so$="L12SIDOLASISIPPPPPPPP":c2$="O2L2SI":c3$="O5L3FAT12":c4$="L24O3SOLAL11RE#PP":c5$="O1T18DOPP"
50 gosub 160: COLOR 7,0:a$=inkey$:gosub 200 :PSET(x2,y2)" ",3,0:PSET(x2+6,y2)" ":x2=x2D+x2:if(x2<24 and x2>2) then locate x2,y2:color3,0:?"******" else x2D=-x2D
60 color 2,0: locate 0,22:?"SCORE:";sc;"VIE:";vi;"LEVEL:";LVL:IF LVLSC>=104THEN LVLSC=0:LVL=LVL+1:LOCATE 10,10:?"NEW LEVEL ";LVL:yd=-1:x=10:y=10:PLAY c4$:CLS:GOTO 20 ELSE GOTO 50
160 v5=screen(X,Y):if (y+yd)<1 then yd=-yd:playc2$:goto 50:else V=screen(X+xd,Y+yd): if (v5<>88 and v5<>42) then xold=x:yold=y else xold=38:yold=22 
170 y=y+yd:x=x+xd:if v=127 then:lvlsc=lvlsc+1:sc=sc+10:playc3$:pset(x-xd,y-yd)" ":yd=-yd:goto50ELSEiF y>=20ANDx>=psx and x<=(psx+5)THENPLAY c2$:yd=-1ELSEIFy>=20THENPSET(X-xd,y-yd)" ":vi=vi-1:x=int(rnd*14)+2:xdir=1:y=10:yd=-1:screen,,1:play c5$:screen,,0
180 if vi<1 thenLOCATE12,10:color 1,0:?"GAME OVER":play so$:goto10 else if x<2 or x>29 then xd=-xd:PLAY c2$ 
190 pset(xold,yold)" ",0,0:v=screen(x,y):if (v<>88 and v<>42) then PSET(X,Y)c$,2,0:return:else if (v=42) then yd=-yd:xd=(-xd):x=x+1:PLAY c2$:return else return
200 j=stick(0):IF(a$="A" or j=7)and psx>1thenpsx=psx-2:color 0,0:locate psx+6,21:?rv$:color3,1:locate psx,21:?rq$:returnELSEIF(a$="Z" or j=3) and psx<24 then psx=psx+2:color 0,0:locate psx-2,21:?rv$:color3,1:locate psx,21:?rq$:returnelsereturn
 
Vous trouvez dans l'archive, un fichier TXT contenant ce code, ainsi que des fichiers k7 pour TO7/70 /TO8 et MO5.
casse10.zip
Casse10 : Casse brique en basic 1.0 Thomson en mode texte sur 10 lignes de 255 caractères max
(10.81 Kio) Téléchargé 139 fois
Bonne soirée à vous :-)
Dernière modification par Zaxxon le 22 mars 2020 18:00, modifié 6 fois.
Thomas,
Xavier_AL

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par Xavier_AL »

Bravo Thomas,

C'est en effet difficile de faire un programme de ce type en 10 lignes.
8)

Petite question, le nombre de ligne accéléré-t-il le traitement du Basic (plus rapide) ?

Car sur Zx81, non seulement cela prend plus de place mémoire, mais en plus, le saut de ligne mange de la ressource…
D'où la création de programmes spaghetti en Basic…

Enfin pas sur le ZX81, car une seule commande par ligne (tout comme sur le Basic standard du Ti99), donc, il fallait être inventif !

Beau travail, du temps bien utilisé.
Avatar de l’utilisateur
Orion_
Messages : 176
Inscription : 07 août 2014 16:29
Localisation : Perpignan
Contact :

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par Orion_ »

c'est vraiment chouette et impressionnant d'avoir fait ça en basic et en si peu de ligne !
y'a juste peut être un tout petit bug dans la gestion des rebonds, la balle peut se retrouver coincer a rebondir en diagonal ^^
Image
Programmation rétro ! Orion_'s website
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par hlide »

Dès la première ligne, je note que tu as une variable pour dessiner une raquette et une autre qui semble être pour l'effacer. Si c'est le cas, ne serait pas judicieux de mettre un espace de chaque côté de la raquette est simplement la redessiner quand tu changes sa position ? les bords 'X' n'ont pas besoin d'être dessiné sur la dernière ligne.
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par hlide »

Si c'est la couleur qui t'en empêche de le faire, alors il y a plus simple : juste afficher un espace à l'endroit où le seul caractère de la raquette doit disparaître et ça tu peux savoir avec la direction de ta raquette : l'avantage, c'est que la raquette devrait moins scintiller.
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par hlide »

Techniquement pour la raquette, tu aurais juste besoin de l'afficher initialement.

Quand tu vas à gauche, tu affiches un cran a gauche de la raquette "(-", un ")" pour remplacer le "-" le plus à droite et un " " pour effacer l'ancien ")".

Quand tu vas à droite, tu affiches un cran a droite de la raquette "-)", un "(" pour remplacer le "-" le plus à gauche et un " " pour effacer l'ancien "(".

Bien évidemment, en BASIC je ne suis pas sûr de l'avantage que cela apporte vu que ça équivaut 4 PRINTs par mouvement de raquette. En assembleur, on y gagnerait... peut-être.
Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0

Message par Zaxxon »

Bonjour à vous et merci de vos retours sur mon petit programme "fun"

C'omme quoi le confinement n'a pas que du mauvais, j'ai beaucoup plus de temps à consacrer à mes Rhomsons :D

Je viens de tester les dernières modifications,je mets en ligne le nouveau mini code après l'envoi de ce post.

@Xavier :
Je te remercie :)
Pour répondre à ta question, avec honnêteté, je n'en sais rien du tout, il faudrait que je fasse des tests, cela pourrait être intéressant d'avoir une idée.
Je sais que sur le Basic 1.0, on peut changer l'adresse de la prochaine ligne, via quelque poke, donc je ne pense pas que ça change beaucoup niveau vitesse. ça reste à creuser.

Par contre cet imbriquement de tests et de fonctions, pour rester dans la limite des 10 lignes, doit bien faire ralentir l'ensemble je pense.

Je ne connais pas le basic zx, à part ceux que j'adaptais jeune dans la revue science et vie sur mon TO770, par contre je connais un peu celui du ti99/4A (le simple), mon premier ordinateur. Sur ce dernier faire un programme court aurait été très compliqué, entre les CALL à rallonge, l'unique commande par ligne, et le manque de possibilité des if then (pas sûr mais je crois qu'il n'accepte qu'un numéro de ligne après le then?). En tout cas, malgré les limitations, et en rusant on peut faire des trucs sympas :)

@Orion :
Je te remercie :).

J'ai bien pris en compte ta remontée du bug de collisions, merci.

Le problème est dû au test, et comme les briques ne font qu'un caractère, on arrivait à ce que la balle prenne toujours la même direction de (1 en 1). Du coup, j'ai espacé les les briques, j'ai modifié le chenillard pour qu'il provoque un léger décalage de 1 caractère de la balle, et j'ai également éloigné des bords les briques. Je me suis rendu compte en corrigeant d'un comportement bizarre. la balle devrait toucher la brique, et rebondir, là elle prenait sa place avant d'être effacée.

J'ai résolu ça. Par contre j'ai du lutter par manque de place, et la technique trouvée provoque une petite accélération au moment du cassage.

@ Hilde :
Je te remercie également :-)

Le programme n'est pas optimisé du tout, mon unique but était de réduire le code au maximum (10 lignes de 255 caractères), j'ai du faire des choix pas forcément très jolis :-/
Pour la raquette, J'allais te dire, que niveau place, je ne pouvais modifier le code, mais meaculpa, tu as raison. Je n'efface donc maintenant que le début et la fin de la raquette, merci du conseil ;)
Thomas,
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par Papy.G »

Essayé aujourd'hui sur GameCube grâce à Theodore dans Retroarch, un des rares émulateurs a encore fonctionner dans les récentes versions de Retroarch sur GameCube. 8)

Je dois avouer que je n'y passerai pas des heures. :mrgreen:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par hlide »

Pour m'amuser, je fais le portage de ce jeu en assembleur Z80 sur le MZ-700. Je ne vois pas de vidéo sur la dernière version du jeu qui m'aurait permis de jauger la vitesse des éléments entre eux. Question : pourquoi ne pas aller jusqu'à la ligne 25 (à moins que ce soit 24 pour Thomson) ?

Portage en cours :
BRICKBUSTER.gif
BRICKBUSTER.gif (428.97 Kio) Consulté 5136 fois
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par hlide »

Petite avancée : la balle avec les rebonds qu'il faut. C'est encore trop rapide pour jouer mais bon je verrais ça plus tard. Le chenillard n'a pas encore été traité correctement mais j'imagine qu'il renvoi la balle vers la raquette (parce qu'avec le rebond plus classique, ce n'est pas jouable) mais je ne comprends pas trop le décalage d'un caractère en position X sur le chenillard. Je pense que je peux faire des murs rapprochés et avoir des rebonds corrects. En raison des contrainte d'écriture dans la VRAM qui ne peut se faire que durant le BLANK horizontal, j'ai séparé le code de dessin et de mouvement qui était relativement entremêlés sous BASIC.

Si quelqu'un peut me renseigner sur les détails de l'instruction PLAY pour que je puisse traduire en équivalence.

La vidéo étant en GIF, j'ai dû me limiter à 10 s pour 25 FPS : elle montre les rebonds de la balle (je permets les rebonds en bas mais il gère bien ceux sur la raquette. Pas de score, de musique, de game over, etc. Le chenillard n'est pas traité comme il le faut parce que je n'avais pas percuter qu'il renvoyait à l'envoyeur.
BRICKBUSTER.gif
BRICKBUSTER.gif (244.32 Kio) Consulté 5109 fois
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par hlide »

Il y a effectivement un problème avec les rebonds qui me semble insoluble en l'état. Je ne gère les rebonds sur une brique qu'avec l'inversion de la direction verticale. Le problème c'est qu'un mur a quatre faces (j'omet d’emblée le bas et le haut) : le devant, l'arrière; les bords gauche et droit. Pour arriver à déterminer sur quelle face de la brique arrive la balle, il me faudrait codifier la brique pour indiquer quelles faces sont ouvertes. Bref, tout ça pour dire je ne vais plus continuer à porter ce jeu tel qui a été défini ici. C'était un exercice intéressant mais si je dois continuer, ce sera avec des changements profonds qui n'auront plus lieu d'être postés sur ce fils.
Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par Zaxxon »

@hlide et PapyG:

Salut, désolé je n'avais pas regardé les réponses au sujet, et je n'avais pas vu vos posts :-/

PapyG:
Je confirme c'est loin d'être passionnant, et il faut en vouloir pour arriver ne serait-ce qu'à passer le 1er niveau :D

@hlide :
Sympa le portage, beau travail :)
En fait les lignes verticales sur Thomson vont de 0 à 24 pour répondre à ta première question.

Ce mini jeu, est plus un délire qu'un vrai casse brique car j'ai pris des raccourcis pour rester dans la limite des 10 lignes de 256 caractères max. Les rebonds ne sont pas optimums, loin de là. Le chenillard n'a qu'un but, éviter que la balle, du fait de son déplacement linéaire, ne soit bloquée dans un schéma de mouvement et qui ne bloque le jeu. Un peu comme les aliens d'ailleurs qui descendent dans Arkanoid, certainement pour la même raison.

Donc concernant le chenillard, tu peux l'imaginer comme une balle rebondissante, qui ne se déplace qu'horizontalement. Le décalage plus ou moins important, me permet de le déplacer de x caractères et le rendre un peu plus rapide. Il inverse tout simplement la direction de la balle. Je suis très limité avec ces 10 lignes de code.

En fait la seule chose à retenir dans ce bout de code condensé, est le principe de balle rebondissante, et tout le reste est à mon avis à jeter si tu veux faire un casse brique sympa. Chose marrante, le coup de la balle rebondissante (avec ces xdir et ydir), vient de la doc basic du TI99/4A, je devais avoir 5/6 ans, et je l'ai souvent utilisé depuis :D.

Pour un casse brique plus réaliste, il faudrait déja tester le type de briques, et surtout la position de la balle sur la raquette (bord gauche, bord droit, centre) qui influe sur le comportement de la balle. Quant au déplacement, le mode caractère n'est pas le plus adéquat niveau précision, un déplacement pixel par pixel serait certainement plus précis (si possible sur ton sharp).
Thomas,
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: Thomson - Fun : Casse brique en 10 lignes de Basic 1.0 [Edit : Maj]

Message par hlide »

Salut Thomas,

le chenillard : oui, je comprend mieux sa raison (j'ai noté ce schéma répétitif).

Hélas non, je n'ai pas la possibilité de varier au pixel près et je suis limité à ses 512 caractères possibles. Néanmoins, j'ai dans l'idée de déplacer la balle par demi-caractère avec 16 directions au lieu de 4 (mais il faudra des gardes fous pour éviter d'être bloqué avec une balle horizontale ou vertical droite).

Le casse-brique a été repris à 0 : le seul vestige qui reste sont les murs de briques qui eux aussi vont être complètement retravaillés.

On peut voir ce que sera la balle ici.

Pour les briques, ce ne seront plus des éléments de décors mais des "sprites" qui testeront leur collision avec la balle, pour certaines animées en 50 fps, certaines incassables, certaines influeront sur le rebond, etc.
BB-BRICKS.jpg
BB-BRICKS.jpg (276.85 Kio) Consulté 4971 fois
En tout cas, ça m'a donné envie d'aller de l'avant et de réaliser un rêve de gosse de l'époque de cette machine (j'avais son ancêtre, sans couleur et moitié moins riche en caractères pseudo-graphiques).
Répondre