Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Problème de décor
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Problème de décor

Posté le 21/02/2016 11:58

Bonjour,
Cela fait un bon moment que je programme et je me suis lancé dans le développement d'un petit jeu. Mais je suis coincé, j'aimerais savoir comment faire pour rendre tout ses caractères solides (pour le personnage ne puisse pas passer à travers).
Voilà l'image du décor :

Merci d'avance...


Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 21/02/2016 16:06 | #


Dark elias a écrit :
Je pense qu'au lieu de mettre ≠ 0 il vaut mieux mettre <1 comme ça on peut mettre un événement-1

Ben c'est pas le but. On va se contenter des événements 2, 3, 4...
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark elias Hors ligne Membre Points: 286 Défis: 2 Message

Citer : Posté le 21/02/2016 16:07 | #


Bah si ! Un truc ou on peut passer dessus mais où il se passe qqch !!
Genre une herbe dans pokemon
Venez soutenir mes projets !!!
Merci
Les voleurs d'esprit : Jouez à Pokemon..... AVEC DES HUMAINS !
Les guerriers sombres: Venez tuer des monstres pour déjouer un très gros complot dans un jeu en basic mais très puissant
The Legend Of Link un add-in où on contrôlera des monstres....

Si vous avez des sprites 12*16 de monstres de zelda, vous êtes les bienvenus (Par MP )
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 21/02/2016 16:22 | #


Ben oui mais faudrait le combiner avec le sprite d'herbe si la matrice fait la map, donc de toute façon les événements positifs suffiront à couvrir l'ensemble de la map, non ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 17:08 | #


Que dites-vous de ce décor ?
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 21/02/2016 17:10 | #


Ça a l'air pas mal
Après il faudrait détailler, s'il y en a, le fonctionnement de chaque élément. Ou juste la représentation, c'est pas évident (Je vois les # comme des portes, les carrés comme des murs, mais le reste est plus difficile à repérer).
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 17:11 | #


Oui je préciserais mais je voulais juste votre avis...

Ajouté le 21/02/2016 à 18:37 :
Ca y est, le programme marche mais il est très lourd est malgré cette commande :
Do
Getkey->G
LpWhile Not G

Mon getkey est très lent, y aurait-il un moyen de l'optimiser ?
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 21/02/2016 18:54 | #


Si ta boucle est lente, c'est plutôt le code autour qu'il faut optimiser. Regarde si tu peux condenser les conditions et utiliser des opérations logiques.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Amael Hors ligne Membre Points: 253 Défis: 9 Message

Citer : Posté le 21/02/2016 18:55 | #


C'est marrant, moi je suis obligé de ralentir mes boucles de menu. Le curseur se déplace trop vite sinon.
Si c'est possible, c'est fait; si c'est impossible, cela se fera.

Mes programmes (À noter sous peine de ban )
Notez les !
Monopoly bank Pratique si vous perdez les billets
Remplissez facilement vos listes avec Statistiques
Et des conversions des unités du système métrique.
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 18:56 | #


C'est fait, le personnage met beaucoup de temps à réagir.
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 21/02/2016 19:20 | #


Exagyde a écrit :
Ca y est, le programme marche mais il est très lourd

Tu as ajouté quoi de plus par rapport au code que je t'ai donné ?
Parce que c'est sensé être très réactif en faisant comme ça.
Tweaks : ||||| ||||
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 19:41 | #


Eh bien, il y a tellement de bloc dans la matrice que cela rend le getkey lent.
Il faudrait le rendre plus sensible. Sinon, Totoyo, j'utilise le même moteur de déplacement que dans ton tuto en mode texte.
Ou alors, c'est que j'ai placé ma boucle au mauvaise endroit ?
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 21/02/2016 19:58 | #


Il n'y a pas de rapport entre la taille de ta matrice et ton getkey normalement. Tu peux nous donner ton code ?
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 20:14 | # | Fichier joint


Voila le code, attention les yeux : programme en fichier joint car le code est très long...
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 21/02/2016 20:58 | # | Fichier joint


Tu m'étonnes que ce soit lent

Déjà tu as énormément compliqué les conditions avec le Getkey !
Tu ne dois rien avoir dans la boucle du Getkey :
//La boucle :
Do
Getkey→G
LpWhile Not G
//Et les conditions juste après :
G=27⇒X≠20⇒X+1→X
G=28⇒Y≠2⇒Y-1→Y
G=37⇒Y≠6⇒Y+1→Y
G=38⇒X≠2⇒X-1→X
Et tes conditions qui sont après (G=27 And Mat A[Y,X]=1⇒X-1→X etc...) sont inutiles.
Tu as juste besoin de faire ça :
If Mat A[Y,X]=1
Then C→X
D→Y
IfEnd

Car on n'a pas besoin de savoir dans quelle direction le joueur est allé. Du moment qu'il se retrouve dans un mur on annule le déplacement en récupérant les valeurs de C et D.


Ensuite ce qui ralenti vraiment ton jeu c'est qu'à chaque déplacement tu réaffiches TOUTE la carte. Pourquoi ?
En fait tu dois afficher la carte avant de lancer la boucle principale.
Et tu peux largement simplifier tout ce que tu as fait en procédant comme ça :
{7,21->Dim Mat A
2→Mat A[2,7
//Etc... Tu prépares les valeurs de ta matrice

//Puis :
For 1→X To 21
For 1→Y To 7
Mat A[Y,X]→A
A=1⇒Locate X,Y,"■"
A=2⇒Locate X,Y,"#"
//Etc... pour tous les types de blocs
Next
Next

En fait une fois que tu as créer ta matrice ce code va ses cases une à une (avec les deux boucles for) et afficher le bloc correspondant.
(Si la case (x,y) de la matrice vaut 1, on affiche "■" en (x,y), si elle vaut 2 on affiche "#" etc...)


Donc après ce bout de code ta carte sera affichée.
Ensuite tout ce que tu as à faire entre chaque déplacement c'est d'effacer l'endroit où était le joueur avant, puis de le réafficher au nouvel endroit. Rien de plus.
//On réaffiche le bloc où se trouvait le joueur juste avant :
Mat A[D,C]→A
A=1⇒Locate D,C,"■"
A=2⇒Locate D,C,"#"
Etc...
//Puis on affiche le joueur aux nouvelles coordonnées :
Locate X,Y,"θ"



(Pour ceux qui vont me dire d'utiliser StrMid, je sais mais je veux pas compliquer pour le moment )




Edit :
Voilà, je t'ai fait un programme pour te montrer comment faire ça.

J'ai quand même simplifié ça :
Mat A[D,C]→A
A=1⇒Locate D,C,"■"
A=2⇒Locate D,C,"#"

Par ça :

A≠0⇒Locate C,D,StrMid("■#",Mat A[D,C],1)

J'ai plus trop le temps d'expliquer mais c'est une petite astuce.
En fait StrMid("texte",n,1) va récupérer le nième caractère du texte.
Ici n vaut Mat A[D,C]. Donc si Mat A[D,C] vaut 1, ça va récupérer le premier caractère, donc "■". Si ça vaut 2 ça va récupérer "#", etc...
Tweaks : ||||| ||||
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 21:35 | #


Merci beaucoup

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 91 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd