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

Cette catégorie traite de développements récents pour 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 : 399
Enregistré le : 22 mai 2013 01:10
Localisation : Paris / Eure

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

Message par Zaxxon » 21 mars 2020 23:29

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é 5 fois
Bonne soirée à vous :-)
Modifié en dernier par Zaxxon le 22 mars 2020 18:00, modifié 6 fois.
Thomas,

Avatar du membre
Xavier_AL
Messages : 943
Enregistré le : 06 déc. 2017 20:30

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

Message par Xavier_AL » 22 mars 2020 02:21

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 du membre
Orion_
Messages : 172
Enregistré le : 07 août 2014 16:29
Localisation : Perpignan
Contact :

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

Message par Orion_ » 22 mars 2020 09:57

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

hlide
Messages : 1304
Enregistré le : 29 nov. 2017 10:23

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

Message par hlide » 22 mars 2020 13:33

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.

hlide
Messages : 1304
Enregistré le : 29 nov. 2017 10:23

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

Message par hlide » 22 mars 2020 13:38

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.

hlide
Messages : 1304
Enregistré le : 29 nov. 2017 10:23

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

Message par hlide » 22 mars 2020 13:48

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 : 399
Enregistré le : 22 mai 2013 01:10
Localisation : Paris / Eure

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

Message par Zaxxon » 22 mars 2020 17:38

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,

Répondre