Forum Liberty Basic France

Jeux » Shoot'em up '80 et petits problèmes à résoudre
Le 29/11/2020 à 00h32

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Reprise du message précédent

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. ^^ :( :| :hi

Je donnerai des nouvelle de "l'éffaceur de grille" dans le topic concerné.
____________________
Roro

   
Le 29/11/2020 à 12h46

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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:
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/11/2020 à 14h37

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Le 30/11/2020 à 17h45

Libertynaute Actif

Groupe: Membre

Inscrit le: 17/12/2010
Messages: 124
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
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"

   
Le 30/11/2020 à 23h00

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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 !
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 07/12/2020 à 06h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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.
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 07/12/2020 à 12h10

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Le 09/12/2020 à 18h43

Libertynaute Actif

Groupe: Membre

Inscrit le: 17/12/2010
Messages: 124
une rapide recherche m'a donné sa :
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 !"

   
Le 10/12/2020 à 11h15

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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.
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 11/12/2020 à 06h48

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 11/12/2020 à 11h59

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Le 11/12/2020 à 17h45

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 12/12/2020 à 17h58

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Le 13/12/2020 à 14h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 13/12/2020 à 16h57

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Le 14/12/2020 à 15h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Suite du: 13/12/2020 à 16h57
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

   
Le 16/12/2020 à 12h35

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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 !
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/12/2020 à 15h22

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
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 :
 
     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

   
Le 16/12/2020 à 15h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
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 :
 
  [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

   
Le 17/12/2020 à 00h28

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 741
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
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 17/12/2020 à 13h04

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2457
Citation:
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

   
Jeux » Shoot'em up '80 et petits problèmes à résoudre  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie