Aller au contenu


Photo

Mini-Projet de C++

C++ CPP

  • Veuillez vous connecter pour répondre
52 réponses à ce sujet

#41 Patrick Orel KAMDEM FOTSO

Patrick Orel KAMDEM FOTSO

    Member

  • Étudiant
  • PipPip
  • 17 messages

Posté 21 février 2015 - 01:37

Bonjour,

Je suis Fotso Orel en Deuxième année.

J'ai une question: Sommes nous autorisés à ajouter des méthodes et des attributs dans nos classes?

Merci!



#42 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • Cursus:M.Sc.2

Posté 22 février 2015 - 02:27

Dans le sujet il disent seulement d'ajouter des getter et setter et les paramètres des méthodes qui sont données dans le diagramme UML plus haut.



#43 Damien LAVAINNE

Damien LAVAINNE

    Newbie

  • Étudiant
  • Pip
  • 7 messages
  • Cursus:M.Sc.2

Posté 05 mars 2015 - 09:59

Bonjour,

J'aimerais savoir comment vérifier que les coordonnées rentrées par l'ange soient bien une case autour de sa position.

Si vous avez quelques pistes a me donner je suis preneur.

Merci d'avance.



#44 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 05 mars 2015 - 10:02

Construis un vector de cases possibles pour l'ange. Enlève de ce vector toutes les cases ayant été détruites, puis cherche si la case entrée par l'utilisateur est présente dans ce vector.



#45 Théo BEAUDENON

Théo BEAUDENON

    Newbie

  • Étudiant
  • Pip
  • 8 messages
  • Cursus:M.Sc.2

Posté 06 mars 2015 - 08:59

Bonjour,

J'aimerais savoir comment vérifier que les coordonnées rentrées par l'ange soient bien une case autour de sa position.

Si vous avez quelques pistes a me donner je suis preneur.

Merci d'avance.

 

Tu compare la case rentré avec x+1 ,x-1 , y+1,y-1 de la case actuelle.



#46 Antoine CORRE

Antoine CORRE

    Newbie

  • Étudiant
  • Pip
  • 1 messages

Posté 06 mars 2015 - 08:58

Tu compare la case rentré avec x+1 ,x-1 , y+1,y-1 de la case actuelle.

 

C'est faux, quand est t-il des t'es déplacement {0;1}, {1;0}, {0;-1}, {-1;0} avec t'as méthode?

 

Pour vérifier si les coordonnées de l'ange sont bien une case autour de sa position, tu dois utiliser le principe mathématique des vecteurs. Soit position de l'ange notée Ax et Ay et le point rentré de coordonnée x, y.

Si la valeur absolue de Ax - x, et la valeur absolue de Ay - y sont inférieur ou égale à la puissance de l'ange (ici 1) alors, le déplacement est autorisé.

 

A comprendre, si il y a le même nombre de case, ou moins, entre l'ange et le point, en abscisse et en ordonnée, alors le déplacement est possible sous reserve qu'elle ne soit pas détruite ou contiene déjà l'ange.

 

Bonne modification de code! :ph34r:



#47 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 07 mars 2015 - 02:21

Pour ceux que ça intéresse, ma solution (implémentation libre), en C++11. Je me suis uniquement contenté d'implémenter une partie du sujet, mais si ça peut aider des étudiants à comprendre et appréhender le C++ moderne, tant mieux.



#48 Théo BEAUDENON

Théo BEAUDENON

    Newbie

  • Étudiant
  • Pip
  • 8 messages
  • Cursus:M.Sc.2

Posté 07 mars 2015 - 03:15

C'est faux, quand est t-il des t'es déplacement {0;1}, {1;0}, {0;-1}, {-1;0} avec t'as méthode?

 

Pour vérifier si les coordonnées de l'ange sont bien une case autour de sa position, tu dois utiliser le principe mathématique des vecteurs. Soit position de l'ange notée Ax et Ay et le point rentré de coordonnée x, y.

Si la valeur absolue de Ax - x, et la valeur absolue de Ay - y sont inférieur ou égale à la puissance de l'ange (ici 1) alors, le déplacement est autorisé.

 

A comprendre, si il y a le même nombre de case, ou moins, entre l'ange et le point, en abscisse et en ordonnée, alors le déplacement est possible sous reserve qu'elle ne soit pas détruite ou contiene déjà l'ange.

 

Bonne modification de code! :ph34r:

 

oui je me suis pal exprimé : 

if (abs(ligne - x) != 1 && abs(colonnes - y) != 1){
			cout << "Erreur: Vous pouvez selement voux deplacer d'une case." << endl; ok = false;
		}


#49 Vincent MIGNOT

Vincent MIGNOT

    Newbie

  • Étudiant
  • Pip
  • 4 messages

Posté 08 mars 2015 - 11:06

Bonjour,

 

Je pensais que parvenir à faire en sorte que l'ange ne puisse pas jouer une case broken serait facile, mais, en fait, je bloque sur les conditions (ou l'implémentation des conditions).

L'ange rentre x et y pour les coordonnées sur le plateau, et je pensais faire quelque chose de ce genre :

if (x == jeu.Gameboard[i].getbroken()== true && y == jeu.Gameboard[j].getbroken() == true)
            {
                cout << "La case est detruite." << endl;
                Saisir(jeu);
            }
  

Sauf que j'imagine que le compilateur n'apprécie pas trop que l'on mette deux fois le " == " dans une condition.

Comment faire pour lui faire comprendre que si la case est casée (getbroken == true ?), alors les coordonnées sont invalides ? 

Merci d'avance. 



#50 Tom SCHREVEL

Tom SCHREVEL

    Newbie

  • Étudiant
  • Pip
  • 2 messages

Posté 08 mars 2015 - 11:29

en fait là tu teste que x est égal à gameboard[i].getbroken() et en même temps tu test si gameboard[i].getbroken est vrai.

 

SI tu veux choisir une case avec ton couple x y, il vaudrait mieux faire

if(gameboard[x][y].getbroken() == true)
{
cout << "La case est détruite." << endl;
Saisir(jeu);
}

Comme ça tu teste une case précise. Car dans ton exemple tu testais sur toute une ligne, puis sur une autre ligne. (si tu as suivi le sujet on est censé faire une matrice de case, donc il y a deux[ ] quant tu cherche à trouver une case précise).



#51 Vincent MIGNOT

Vincent MIGNOT

    Newbie

  • Étudiant
  • Pip
  • 4 messages

Posté 08 mars 2015 - 12:19

En fait, c'était tellement simple ; je n'ai décidément pas la bonne logique à avoir. Merci beaucoup !

 

Ps : dernière chose, si j'osais ; maintenant, il râle parce que Case**Gameboard de la class Plateau est en private, et que ma fonction Ange::Incorrect() ne peut avoir accès à Gameboard. 

J'ai tenté :

Case Plateau::get_Gameboard()
{
    return Gameboard;
}

Mais il ne semble pas fonctionner. Pourtant, cela fonctionne bien avec 

int Plateau::getm_dim()
{
    return m_dim;
}

De façon à retourner la dimension du plateau (qui était justement en privé).

 

Une façon de pouvoir accéder à Gameboard un peu partout ? J'ai regardé pour le mot "friend", mais je n'ai pas compris comme il fonctionne.

Accessoirement, j'ai aussi remarqué que placer le Case**Gameboard en public résolvait le problème, ce que je trouve bien plus simple. 



#52 Tom SCHREVEL

Tom SCHREVEL

    Newbie

  • Étudiant
  • Pip
  • 2 messages

Posté 08 mars 2015 - 12:50

Ta fonction get_Gameboard() retourne un objet de type Case

alors que ton Gameboard est un objet de type Case**

 

Change ton type de retour et ça devrait être bon ;)



#53 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 08 mars 2015 - 01:49

 

 

Accessoirement, j'ai aussi remarqué que placer le Case**Gameboard en public résolvait le problème, ce que je trouve bien plus simple. 

 

Ce que tu ne devrais pas faire car en exposant un détail d'implémentation comme celui-ci au monde entier, tu brises le principe d'encapsulation. Dans Plateau, plutôt que de retourner ta matrice au complet, tu devrais faire une fonction qui prend en paramètre un x et un y, et qui te renvoie la case associée à ce couple (x, y). Accessoirement, tu peux valider que (x, y) ne dépasse pas les limites de ta matrice et faire crasher ton programme si tel est le cas (assert)







Aussi étiqueté avec au moins un de ces mots-clés : C++, CPP

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)