PureBasic

Forums PureBasic
Nous sommes le Ven 18/Oct/2019 4:59

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 22 messages ]  Aller à la page Précédente  1, 2
Auteur Message
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Mer 08/Fév/2017 23:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2090
poshu a écrit:
Pourquoi faire le select?



voici la portion de code concerné :
Code:
RandomizeArray(dd())
            For spr=0 to 3
               de=dd(spr)
               select de
                  case 1
                  x=0:y=0
                  case 2
                  x=100:y=0
                  case 3
                  x=0:y=100
                  case 4
                  x=100 :y=100
               EndSelect
               DisplayTransparentSprite(spr, x, y)
            Next spr

ceci me permet de mettre toujours
le sprite numero xxxx se trouvant dans la case 1 de mon tableau au coordonées : x=0:y=0
le sprite numero xxxx se trouvant dans la case 2 de mon tableau au coordonées : x=100:y=0
etc ....

le "RandomizeArray(dd())" melange l'id des sprites en mettant leur numero dans les case du tableau,au hasard
a chaque fois, jamais au meme endroit dans les cases du tableau

donc a chaque boucle j'affiche le sprite xxx dont la numero se trouve dans la case 1 du tableau toujours a la meme coordonée
c'est la variable "de" qui recupere le numero du sprite a afficher
ce system me garantissait que le meme sprite ne puisse pas etre a plusieurs endroit dans l'affichage
j'affiche toujours les cases 0 a 3 du tableau, mais le contenu des cases, elles ont changées a chaque appel du timer

c'est un choix de conception, rien de plus :)
pis j'aime bien les Select-case-endselect :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Jeu 09/Fév/2017 8:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 31/Juil/2004 22:32
Messages: 1140
Pas de soucis. Bon, le truc important à comprendre, c'est que j'ai rarement la bonne approche quand je commence un projet, donc ce que j'écris ici, c'est ce que je ferai "pour commencer"; rien ne dit que je ne changerai pas des trucs au fur et à mesure.

1) la découpe :
Ca tu l'as, à part que le code est pas au point : on peut partir du principe que si tu copy-paste la même fonction plus de 10 fois, c'est toujours mieux d'écrire une boucle. En l’occurrence, ici, tu aura besoin de deux boucles imbriquées, une pour X et une pour Y. Profites en pour placer les ID des sprites dans un tableau 2D qui a la même taille que ton taquin (4 * 4 sur ton exemple). Aussi, pour que ton taquin fonctionne, il ne faut pas oublier que tu dois supprimer une case dans un coin!

2) Le mélange :
Là, c'est le plus dur, parce que random le tableau peut donner un puzzle insoluble. Idéalement, il faut une boucle de X (où X est la difficulté), dans laquelle tu "simules" des mouvements. En gros : tu prends la case vide, tu prends une case adjacente et tu inverses leur état.

3) l'affichage :
il suffit de réutiliser la même boucle que le découpage, mais dans le sens inverse : une boucle x et une boucle y imbriquées, qui regardent si il y a un sprite dans le tableau, et qui l'affiche le cas échéant.

4) l’interactivité :
à chaque instant, il y a au maximum 4 cases déplaçables : celles qui sont en contact avec la case vide. Si tu détecte un clic sur une de ses cases, tu inverses sa position avec la case vide.

Voila comment je m'y prendrai.

@Zorro
Code:
RandomizeArray(dd())
DisplayTransparentSprite(dd(0), 0, 0)
DisplayTransparentSprite(dd(1), 100, 0)
DisplayTransparentSprite(dd(2), 0, 100)
DisplayTransparentSprite(dd(3), 100, 100)
Autant je suis pour l'utilisation des boucles et des switchs quand c'est utile, autant là ça rajoute vraiment beaucoup de code pour pas grand chose :p


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Jeu 09/Fév/2017 11:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2090
@Poshu
a ma decharge, en principe, souvent lorsque j'apporte une solution
je programme "scolaire"
je ne cherche pas l'optimisation , du moins pas dans un premier temps :)

Merci :)

de plus ....
je ne savais pas que c'etait pour un puzzle , sinon, je n'aurai meme pas procedé ainsi ..
j'aurai fait l'algo de melange en utilisant le meme algo d'echange de piece (piece<>case_vide)...

et comme un film a l'envers .... on part du puzzle fini (image decoupée), et on echange les pieces de l'image pour obtenir un "melange" ce qui aurai meme pu faire l'objet d'une cinematique... a montrer au joueur avant le jeux
le principe est simple , il faut apprendre au sprites a "aimer" le vide.. de sorte que le premier sprite qui "voit" une case vide, il aille dessus :)

pour laisser ensuite l'utilisateur refaire le puzzle ... :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Jeu 09/Fév/2017 18:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2800
Localisation: Klyntar
Merci pour vos conseil / suggestion. J'en prend note.

C'est vrai que le premier topic ne précisé pas qu'il s'agissait d'un jeu de puzzle.

@dobro
Tu verrais donc plus l'image fini qui via un algo se mélange devant le joueur pour ajouté une animation. C'est bien sa ?

Je vous tiens au courant de l'avancement.

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Jeu 09/Fév/2017 19:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
Tu peux même simplement créer une liste chainée qui lierait une datasection;
ça te permettrai de mettre différent puzzle

puzzle1:
datas.i 1,2,3,4,5,6,7,8,9 .... 50,52 pour un puzzle de 52 pièces

Puzzle2:
datas.s 1,2,3 etc 60,61,62 pour le second de 62 pièces

Ainsi tu crée une liste avec le contenu du 1er puzzle et tu la randomize.

Au level 2 tu vides ta liste et tu te sers de Puzzle2:

Simple. :D

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Ven 10/Fév/2017 0:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2090
venom a écrit:
@dobro
Tu verrais donc plus l'image fini qui via un algo se mélange devant le joueur pour ajouté une animation. C'est bien sa ?

Je vous tiens au courant de l'avancement.


oui !

en fait il te faut d'abords coder la découpe de l'image en carré regulier (tuille)

puis l’insertion d'une partie noire ...(en retirant une tuille d'image.... ou en laissant un espace dessous)

et c'est cette tuille noire que tu "deplaces" dans l'image
par echange de sa place avec la tuille de sa destination ....

ce qui du coup melange l'image ...

du coup tu aura l'algo de déplacement d'une tuille (portion) d'image contigue a la partie noire

je parle bien de "Tile Sliding Puzzle"
https://www.youtube.com/watch?v=xZhkJSpbOLE

le deplacement doit etre aléatoire pour le melange
il suffit de decider ou va aller la tuille noire , 'haut,bas,gauche,droite' pour effectuer l'echange avec la tuile image qui va bien
n'oubliant pas d'ajouter un teste de sortie du cadre ....
car si la tuille noire est contre le coté gauche , il faut soit qu'elle (monte ou descende( si c'est possible) ou aille a droite

un simple teste de cadrage suffit :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Afficher sprite aléatoirement
MessagePosté: Ven 10/Fév/2017 6:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2800
Localisation: Klyntar
Merci pour vos conseils a tous, comme d'habitude, il y a l'embarras du choix :) c'est sa qui est cool. Je prend note de vos suggestions. Je vous tiens informer sur l'avancement.

Je risque de vous ré interpellés :lol: :wink:





@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 22 messages ]  Aller à la page Précédente  1, 2

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye