Un jeu super sympa! perso pour les briques restant en l'air, je trouve cela bien, ca augmente la difficulté pour ajuster son tire, la victoire reste incertaine
Top ! Stone Sling est effectivement mon jeu préféré sur Videopac et une pépite vidéoludique méconnue. Bon choix donc ! Tu n'as plus qu'à l'adapter sur Aquarius ! ;-)
Hé hé, l'Aquarius, je sais pas ce que je vais faire à part l'attacher à une pierre au fond de l'étang, mais vue la machine ce sera encore plus modeste.
Tout réfléchi, oui, pourquoi pas faire un mode 1 joueur VS CPU. Ça peut sembler compliqué mais j'ai pensé à une idée d'IA très simple qui ferait l'affaire, on pourrait même sélectionner la difficulté.
6:00 tu peux dire que le ciel à un valeur et les brique une autre valeur et quand l'obus arrivent dans la zone de la tour au moment ou les briques s'efface de verifier sous la brique si c'est de la brique du sol ou du ciel et faire descendre la brique, comme ça ce n'est pas verifier tout le temps mais juste au moment de la zone d'impact, ça ne se verra presque pas, sympa le jeu, ça me rappel un jeu sur Dragon 32 mais j'ai oublié le nom ?
Pour une seule brique, ce n'est pas très difficile en effet. Mais s'il y a un groupe de plusieurs briques en l'air, c'est tout de suite plus long et compliqué sauf si ce groupe est séparé par une ligne horizontale ininterrompue de ciel, alors dans ce cas on peut effacer tout ce qu'il y a au-dessus. Mais il existe des cas particuliers qui demandent une arborescence de tests pour savoir si c'est vraiment en l'air ou si c'est rattaché à la base mais pas directement par en-dessous. J'ai essayé de lister les cas de figures pour trouver un petit algo de tests qui les règle tous mais je n'y suis pas parvenu. À moins de rallonger pas mal le programme et le ralentir. Autre solution mais qui prendrait du temps aussi, c'est mettre en mémoire des cas de figures préétablis et les comparer avec ce qu'on a à l'écran. Bon, mais tout réfléchi, je crois que le cas où des briques sont en l'air sans avoir qq part en-dessous au moins une rangée complète de ciel sont rarissimes.
Très sympa bravo 👍🏻 Par contre il n'y a pas de cosinus dans la formule du mouvement d'un objet soumis à la gravitation 😅 On voit que ton boulet décrit un demi cercle, et pas la trajectoire parabolique attendue.
J'ai regardé rapidement le code et je n'ai pas compris la méthode utilisé pour dessiner les tiles dans le jeu (surtout les murs). On dirai que plusieurs charactères ASCII se superpose mais quand je teste dans mon coin, seul le dernier caractère est affiché. Y'a t-il une commande que j'aurai oublié (genre un truc pour pas effacer derrière) ?
Il faut activer la transparence de la couleur du fond (PAPER) et superposer plusieurs caractères de différentes couleurs. En texte : print chr$(22)+chr$(1) pour l'activer et 0 au lieu de 1 pour le désactiver. En mode "graphique) avec TAG, remplacer chr$(22) par chr$(23) pour activer la transparence de la couleur de fond GRAPHICS PAPER .
Super, je n'ai pas compris le problème de la durée des notes par contre. Si il y un triolet, c'est un tiers d'une noire pour chaque note, une croche un demi, etc. Pas mal pour l'histoire des valeurs des cosinus stockés, etc.
Salut, le problème était d'avoir une bonne synchronisation des 3 voix. Une voix qui comptabilise davantage de notes (je compte aussi les silences comme des notes) va se décaler dans le temps par rapport aux autres car pour l'ordinateur cela consomme plus de cycles d'horloge d'envoyer 3 notes de 500 ms qu'1 seule de 1500 ms. Alors je mets en pause la file d'attente des notes de la voix qui a reçu en premier toutes ses notes, puis pareil pour la 2e... Pour cela, j'additionne les temps des notes de chaque voix et si le total d'une voix atteint la durée d'une mesure, j'arrête d'envoyer des notes sur la voix (le canal). Il existe bien de base la possibilité de mettre en attente des canaux dans la commande Sound mais ça n'aurait pas fonctionné car le nombre de notes différe d'un canal à un autre, à moins de rajouter un DATA pour chaque note signifiant d'attendre ou pas, mais ça aurait grossi considérablement les DATA. J'espère que tu me comprendras en me lisant. 😅
J'aurais aussi pu, après réflexion, signer un nombre en data (période ou durée), ainsi un nombre positif demanderait de mettre en pause l'injection de notes, tandis qu'un négatif laisserait continuer. Bref on peut toujours trouver des alternatives.
@@retrovynz8712 Merci pour les explications. Mais pourquoi ne pas avoir contrecarré l'effet en réduisant légèrement la durée des notes pour chaque mesure proportionnellement à leur nombre dans ces mesures et mettre les durées rectifiées directement en data ? J'ignorais cette histoire de décalage avec les trois voix, je pensais que c'était super synchro le son des 3 voix avec le basic du cpc.
@@roucoupse ma méthode est assez simple, fonctionne bien et a l'avantage de traiter les durées exactes des notes de la partition plutôt que de devoir les bidouiller expérimentalement. Ce n'est pas que les 3 canaux ne sont pas synchro en Basic... Ils le sont. Faire jouer 3 notes en même temps c'est easy avec les rendez-vous de la commande Sound, mais jouer un morceau polyphonique en entier avec une différence en nombre d'environ 20 notes entre les voix, tout en gardant une interactivité pour choisir le mode de jeu, est une autre paire de manches. J'ai tenu à chercher et trouver une solution par moi-même. C'est l'intérêt que je trouve à la programmation. Il existe toujours différentes méthodes pour résoudre un problème, si tu en as une autre, ça peut être intéressant que tu la partages en montrant ton code. Le mien est accessible en téléchargeant le jeu.
Salut Vincent Super jeu de balistique. Ca me fait penser à "Artillerie Duel" quelque part (jeuxvideos8090.free.fr/index.php?Machine=1-35&Page=0&Id_Soft=832) Pour ce qui est des briques restant en l'air seuls... Je pense qui'l y a un moyen, c'est de triple tester à gauche ou à droite à chaque fois que tu fait un trou... Exemple: quand tu es en train de creuser au premier niveau (2 tuiles) : - si couleur (ypixel et xpixel-8)=bleu alors =>si (ypixel et xpixel-16)=bleu et (xpixel-8 et ypixel+8) = bleu alors =>=>Eliminer tuile située en (ypixel et xpixel-8) Pour le test, je te suggère de faire une soustraction des couleurs de pixel d'avec le bleu. C'est à dire de faire couleur pxl(a)-couleur(bleu). Si au total, tu obtiens 0, alors ya pas d'opération à faire. Les scalaires que je donne ici (8 et 16) sont arbitraires, ils dépendent d'à partir d'où tu fais le test. 2videmment, il faut faire ces tests à gauche puis à droite. Autre chose, pour l'effacement j'ai l'impression que tu fais ça en faisant 3 affichage basic ? Si tu écrivais une chaine composés de tuiles de ciel en utilisant les CHR$(8), chr$(10) etc... l'effacement serait instantanée. En tous cas, les astuces que je donne ici sont par raport au Basic des Thomson (qui est très complet), je ne sais pas si l'AmsTRAD a la fonction "POINT(x,y)" je suppose que oui... J'espère que tu as pigé ce que j'ai voulu dire... En tous cas c'st une bonne idée d'avoir écrit les valeur des cosinus. Faut savoir que c'est exactement cette technique qui est utilisée pour tous les calculateurs et algorithme de trigo justement
Salut Bruno, oui, en effet, en testant à gauche et à droite du trou venant d'être fait, si le résultat est du ciel, alors il faut effacer tout ce qu'il y a au-dessus si tant est qu'il y a quelque chose restant en l'air. Dans le doute on peut effacer. Car il y a des cas qui se présentent, comme par exemple un trou fait dans la paroi latérale qui viendrait à rejoindre un trou fait par le dessus, à l'aplomb de l'autre bord.
Quant à l'effacement: je n'ai pas fait une chaîne car je teste à chaque emplacement si c'est du mur et si c'en est j'enlève 1 au capital de points de la tour puis je passe au caractère suivant. Je n'avais pas trouvé ça gênant que ça n'efface pas instantanément, mais je comprends. Merci pour ton intervention.
Sinon, le Basic de l'Amstrad est excellent aussi (Locomotive Basic). Si tu télécharges tu pourras voir le code. J'ai un peu trop traîné à programmer ce jeu, j'avais hâte d'en terminer pour passer à autre chose, c'est pourquoi tu verras que c'est pas hyper optimisé.
C'est impressionnant de voir encore des personnes programmer sur cette machine. Bravo.
C'est nickel, merci pour ton travail et le partage. 😀😀
Merci 🙂
Oh! Excellent! Je vais tester ça sur la vraie bécane. Merci! :) Et bravo.
Hehe super ça donne envie de jouer ! Et ça fait plaisir de voir un CPC tourner ! Bravo :)
Merci à toi!
Il est téléchargeable ainsi que d'autres jeux que j'ai programmés, depuis ma page itch:
vynz-prog.itch.io/
Bonne journée!
woww haha trop cool, la musique est super, beau boulot
Beau boulot en Basic en plus ! j'adhere, j'adore !
merci!
je t'invite à visiter ma page où mes jeux sont téléchargeables:
vynz-prog.itch.io/
@@retrovynz8712 bien ta page, Je l'ai rajouté dans mes favoris pour pas la perdre ☝
Beau boulot, et très agréable a jouer, merci 👍
Merci à toi 😊
Bravo. Super bien fait.
addictif et bien réalisé, bravo !
Oh merci. 😊
Bravo m'sieur !
Merci Monsieur Jack!
Un jeu super sympa! perso pour les briques restant en l'air, je trouve cela bien, ca augmente la difficulté pour ajuster son tire, la victoire reste incertaine
Merci beaucoup pour tes retours sur les jeux. 🙂
Great Job! Thanks for your effort!
Looks a really good effort. Original setting as well
Thank you. 🙂
Génial !
Top ! Stone Sling est effectivement mon jeu préféré sur Videopac et une pépite vidéoludique méconnue. Bon choix donc !
Tu n'as plus qu'à l'adapter sur Aquarius ! ;-)
Hé hé, l'Aquarius, je sais pas ce que je vais faire à part l'attacher à une pierre au fond de l'étang, mais vue la machine ce sera encore plus modeste.
Ce jeu a exister sur Videopac ??? Moi je n'ai que KillerBeez sur ma bonne vieille Videopac .
il ne lui manque qu'un adversaire "virtuel" à ce jeu, bien sympa !
Tout réfléchi, oui, pourquoi pas faire un mode 1 joueur VS CPU. Ça peut sembler compliqué mais j'ai pensé à une idée d'IA très simple qui ferait l'affaire, on pourrait même sélectionner la difficulté.
6:00 tu peux dire que le ciel à un valeur et les brique une autre valeur et quand l'obus arrivent dans la zone de la tour au moment ou les briques s'efface de verifier sous la brique si c'est de la brique du sol ou du ciel et faire descendre la brique, comme ça ce n'est pas verifier tout le temps mais juste au moment de la zone d'impact, ça ne se verra presque pas, sympa le jeu, ça me rappel un jeu sur Dragon 32 mais j'ai oublié le nom ?
Pour une seule brique, ce n'est pas très difficile en effet. Mais s'il y a un groupe de plusieurs briques en l'air, c'est tout de suite plus long et compliqué sauf si ce groupe est séparé par une ligne horizontale ininterrompue de ciel, alors dans ce cas on peut effacer tout ce qu'il y a au-dessus. Mais il existe des cas particuliers qui demandent une arborescence de tests pour savoir si c'est vraiment en l'air ou si c'est rattaché à la base mais pas directement par en-dessous. J'ai essayé de lister les cas de figures pour trouver un petit algo de tests qui les règle tous mais je n'y suis pas parvenu. À moins de rallonger pas mal le programme et le ralentir. Autre solution mais qui prendrait du temps aussi, c'est mettre en mémoire des cas de figures préétablis et les comparer avec ce qu'on a à l'écran.
Bon, mais tout réfléchi, je crois que le cas où des briques sont en l'air sans avoir qq part en-dessous au moins une rangée complète de ciel sont rarissimes.
Très sympa bravo 👍🏻 Par contre il n'y a pas de cosinus dans la formule du mouvement d'un objet soumis à la gravitation 😅 On voit que ton boulet décrit un demi cercle, et pas la trajectoire parabolique attendue.
J'ai regardé rapidement le code et je n'ai pas compris la méthode utilisé pour dessiner les tiles dans le jeu (surtout les murs). On dirai que plusieurs charactères ASCII se superpose mais quand je teste dans mon coin, seul le dernier caractère est affiché. Y'a t-il une commande que j'aurai oublié (genre un truc pour pas effacer derrière) ?
Il faut activer la transparence de la couleur du fond (PAPER) et superposer plusieurs caractères de différentes couleurs.
En texte : print chr$(22)+chr$(1) pour l'activer et 0 au lieu de 1 pour le désactiver.
En mode "graphique) avec TAG, remplacer chr$(22) par chr$(23) pour activer la transparence de la couleur de fond GRAPHICS PAPER .
@@retrovynz8712 Merci beaucoup d'avoir précisé comme ça fonctionne :) Je cherchais depuis le début une commande pour activer ce mode par défaut.
Super, je n'ai pas compris le problème de la durée des notes par contre. Si il y un triolet, c'est un tiers d'une noire pour chaque note, une croche un demi, etc.
Pas mal pour l'histoire des valeurs des cosinus stockés, etc.
Salut, le problème était d'avoir une bonne synchronisation des 3 voix. Une voix qui comptabilise davantage de notes (je compte aussi les silences comme des notes) va se décaler dans le temps par rapport aux autres car pour l'ordinateur cela consomme plus de cycles d'horloge d'envoyer 3 notes de 500 ms qu'1 seule de 1500 ms. Alors je mets en pause la file d'attente des notes de la voix qui a reçu en premier toutes ses notes, puis pareil pour la 2e... Pour cela, j'additionne les temps des notes de chaque voix et si le total d'une voix atteint la durée d'une mesure, j'arrête d'envoyer des notes sur la voix (le canal).
Il existe bien de base la possibilité de mettre en attente des canaux dans la commande Sound mais ça n'aurait pas fonctionné car le nombre de notes différe d'un canal à un autre, à moins de rajouter un DATA pour chaque note signifiant d'attendre ou pas, mais ça aurait grossi considérablement les DATA. J'espère que tu me comprendras en me lisant. 😅
J'aurais aussi pu, après réflexion, signer un nombre en data (période ou durée), ainsi un nombre positif demanderait de mettre en pause l'injection de notes, tandis qu'un négatif laisserait continuer. Bref on peut toujours trouver des alternatives.
@@retrovynz8712 Merci pour les explications. Mais pourquoi ne pas avoir contrecarré l'effet en réduisant légèrement la durée des notes pour chaque mesure proportionnellement à leur nombre dans ces mesures et mettre les durées rectifiées directement en data ?
J'ignorais cette histoire de décalage avec les trois voix, je pensais que c'était super synchro le son des 3 voix avec le basic du cpc.
@@roucoupse ma méthode est assez simple, fonctionne bien et a l'avantage de traiter les durées exactes des notes de la partition plutôt que de devoir les bidouiller expérimentalement.
Ce n'est pas que les 3 canaux ne sont pas synchro en Basic... Ils le sont. Faire jouer 3 notes en même temps c'est easy avec les rendez-vous de la commande Sound, mais jouer un morceau polyphonique en entier avec une différence en nombre d'environ 20 notes entre les voix, tout en gardant une interactivité pour choisir le mode de jeu, est une autre paire de manches.
J'ai tenu à chercher et trouver une solution par moi-même. C'est l'intérêt que je trouve à la programmation. Il existe toujours différentes méthodes pour résoudre un problème, si tu en as une autre, ça peut être intéressant que tu la partages en montrant ton code. Le mien est accessible en téléchargeant le jeu.
je m'en vais le tester
Cool. ^^
Salut Vincent
Super jeu de balistique. Ca me fait penser à "Artillerie Duel" quelque part (jeuxvideos8090.free.fr/index.php?Machine=1-35&Page=0&Id_Soft=832)
Pour ce qui est des briques restant en l'air seuls... Je pense qui'l y a un moyen, c'est de triple tester à gauche ou à droite à chaque fois que tu fait un trou...
Exemple:
quand tu es en train de creuser au premier niveau (2 tuiles) :
- si couleur (ypixel et xpixel-8)=bleu alors
=>si (ypixel et xpixel-16)=bleu et (xpixel-8 et ypixel+8) = bleu alors
=>=>Eliminer tuile située en (ypixel et xpixel-8)
Pour le test, je te suggère de faire une soustraction des couleurs de pixel d'avec le bleu. C'est à dire de faire couleur pxl(a)-couleur(bleu). Si au total, tu obtiens 0, alors ya pas d'opération à faire. Les scalaires que je donne ici (8 et 16) sont arbitraires, ils dépendent d'à partir d'où tu fais le test. 2videmment, il faut faire ces tests à gauche puis à droite.
Autre chose, pour l'effacement j'ai l'impression que tu fais ça en faisant 3 affichage basic ? Si tu écrivais une chaine composés de tuiles de ciel en utilisant les CHR$(8), chr$(10) etc... l'effacement serait instantanée.
En tous cas, les astuces que je donne ici sont par raport au Basic des Thomson (qui est très complet), je ne sais pas si l'AmsTRAD a la fonction "POINT(x,y)" je suppose que oui...
J'espère que tu as pigé ce que j'ai voulu dire...
En tous cas c'st une bonne idée d'avoir écrit les valeur des cosinus. Faut savoir que c'est exactement cette technique qui est utilisée pour tous les calculateurs et algorithme de trigo justement
Salut Bruno,
oui, en effet, en testant à gauche et à droite du trou venant d'être fait, si le résultat est du ciel, alors il faut effacer tout ce qu'il y a au-dessus si tant est qu'il y a quelque chose restant en l'air. Dans le doute on peut effacer. Car il y a des cas qui se présentent, comme par exemple un trou fait dans la paroi latérale qui viendrait à rejoindre un trou fait par le dessus, à l'aplomb de l'autre bord.
Quant à l'effacement: je n'ai pas fait une chaîne car je teste à chaque emplacement si c'est du mur et si c'en est j'enlève 1 au capital de points de la tour puis je passe au caractère suivant. Je n'avais pas trouvé ça gênant que ça n'efface pas instantanément, mais je comprends. Merci pour ton intervention.
Sinon, le Basic de l'Amstrad est excellent aussi (Locomotive Basic).
Si tu télécharges tu pourras voir le code. J'ai un peu trop traîné à programmer ce jeu, j'avais hâte d'en terminer pour passer à autre chose, c'est pourquoi tu verras que c'est pas hyper optimisé.