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...


1, 2 Suivante
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

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


Tu peux coder ta map dans une matrice de 21 par 7, donner à chaque bloc un id et faire correspondre un événement à cet id

Par exemple tu codes ton mur 1 et quand tu veux te déplacer, tu regardes si la case ou tu vas aller n'est pas un mur. Si oui tu ne bouges pas, si non tu bouges.
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

Citer : Posté le 21/02/2016 12:01 | #


Voilà au passage une vidéo de Totoyo


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

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


Ah j'avais pas vu que c'était en mode graphique merci Lephe
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

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


Juste au passage vu que personne n'a l'air de l'avoir fait remarquer, on appelle ça des "collisions", ce mot t'aidera sûrement à trouver plus d'informations
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

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


Merci beaucoup pour votre aide, je vous tiens au courant

Ajouté le 21/02/2016 à 13:44 :
Donc voilà, j'ai bien compris le fonctionnement de la matrice, mais voilà le problème :
{7,21->Dim Mat A
1->Mat A[2,7
Locate 7,2,"#"
If Mat A[Y,X]=1
Then 7->X:2->Y
IfEnd

Cela marche avec des variables comme A,X... Mais pas avec des valeurs comme 2 ou 7.
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message

Citer : Posté le 21/02/2016 13:49 | #


Je ne comprends pas le code.
A quoi correspond le dièse # ? Un mur ?
Si le joueur tombe sur le #, tu lui assignes les coordonnées de ce mur. Donc, le joueur se retrouve sur le mur, et la collision n'est pas gérée.
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

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


Le # correspond à un mur et j'aimerais que la collision soit géré.
Fife86 Hors ligne Membre Points: 839 Défis: 0 Message

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


Est-ce qu'il ne serait pas envisageable de créer un programme de base pour les moteurs de collisions des débutants, comme un sous-programme qui affiche une map et un autre qui teste les collisions ? En mode Locate et Graphique ?
It's Show Time !!!
Mes Jeux :
- Street Fighter : Pour les accrocs du free-fight.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".


< Le recoin du C-Engine >
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

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


Je n'utilise que le mode texte, je ne suis pas très doué avec le mode graphique.
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

Citer : Posté le 21/02/2016 13:59 | #


Ce que tu dois faire doit ressembler plutôt à ceci :
Attendre un événement (une touche directionnelle)
Calculer les coordonnées de la nouvelle position (ajouter ou retirer 1 en x ou y)
Récupérer la valeur dans la matrice pour cette position

Si la valeur est 0
        Effectuer le déplacement

Le tout dans une grand boucle
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

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


C'est plus long non ?
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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


C'est la manière normale de le faire : de toute façon il faut bien permettre à l'utilisateur de se déplacer case par case

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

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


Il n'y aurai pas une méthode plus simple ?
Dark elias Hors ligne Membre Points: 286 Défis: 2 Message

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


Il y a
If Mat A [X, Y]<1
Then
//Déplacer
IfEnd

C'est comme ça que je fais
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 )
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message

Citer : Posté le 21/02/2016 14:59 | #


La proposition de Lephenixnoir est la plus simple et reprend celle dans ma vidéo. Tu as tous les outils en main pour concevoir ton moteur de déplacements.
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 21/02/2016 15:01 | #


Tu sauvegardes les coordonnés de ton perso dans 2 autres variables.
Tu fais le déplacement comme tu veux.
Tu regardes si la case ou tu es est un mur. Si oui les coordonnés de ton perso redeviennent celle sauvegardée. Si non tu passes à la suite.
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 21/02/2016 15:37 | #


En reprenant ton bout de code et en le complétant par ce qu'on te dit de faire ça donnerait ça :
//Initialisation :
{7,21->Dim Mat A
1->Mat A[2,7
Locate 7,2,"#"
1→X:1→Y //Coordonnées initiales du joueur
Locate 1,1,"θ" //θ représente le joueur à l'écran

//Boucle principale :
Do
//On attend que le joueur presse une touche
Do
Getkey→G
LpWhile G=0

//On sauvegarde les anciennes coordonnées du joueur :
X→A:Y→B

//On effectue le déplacement selon la touche pressée :
G=27⇒X+1→X
G=38⇒X-1→X
G=28⇒Y-1→Y
G=37⇒Y+1→Y

//On regarde alors, après déplacement, si le joueur s'est retrouvé dans un mur :
If Mat A[Y,X]≠0
Then A→X:B→Y //S'il est effectivement dans un mur on annule le déplacement
//Sinon on met à jour l'écran :
Else Locate A,B," " //On efface le personnage aux anciennes coordonnées
Locate X,Y,"θ" //On le réaffiche aux nouvelles
IfEnd

LpWhile  //Fin de la boucle principale

Ce code devrait faire ce qu'on t'as expliqué plus haut.
On va sauvegarder les coordonnées du joueur avant tout changement. Puis on le laisse se déplacer librement, sans s'occuper des murs.
Et c'est là qu'intervient la dernière condition. Si après avoir fait ce déplacement le personnage est dans un mur (Mat A[Y,X]≠0), c'est que le mouvement qu'il a essayé de faire n'est pas autorisé.
Donc ont l'annule tout simplement en remettant le joueur là ou il était juste avant, grâce à la sauvegarde qu'on avait fait des coordonnées.


Une autre solution serait de vérifier selon la touche que le joueur presse s'il est face à un mur.
Par exemple pour la droite :
G=27 And Mat A[Y,X+1]=0 ⇒ X+1→X

On va simplement vérifier si ce qui se trouve à droite, donc en (X+1,Y), est bien du vide.
Mais comme dit plus haut on utilise la 1ere solution en principe
Tweaks : ||||| ||||
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Citer : Posté le 21/02/2016 15:59 | #


Merci beaucoup, je met ça en pratique tout de suite.
Dark elias Hors ligne Membre Points: 286 Défis: 2 Message

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


Je pense qu'au lieu de mettre ≠ 0 il vaut mieux mettre <1 comme ça on peut mettre un événement-1
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 En ligne Administrateur Points: 24699 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 (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

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 56 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