Forum Liberty Basic France
• Index
Reprise du message précédent
Citation:
Dommage, je préfère les étoiles au décor "sixties".
Si tu déplace moins en distance il faut accélérer la séquence, enfin...Trouver un compromis; les étoiles se prétaient à un déplacement lent, et en combinant x et y il y a moyen de donner une sensation de vertige (vertige cosmique, of course).
Citation:
C'est pour pouvoir aller plus vite d'une partie du code à une autre, avec les sauts de lignes c'est la course à l'échalote, pardon, à la roulette, ou voir de plus "haut".
Mais les commentaires sont vraiment une grande aide et je regrette de ne pas avoir la patience d'en faire autant dans mes progs, mais je m'améliore, je nomme les blocs.
Tes com' sont vraiment très bien et très clairs, c'est le must
Citation:
Retiens toi.
Je donnerai des nouvelle de "l'éffaceur de grille" dans le topic concerné.
Citation:
je laisse tomber les étoiles
Dommage, je préfère les étoiles au décor "sixties".
Si tu déplace moins en distance il faut accélérer la séquence, enfin...Trouver un compromis; les étoiles se prétaient à un déplacement lent, et en combinant x et y il y a moyen de donner une sensation de vertige (vertige cosmique, of course).
Citation:
Mais qu'as-tu besoin d'enlever les sauts de ligne ?
C'est pour pouvoir aller plus vite d'une partie du code à une autre, avec les sauts de lignes c'est la course à l'échalote, pardon, à la roulette, ou voir de plus "haut".
Mais les commentaires sont vraiment une grande aide et je regrette de ne pas avoir la patience d'en faire autant dans mes progs, mais je m'améliore, je nomme les blocs.
Tes com' sont vraiment très bien et très clairs, c'est le must
Citation:
j'écrirais facilement "si a est égal à deux"Retiens toi.
Retiens toi.




Je donnerai des nouvelle de "l'éffaceur de grille" dans le topic concerné.
____________________
Roro
Roro
Oki. Merci pour le must, et t'inquiète pas pour les étoiles, elles reviendront.
Maintenant je vais décortiquer la gestion des sprites : leur modèle, leur nombre, les conditions de leur apparition, le nombre de coups au but pour les dégommer, leurs armes, le score, il va ya avoir de la réflexion...
Citation:
Pour les curieux, voilà la source d'inspiration, où à vue de nez, les sprites sont en 16x16 pixels, mais là aussi il faudra que je mesure :
Maintenant je vais décortiquer la gestion des sprites : leur modèle, leur nombre, les conditions de leur apparition, le nombre de coups au but pour les dégommer, leurs armes, le score, il va ya avoir de la réflexion...
Citation:
là ça saccade parce qu'on y va par saut de 8 pixels, et en effet, ça semble un peu trop.
Trouvé pas mal de vidéos sur le net : sur certains jeux le décor avance par pas et c'est aussi saccadé que ce que j'ai obtenu ici, sur d'autre le scrolling se fait par bande d'un pixel, mais on voit bien apparaitre à droite et disparaitre à gauche 8 pixels à la fois (je dis 8 parce qu'on fonctionne avec des octets, et que c'est donc probablement 8). Reste à savoir si ces vidéos sont issues d'émulateurs ou du matériel d'origine (dont on trouve encore quelques spécimens en état de marche).Pour les curieux, voilà la source d'inspiration, où à vue de nez, les sprites sont en 16x16 pixels, mais là aussi il faudra que je mesure :

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Houla la !! ça va pas se simplifier alors...
Déjà, faire sans bmp importés, c'est très fort, très très fort. [pouce UP !]
je vais décortiquer la gestion des sprites : leur modèle, leur nombre, les conditions de leur apparition, le nombre de coups au but pour les dégommer, leurs armes, le score, il va ya avoir de la réflexion...
Houla la !! ça va pas se simplifier alors...
Déjà, faire sans bmp importés, c'est très fort, très très fort. [pouce UP !]
____________________
Roro
Roro
J'espère que le scrolling sera vertical.
Autant j'adore le vertical, autant "je déteste" l'horizontal...
Mais c'est mon avis perso... tu fais comme tu veux
Autant j'adore le vertical, autant "je déteste" l'horizontal...
Mais c'est mon avis perso... tu fais comme tu veux
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Pour ma part j'aime bien les deux, mais je ne suis pas spécialement joueur.
J'aimais bien ce jeu-là que je trouvais bien foutu, mais les autres productions avec le paysage qui défile et les vilains ennemis qui nous foncent dessus ne m'ont jamais vraiment convaincu. Mais pour l'époque, avoir ça dans sa chambre branché sur la télé, c'était une sacrée révolution dans les loisirs.
Je reste absent du forum quelques temps, pour continuer mes recherches (en dilettante), car c'est une étape de réflexion qui ne nécessite pas de débuguer.
Bonne nuit !
J'aimais bien ce jeu-là que je trouvais bien foutu, mais les autres productions avec le paysage qui défile et les vilains ennemis qui nous foncent dessus ne m'ont jamais vraiment convaincu. Mais pour l'époque, avoir ça dans sa chambre branché sur la télé, c'était une sacrée révolution dans les loisirs.
Je reste absent du forum quelques temps, pour continuer mes recherches (en dilettante), car c'est une étape de réflexion qui ne nécessite pas de débuguer.
Bonne nuit !
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Un petit rapport d'étape, histoire d'amener quelques traces de vie sur cette discussion (si, si, il y a bien quelqu'un
)
J'ai bien avancé cette semaine sur un générateur de sprite en 8 ou 16 pixels de côté, lequel m'a démontré qu'avant, je n'y connaissais pratiquement rien en JustBasic. La première version n'est pas loin d'être terminée :

Encore quelques bugs à traiter et quelques fonctionnalités à créer, mais ça avance bien, cependant, pas de livraison avant la fin de la semaine, vu le temps qu'il m'a fallu pour en arriver là. Il n'y aurait guère d'intérêt à ce que je publie le listing, car il est hyper-spécialisé et déjà bien long, et on attendra qu'il soit plus complet.
Pouvez-vous confirmer qu'il n'y a pas d'instruction graphique pour capturer les composantes de couleur d'un pixel ? Je me souviens pas en avoir vu, et j'ai dû faire autrement.

J'ai bien avancé cette semaine sur un générateur de sprite en 8 ou 16 pixels de côté, lequel m'a démontré qu'avant, je n'y connaissais pratiquement rien en JustBasic. La première version n'est pas loin d'être terminée :

Encore quelques bugs à traiter et quelques fonctionnalités à créer, mais ça avance bien, cependant, pas de livraison avant la fin de la semaine, vu le temps qu'il m'a fallu pour en arriver là. Il n'y aurait guère d'intérêt à ce que je publie le listing, car il est hyper-spécialisé et déjà bien long, et on attendra qu'il soit plus complet.
Pouvez-vous confirmer qu'il n'y a pas d'instruction graphique pour capturer les composantes de couleur d'un pixel ? Je me souviens pas en avoir vu, et j'ai dû faire autrement.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Pas d'instruction spécifique de JB (ni de LB), et c'est pour ça que quelqu'un d'au-delà des mers a fait une fonction qui fait le job (version "image" de l'effaceur de grille); qui n'est pas pertinente (temps) pour une grande image, mais qui peut l'être pour une petite.
Pouvez-vous confirmer qu'il n'y a pas d'instruction graphique pour capturer les composantes de couleur d'un pixel ? Je me souviens pas en avoir vu, et j'ai dû faire autrement.
Pas d'instruction spécifique de JB (ni de LB), et c'est pour ça que quelqu'un d'au-delà des mers a fait une fonction qui fait le job (version "image" de l'effaceur de grille); qui n'est pas pertinente (temps) pour une grande image, mais qui peut l'être pour une petite.
____________________
Roro
Roro
une rapide recherche m'a donné sa :
Code :
Source : https://justbasiccom.proboards.com/thread/179/complete-commands-lookingfor-specific-functionality
y'a une fonction 'GetPixelValue$ ' dedans...
pas testé , vois si c'est ce que tu recherches ou pas
EDIT je viens également de retrouver une version papier légérement différente datant de 2014.
je posterai à l'occassion.
EDIT 2 http://libertybasic.fr/forum/topic-600.php#m6695
@+
Edité par joan74 Le 10/12/2020 à 09h58
Code :
open "test" for graphics as #gr
#gr "trapclose [quit]"
#gr "home; down; posxy cx cy"
#gr "font times_new_roman italic 24 "
#gr "\x"
#gr "place ";cx+14;" ";cy+7
#gr "font times_new_roman italic 16 bold"
#gr "\B"
#gr "flush"
i = 0
maxXLtr=22
print "maxXLtr=";maxXLtr
print "dim ltr$(maxXLtr) 'Times New Roman italic via GetPixelValue$ "
for y = cy-15 to cy-15+maxXLtr-1
SCAN
i =i+1
print "ltr$(";using("##",i);")="+chr$(34);
for x = cx-2 to cx+28
c$=" "
' if GetPixelValue$(x, y, "#gr")=" 0 0 0" then c$="*"
if GetPixelValue$(x, y, "#gr")<>"255 255 255" then c$="*"
print c$;
next
print chr$(34)
next
wait
[quit]
close #gr
end
'------------------------------
'GetPixelValue$ returns a string with the RGB values of the pixel
'in coordinates x and y in window/graphicbox names handle$ (e.g, "#main.graph")
function GetPixelValue$(x, y, handle$)
'Grab a 1*1 bitmap
#handle$, "getbmp gpv "; x; " "; y; " "; 1; " "; 1
'Save in a bmp file
bmpsave "gpv", "getpvaluetemp.bmp"
'Open the file for string input and get it's full contents
open "getpvaluetemp.bmp" for input as #gpv
s$ = input$(#gpv, lof(#gpv))
close #gpv
'Check if user's display is 32-bit, and read the red-green-blue values
'If display 16 bit, then colors are masked. So some last (3 for red, 2 for green, 3 for blue) bits always 0
'That means that you did not get 255 255 255 for white - (248 252 248) instead. You have to experiment
'otherwise function returns nothing (support for other display types could be added (?))
bpp = asc(mid$(s$, 29, 1))
select case bpp
case 32
red = asc(mid$(s$, 69, 1))
green = asc(mid$(s$, 68, 1))
blue = asc(mid$(s$, 67, 1))
case 24
red = asc(mid$(s$, 57, 1))
green = asc(mid$(s$, 56, 1))
blue = asc(mid$(s$, 55, 1))
case 16
bytes = asc(mid$( s$, 67, 1)) + 256*asc(mid$( s$, 68, 1))
red = (bytes AND 63488) /256 '0xF800
green = (bytes AND 2016) / 32 * 4 '0x7E0
blue = (bytes AND 31) * 8 '0x1F
end select
'concatenate the return value, delete temporary file and free memory
GetPixelValue$ = using("###",red)+using("####",green)+using("####",blue)
kill "getpvaluetemp.bmp"
unloadbmp "gpv"
end function
Source : https://justbasiccom.proboards.com/thread/179/complete-commands-lookingfor-specific-functionality
y'a une fonction 'GetPixelValue$ ' dedans...
pas testé , vois si c'est ce que tu recherches ou pas
EDIT je viens également de retrouver une version papier légérement différente datant de 2014.
je posterai à l'occassion.
EDIT 2 http://libertybasic.fr/forum/topic-600.php#m6695
@+
Edité par joan74 Le 10/12/2020 à 09h58
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Merci pour tes recherches, je ne m'étais pas aventuré au delà de la constatation de l'absence de fonction JB équivalente.
J'ai déjà contourné le problème, car j'avais tout ce qu'il fallait sous la main pour retrouver indirectement la couleur, et que ce n'était pas compliqué (un index de tableau à convertir en coordonnées x et y).
La fonction est plus complète ici avec tes EDITs, pourquoi ne pas copier ton post en dessous de la discussion getpixelvalue.php ? Je viens d'y mettre une traduction.
J'ai déjà contourné le problème, car j'avais tout ce qu'il fallait sous la main pour retrouver indirectement la couleur, et que ce n'était pas compliqué (un index de tableau à convertir en coordonnées x et y).
La fonction est plus complète ici avec tes EDITs, pourquoi ne pas copier ton post en dessous de la discussion getpixelvalue.php ? Je viens d'y mettre une traduction.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Hello tous !
Le générateur de sprites dans sa première version opérationnelle : genersprite001-02.bas
Je le trouve trop long pour le mettre dans une balise code=VB alors je l'ai mis en ZIP. C'est dommage, car j'aime bien fournir des listings lisibles directement dans la discussion, mais il n'est pas commode non plus de jouer avec les ascenseurs et il vaut mieux l'ouvrir dans l'éditeur.
Et je vais relâcher un peu la pression, car ça a été un gros boulot et j'en oublie facilement qu'il y a autre chose dans la vie.
On choisit la taille du sprite, 8 ou 16 pixels de côté, la palette de couleurs, un clic gauche dans la grille pour allumer un pixel avec la couleur sélectionnée, un clic droit pour l'éteindre. On peut enregistrer le sprite sur le disque dur, et faire un copier-coller du texteditor vers l'éditeur JB/LB. Les autres fonctions ne sont pas encore implémentées, et certaines fonctions existantes seront complétées
Le générateur de sprites dans sa première version opérationnelle : genersprite001-02.bas
Je le trouve trop long pour le mettre dans une balise code=VB alors je l'ai mis en ZIP. C'est dommage, car j'aime bien fournir des listings lisibles directement dans la discussion, mais il n'est pas commode non plus de jouer avec les ascenseurs et il vaut mieux l'ouvrir dans l'éditeur.
Et je vais relâcher un peu la pression, car ça a été un gros boulot et j'en oublie facilement qu'il y a autre chose dans la vie.
On choisit la taille du sprite, 8 ou 16 pixels de côté, la palette de couleurs, un clic gauche dans la grille pour allumer un pixel avec la couleur sélectionnée, un clic droit pour l'éteindre. On peut enregistrer le sprite sur le disque dur, et faire un copier-coller du texteditor vers l'éditeur JB/LB. Les autres fonctions ne sont pas encore implémentées, et certaines fonctions existantes seront complétées
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Le zip est le pain blanc du codeur.
Vu qu'il y a déjà un lien de ce fil dans la bibliothèque, et que ton zip a un nom explicite, je mets le lien direct du zip
EDIT: A quoi sert la palette "test" ?
alors je l'ai mis en ZIP
Le zip est le pain blanc du codeur.
Vu qu'il y a déjà un lien de ce fil dans la bibliothèque, et que ton zip a un nom explicite, je mets le lien direct du zip
EDIT: A quoi sert la palette "test" ?
____________________
Roro
Roro
Bin... à tester 
A terme, il y aura plusieurs palettes disponibles, certaines codées en dur dans le programme, d'autres qu'on pourra ajouter sous forme de fichier.
Le but est de créer les sprites de nos premières machines en s'inspirant le plus possible du système qui les a vu naitre, et d'un standard à l'autre, ou au sein d'un même standard, il peut y avoir des palettes différentes. Là je me suis ancré sur du MSX, mais un système de palette évolutif permettra d'utiliser d'autres standards.
Je te l'avoue, c'est un peu complexificatoire, tout comme la sortie texte, qui donne ici le codage du sprite 16 pixels tel que l'attend le standard MSX, (avec "data" en moins et valeur chaine et non numérique) mais je reste "dans l'esprit de"... (Au fou !))
Edité par Christophe Le 11/12/2020 à 17h46

A terme, il y aura plusieurs palettes disponibles, certaines codées en dur dans le programme, d'autres qu'on pourra ajouter sous forme de fichier.
Le but est de créer les sprites de nos premières machines en s'inspirant le plus possible du système qui les a vu naitre, et d'un standard à l'autre, ou au sein d'un même standard, il peut y avoir des palettes différentes. Là je me suis ancré sur du MSX, mais un système de palette évolutif permettra d'utiliser d'autres standards.
Je te l'avoue, c'est un peu complexificatoire, tout comme la sortie texte, qui donne ici le codage du sprite 16 pixels tel que l'attend le standard MSX, (avec "data" en moins et valeur chaine et non numérique) mais je reste "dans l'esprit de"... (Au fou !))

Edité par Christophe Le 11/12/2020 à 17h46
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Une fenêtre subsidiaire pour régler la couleur (à la main) avec stockage dans une listbox (avec un commentaire pour s'y retrouver): http://libertybasic.fr/forum/topic-508+choisir-une-couleur.php
plusieurs palettes disponibles
Une fenêtre subsidiaire pour régler la couleur (à la main) avec stockage dans une listbox (avec un commentaire pour s'y retrouver): http://libertybasic.fr/forum/topic-508+choisir-une-couleur.php
____________________
Roro
Roro
Apparemment beaucoup de boutons, mais le concept fonctionne, et se révèle à l'usage aussi commode, voir plus, qu'une habituelle glissière qu'on estimerait, à priori, plus adaptée. Je pourrais pousser le vice jusqu'à proposer la glissière en plus 
Je n'ai pas encore choisi comment modifier les couleurs des palettes, mais c'est prévu par un clic droit dans le pavé de couleur de la palette, et le résultat sera sauvé dans une nouvelle palette au nom choisi par l'utilisateur.
Autrement j'avance gentiment sur le génèresprite, et je n'oublie pas qu'il est juste un outil, et pas une fin en soi

Je n'ai pas encore choisi comment modifier les couleurs des palettes, mais c'est prévu par un clic droit dans le pavé de couleur de la palette, et le résultat sera sauvé dans une nouvelle palette au nom choisi par l'utilisateur.
Autrement j'avance gentiment sur le génèresprite, et je n'oublie pas qu'il est juste un outil, et pas une fin en soi
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Les glissières c'est pas pratique et pas précis (256 pas), sauf à ajouter des boutons "pas à pas" de chaque cotés; trois couleurs = 6 boutons +3 graphicbox; mais bon, pour le fun alors.
Si tu veux un Slider tout fait j'en ai un (et même plusieurs).
Citation:
C'est bien les outils.
qu'une habituelle glissière
Les glissières c'est pas pratique et pas précis (256 pas), sauf à ajouter des boutons "pas à pas" de chaque cotés; trois couleurs = 6 boutons +3 graphicbox; mais bon, pour le fun alors.
Si tu veux un Slider tout fait j'en ai un (et même plusieurs).
Citation:
je n'oublie pas qu'il est juste un outil
C'est bien les outils.
____________________
Roro
Roro
Suite du: 13/12/2020 à 16h57
Plus simple qu'un slider et aussi efficace j'ai fait ça:
Code VB :
Plus simple qu'un slider et aussi efficace j'ai fait ça:
Code VB :
NOMAINWIN mapw=500: maph=400 WindowWidth =500: WindowHeight =150 UpperLeftX = 10: UpperLeftY = 20 GRAPHICBOX #w.r, 20, 20, 255, 20 GRAPHICBOX #w.g, 20, 50, 255, 20 GRAPHICBOX #w.b, 20, 80, 255, 20 GRAPHICBOX #w.m 280, 20, 200, 80 OPEN "......................Clic on the Bars" FOR window_nf AS #w #w, "TRAPCLOSE [closebars]" #w.m, "down;fill black": #w.r, "down;fill red" #w.g, "down;fill green": #w.b, "down;fill blue" #w.r, "when leftButtonDown [red]": #w.g, "when leftButtonDown [green]" #w.b, "when leftButtonDown [blue]" wait [red] r=MouseX: #w.r, "fill red" #w.r, "color black;size 5": #w.r, "set ";r;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] print col$ wait [green] g=MouseX: #w.g, "fill green" #w.g, "color black;size 5": #w.g, "set ";g;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] wait [blue] b=MouseX: #w.b, "fill blue" #w.b, "color black;size 5": #w.b, "set ";b;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] wait [disp] #w.m, "fill ";" ";col$ wait [closebars] CLOSE #w END
____________________
Roro
Roro
Je viens de voir que je n'ai pas essayé ta dernière version, je regarderai tout à l'heure.
Des nouvelles de l'expédition :
Deux semaines après le début de notre descente dans le cratère du Snæfellsjökull, nous faillîmes renoncer. D'impasses en impasses, nous nous perdions dans l'entrelacs des couloirs de lave, et, nos lampes faiblissant, se posait la question de remonter à la surface, si nous le pouvions encore. Soudain, alors que tout semblait perdu, nous vîmes, au fond d'une galerie, une lueur diffuse. En proie à l’exaltation, nous pressâmes le pas, et nous découvrîmes... Bon, y'a longtemps que je n'ai pas lu "Voyage au Centre de la Terre", mais c'est juste pour faire un parallèle avec la programmation en amateur.
La première mouture du générateur de sprite était opérationnelle. En voulant ajouter l'enregistrement de la matrice sur le disque, il semblait plus facile de travailler sur une nouvelle organisation de celle-ci, mais cela a nécessité une mise à jour de sous-programmes interdépendants les uns des autres. Arriva alors ce qui finit par arriver : plus rien ne fonctionnait, et plus personne, d'un bout à l'autre du royaume, ne comprenait ce qui se passait.
On a donc repris pas à pas le listing, en le réécrivant, et en réintégrant dans le programme principal, quelques codes précédemment placés dans les sous-programmes. Et, peu à peu, des pans entiers du programme redevenaient fonctionnels.
Mieux, même, l'exécution était plus rapide, d'où la question du jour : un GOSUB ajoute-t-il un temps d'exécution non négligeable, ou avais-je, par étourderie, appelé plusieurs fois le même sous-programme à chaque tour de boucle ? (il suffit de placer le GOSUB dans le mauvais FOR/NEXT, par exemple, et dans les boucles imbriquées, c'est vite fait).
Maintenant il y a beaucoup de code redondant, mais le générateur de sprites fonctionne à nouveau, avec sa nouvelle organisation de matrice. On peut choisir la dimension du sprite en 8 ou 16 pixels de large et la palette de couleurs, sauver le sprite sur le disque, charger et sauver la matrice qui lui a donné naissance, il n'y a plus qu'à programmer les paramètres utilisateurs, rédiger l'aide, et créer le code définitif qui génèrera les lignes de data à coller dans le shoot'em up. Il y a encore quelques incertitudes quant au fonctionnement souhaitable des palettes.
Mais quand ce sera fini, je mettrais à l'abri la version fonctionnelle, et je travaillerais sur une copie pour étudier le bien-fondé de placer le code redondant en sous-programme. Pas facile, l'apprentissage
Mais ce sera pour une autre fois, parce que là, je sature...
Et bon après midi !
Des nouvelles de l'expédition :
Deux semaines après le début de notre descente dans le cratère du Snæfellsjökull, nous faillîmes renoncer. D'impasses en impasses, nous nous perdions dans l'entrelacs des couloirs de lave, et, nos lampes faiblissant, se posait la question de remonter à la surface, si nous le pouvions encore. Soudain, alors que tout semblait perdu, nous vîmes, au fond d'une galerie, une lueur diffuse. En proie à l’exaltation, nous pressâmes le pas, et nous découvrîmes... Bon, y'a longtemps que je n'ai pas lu "Voyage au Centre de la Terre", mais c'est juste pour faire un parallèle avec la programmation en amateur.
La première mouture du générateur de sprite était opérationnelle. En voulant ajouter l'enregistrement de la matrice sur le disque, il semblait plus facile de travailler sur une nouvelle organisation de celle-ci, mais cela a nécessité une mise à jour de sous-programmes interdépendants les uns des autres. Arriva alors ce qui finit par arriver : plus rien ne fonctionnait, et plus personne, d'un bout à l'autre du royaume, ne comprenait ce qui se passait.
On a donc repris pas à pas le listing, en le réécrivant, et en réintégrant dans le programme principal, quelques codes précédemment placés dans les sous-programmes. Et, peu à peu, des pans entiers du programme redevenaient fonctionnels.
Mieux, même, l'exécution était plus rapide, d'où la question du jour : un GOSUB ajoute-t-il un temps d'exécution non négligeable, ou avais-je, par étourderie, appelé plusieurs fois le même sous-programme à chaque tour de boucle ? (il suffit de placer le GOSUB dans le mauvais FOR/NEXT, par exemple, et dans les boucles imbriquées, c'est vite fait).
Maintenant il y a beaucoup de code redondant, mais le générateur de sprites fonctionne à nouveau, avec sa nouvelle organisation de matrice. On peut choisir la dimension du sprite en 8 ou 16 pixels de large et la palette de couleurs, sauver le sprite sur le disque, charger et sauver la matrice qui lui a donné naissance, il n'y a plus qu'à programmer les paramètres utilisateurs, rédiger l'aide, et créer le code définitif qui génèrera les lignes de data à coller dans le shoot'em up. Il y a encore quelques incertitudes quant au fonctionnement souhaitable des palettes.
Mais quand ce sera fini, je mettrais à l'abri la version fonctionnelle, et je travaillerais sur une copie pour étudier le bien-fondé de placer le code redondant en sous-programme. Pas facile, l'apprentissage

Mais ce sera pour une autre fois, parce que là, je sature...
Et bon après midi !
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
sais-tu que tu a un talent d'écrivain ?
De mon côté j'ai ajouter la mise en palette avec l'effacement (tout au clic gauche)
Suite à un caprice du word$(), j'ai dû fait un tableau pour l'effacement ; par chance les tableaux sont gratuits.
12 couleurs à la palette ne soyons pas mesquins.
Il suffit de sauver le tableau pal$() dans un fichier et le tour est joué.
Facile à ré-afficher puisque les coordonnées d'affichage sont embarquées avec
Code VB :
De mon côté j'ai ajouter la mise en palette avec l'effacement (tout au clic gauche)
Suite à un caprice du word$(), j'ai dû fait un tableau pour l'effacement ; par chance les tableaux sont gratuits.
12 couleurs à la palette ne soyons pas mesquins.
Il suffit de sauver le tableau pal$() dans un fichier et le tour est joué.
Facile à ré-afficher puisque les coordonnées d'affichage sont embarquées avec
Code VB :
NOMAINWIN WindowWidth =500: WindowHeight =180 UpperLeftX = 10: UpperLeftY = 20 GRAPHICBOX #w.r, 20, 20, 255, 20 GRAPHICBOX #w.g, 20, 50, 255, 20 GRAPHICBOX #w.b, 20, 80, 255, 20 GRAPHICBOX #w.m 280, 20, 200, 80 BUTTON #w.s, "Save color", [savecol], UL, 330, 110, 80, 25 OPEN "......................Clic in the Bars" FOR window_nf AS #w #w, "TRAPCLOSE [closebars]" #w.m, "down;fill black": #w.r, "down;fill red" #w.g, "down;fill green": #w.b, "down;fill blue" #w.r, "when leftButtonDown [red]": #w.g, "when leftButtonDown [green]" #w.b, "when leftButtonDown [blue]" #w.m, "flush": #w.g, "flush": #w.r, "flush": #w.b, "flush" wait [red] r=MouseX: #w.r, "fill red" #w.r, "color black;size 5": #w.r, "set ";r;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] wait [green] g=MouseX: #w.g, "fill green" #w.g, "color black;size 5": #w.g, "set ";g;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] wait [blue] b=MouseX: #w.b, "fill blue" #w.b, "color black;size 5": #w.b, "set ";b;" ";"8" col$=str$(r)+" "+str$(g)+" "+str$(b): gosub [disp] wait [disp] #w.m, "fill ";" ";col$: #w.m, "flush" wait [savecol] '----------------------SAVE COULEUR en palette----------------------- if openp=1 then [pass] dim pal$(13): n=0: dim eff(13) for a=1 to 12 x=x+50: y=50 if x > 310 then x=x-300: flaga=1 if flaga=1 then y=y+50 pal$(a)=str$(x)+" "+str$(y) next a mapw=400: maph=225: n=0 WindowWidth=mapw+18: WindowHeight=maph+47 UpperLeftX=570: UpperLeftY=5 ' BUTTON #p.savpal, "Save palette", [savepal], UL, 10, 20, 80, 20 Graphicbox #p.p, 5, 5, mapw, maph open "Palette" FOR WINDOW AS #p openp=1: #p, "trapclose [quitp]" #p.p, "when leftButtonDown [del]" #p.p, "down;fill black;color white;backcolor black" [pass] [ret] '------------affichage if n > 12 then wait #p.p, "color ";" ";col$: #p.p, "backcolor ";" ";col$ for b=1 to 12 if eff(b)=1 then oldn=n: flagn=1: n=b: goto [vu] next b n=n+1 [vu] pal$(n)=pal$(n)+" "+col$ x=val(word$(pal$(n),1)): y=val(word$(pal$(n),2)) #p.p, "place ";x;" ";y: #p.p, "boxfilled ";x+40;" ";y+40 eff(n)=0 if flagn=1 then n=oldn: flagn=0 #p.p, "flush;discard" wait [del] dx=MouseX: dy=MouseY if dy > 50 and dy < 90 then if dx > 50 and dx < 90 then pos=1 if dx > 100 and dx < 140 then pos=2 if dx > 150 and dx < 190 then pos=3 if dx > 200 and dx < 240 then pos=4 if dx > 250 and dx < 290 then pos=5 if dx > 300 and dx < 340 then pos=6 end if if dy > 100 and dy < 140 then if dx > 50 and dx < 90 then pos=7 if dx > 100 and dx < 140 then pos=8 if dx > 150 and dx < 190 then pos=9 if dx > 200 and dx < 240 then pos=10 if dx > 250 and dx < 290 then pos=11 if dx > 300 and dx < 340 then pos=12 end if #p.p, "color black;backcolor black" dx=val(word$(pal$(pos),1)): dy=val(word$(pal$(pos),2)) #p.p, "place ";dx;" ";dy: #p.p, "boxfilled ";dx+40;" ";dy+40 pal$(pos)=word$(pal$(pos),1)+" "+word$(pal$(pos),2) eff(pos)=1 wait [quitp] openp=0: close #p wait [closebars] if openp=1 then openp=0: close #p CLOSE #w END
____________________
Roro
Roro
Suite du: 15h22
Pour sauver en dossier séparé il faut que le dossier pré-existe).
Cuidado que "filename$" c'est le chemin complet.
Code VB :
Pour sauver en dossier séparé il faut que le dossier pré-existe).
Cuidado que "filename$" c'est le chemin complet.
Code VB :
[savepal] filedialog "Save As...", "palettes\***", fileName$ if fileName$="" then wait for x=len(fileName$) to 1 step -1 if mid$(fileName$,x,1)="\" then xf=x:exit for next x file$=right$(fileName$,len(fileName$)-xf) open "palettes\";file$ for output as #f for xx=1 to 12 print #f, pal$(xx) next xx close #f
____________________
Roro
Roro
C'est franchement pas bête, et il y aura un dossier "palette", qui plus est, créé automatiquement s'il venait à être absent. Peut-être que je repiquerai le code des barres de couleur 
Par contre il faut encore que je réfléchisse au mécanisme de choix des palettes :
1. il faudrait verrouiller le choix des palettes dès qu'un pixel est allumé dans la matrice, car si on veut faire une série de sprites pour un mode donné de tel ou tel ordi, il ne faudrait pas changer de palette entre-temps.
2. quand on charge une matrice, on a aucune garantie d'afficher la palette qu'on utilisait la dernière fois qu'on a travaillé sur cette matrice. Mettre le nom de la palette dans le fichier de la matrice ne met pas à l'abri d'une palette modifiée entre temps, ou supprimée, donc on contrôlera que les couleurs de la matrices sont bien celles contenues dans la palette, et si ce n'est pas le cas, on créée une nouvelle palette reprenant les couleurs de la matrice, ça ne devrait pas être sorcier à faire.
Mais c'est pas encore fixé... je peux aussi simplifier le programme en comptant sur l'utilisateur pour utiliser les bonnes couleurs.
Pour le moment j'en suis là, et vu l'heure, on verra la suite plus tard :
generesprite001-04_1 (édit du 17/12 pour réparer l'oubli du point entre le nom du bitmap et son extension)
Ca a l'air fonctionnel avec mon wine, mais un essai avec mon vrai xp met en évidence un "system primitive failed" qui se produit de temps en temps, souvent à la première tentative. Lorsque je charge une matrice, il y a en fond un panneau coloré qui reprend la forme de la fenêtre de choix des matrices, pourtant fermée. Ça fait un bail que mon xp n'a pas tourné, et le programme travaille à partir d'une clef usb, s'il y a problème j'espère qu'il vient de la clef et pas de l'ordi. Comment ça marche par chez toi(vous) ?
Autrement, quand ça fonctionne, le programme vérifie et créée au besoin les dossiers "matrices" et "sprites" dans lesquels j'ai laissé quelques exemples. Ce que j'appelle matrice est la grille principale dans laquelle on dessine le sprite, on peut la charger, la sauver, l'effacer, changer son nombre de cases en 8 ou 16 pixels de côté. Quand le résultat est satisfaisant, un clic sur "enregistrer sprite" stocke le sprite dans le dossier ad'hoc.
Et pour ce qui est de mes talents littéraires, on m'a suggéré d'écrire un bouquin, et je ne sais pas comment faire : ça va encore être un truc pondu à la dernière minute pendant des journées de quinze heures plus les activités professionnelles. C'est pour quelqu'un, c'est pas pour publier, et ça rappellera les années collèges, où je terminais les rédacs à deux heures du mat' pour les rendre au cours de français de huit heures. Travailler dans l'urgence a un je-ne-sais-quoi de palpitant, peut-être parce qu'on peut se ramasser
Edité par Christophe Le 17/12/2020 à 21h42

Par contre il faut encore que je réfléchisse au mécanisme de choix des palettes :
1. il faudrait verrouiller le choix des palettes dès qu'un pixel est allumé dans la matrice, car si on veut faire une série de sprites pour un mode donné de tel ou tel ordi, il ne faudrait pas changer de palette entre-temps.
2. quand on charge une matrice, on a aucune garantie d'afficher la palette qu'on utilisait la dernière fois qu'on a travaillé sur cette matrice. Mettre le nom de la palette dans le fichier de la matrice ne met pas à l'abri d'une palette modifiée entre temps, ou supprimée, donc on contrôlera que les couleurs de la matrices sont bien celles contenues dans la palette, et si ce n'est pas le cas, on créée une nouvelle palette reprenant les couleurs de la matrice, ça ne devrait pas être sorcier à faire.
Mais c'est pas encore fixé... je peux aussi simplifier le programme en comptant sur l'utilisateur pour utiliser les bonnes couleurs.
Pour le moment j'en suis là, et vu l'heure, on verra la suite plus tard :
generesprite001-04_1 (édit du 17/12 pour réparer l'oubli du point entre le nom du bitmap et son extension)
Ca a l'air fonctionnel avec mon wine, mais un essai avec mon vrai xp met en évidence un "system primitive failed" qui se produit de temps en temps, souvent à la première tentative. Lorsque je charge une matrice, il y a en fond un panneau coloré qui reprend la forme de la fenêtre de choix des matrices, pourtant fermée. Ça fait un bail que mon xp n'a pas tourné, et le programme travaille à partir d'une clef usb, s'il y a problème j'espère qu'il vient de la clef et pas de l'ordi. Comment ça marche par chez toi(vous) ?
Autrement, quand ça fonctionne, le programme vérifie et créée au besoin les dossiers "matrices" et "sprites" dans lesquels j'ai laissé quelques exemples. Ce que j'appelle matrice est la grille principale dans laquelle on dessine le sprite, on peut la charger, la sauver, l'effacer, changer son nombre de cases en 8 ou 16 pixels de côté. Quand le résultat est satisfaisant, un clic sur "enregistrer sprite" stocke le sprite dans le dossier ad'hoc.
Et pour ce qui est de mes talents littéraires, on m'a suggéré d'écrire un bouquin, et je ne sais pas comment faire : ça va encore être un truc pondu à la dernière minute pendant des journées de quinze heures plus les activités professionnelles. C'est pour quelqu'un, c'est pas pour publier, et ça rappellera les années collèges, où je terminais les rédacs à deux heures du mat' pour les rendre au cours de français de huit heures. Travailler dans l'urgence a un je-ne-sais-quoi de palpitant, peut-être parce qu'on peut se ramasser

Edité par Christophe Le 17/12/2020 à 21h42
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Pour ça je ne vois que deux solutions:
- Mettre un indice dans le nom du fichier "Matrice", et le même pour le nom du fichier "Palette".
- Intégrer la palette au fichier "Matrice".
Citation:
Pour "Geler" la palette, on peut mettre un flag (drapeau) dans le fichier de la palette qui mettra un: "!disable" sur le bouton d'enregistrement. (mais c'est sans retour).
Citation:
Il sera aussi facile de faire un système de lecture/reproduction des couleur présentes dans la matrice. (il y a plusieurs façons d'écorcher un chat [USA imported])
Citation:
En général on fait ça quand on est retiré des "affaires".
Citation:
On a confiance.
EDIT: J'ai testé la nouvelle mouture : --> "Primitive failed" chez moi aussi
Je vais essayer de trouver l'os qui coince la machine à saucisse.
re-EDIT: En mettant un wait avant la création de la fenêtre on peut présumer que le "primitive failed" se situe dans le mic-mac préalable que tu fais avec les dossiers (existe, n'existe pas, existe peut-être, dossier fantôme, dossier fantasmagorique, autre dossier...)
re-re-edit: Confirmation; j'ai viré tout ton mic-mac et ça marche.
Faut pas déconner, les dossiers ils y sont ou ils n'y sont pas; tu imagine un soft dans lequel il manquerait la moitié des dossiers ?
re-re-re édit: Ta procédure de chargement des palettes est pour le moins "originale"; un "filedialog" dans le dossier serait tellement plus simple; mais bon, si c'est pour le plaisir d'ouvrir des fenêtres, on peut comprendre.
Mais y mettre un bouton de fermeture !? pourquoi faire simple quand on peut faire compliqué..
Toi tu aime trop les complications, tu ne serais pas horloger ?
quand on charge une matrice, on a aucune garantie d'afficher la palette qu'on utilisait la dernière fois
Pour ça je ne vois que deux solutions:
- Mettre un indice dans le nom du fichier "Matrice", et le même pour le nom du fichier "Palette".
- Intégrer la palette au fichier "Matrice".
Citation:
palette modifiée entre temps
Pour "Geler" la palette, on peut mettre un flag (drapeau) dans le fichier de la palette qui mettra un: "!disable" sur le bouton d'enregistrement. (mais c'est sans retour).
Citation:
on créée une nouvelle palette reprenant les couleurs de la matrice
Il sera aussi facile de faire un système de lecture/reproduction des couleur présentes dans la matrice. (il y a plusieurs façons d'écorcher un chat [USA imported])
Citation:
on m'a suggéré d'écrire un bouquin
En général on fait ça quand on est retiré des "affaires".
Citation:
je ne sais pas comment
On a confiance.
EDIT: J'ai testé la nouvelle mouture : --> "Primitive failed" chez moi aussi
Je vais essayer de trouver l'os qui coince la machine à saucisse.
re-EDIT: En mettant un wait avant la création de la fenêtre on peut présumer que le "primitive failed" se situe dans le mic-mac préalable que tu fais avec les dossiers (existe, n'existe pas, existe peut-être, dossier fantôme, dossier fantasmagorique, autre dossier...)
re-re-edit: Confirmation; j'ai viré tout ton mic-mac et ça marche.
Faut pas déconner, les dossiers ils y sont ou ils n'y sont pas; tu imagine un soft dans lequel il manquerait la moitié des dossiers ?
re-re-re édit: Ta procédure de chargement des palettes est pour le moins "originale"; un "filedialog" dans le dossier serait tellement plus simple; mais bon, si c'est pour le plaisir d'ouvrir des fenêtres, on peut comprendre.
Mais y mettre un bouton de fermeture !? pourquoi faire simple quand on peut faire compliqué..
Toi tu aime trop les complications, tu ne serais pas horloger ?
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie