Aller au contenu


Photo

Mini-Projet de C++

C++ CPP

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

#1 Laurent GODEFROY

Laurent GODEFROY

    Member

  • Full Professors
  • 282 messages
  • LocationTours (37)

Posté 11 février 2015 - 05:29

Ce fil de discussion est créé pour que vous puissiez échanger autour de votre mini-projet de C++ dont les sujets sont disponibles ce jour même.

Ce projet est individuel, et vous avez jusqu'au 8 mars pour le réaliser. Je vous renvoie à la première partie du sujet pour tous les détails à ce propos.

Bon courage à vous !



#2 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 12 février 2015 - 02:47

une petite question, elle a l'aire bête mais j'ai remplis mon tableau 

mais quelqu'un sait t'il comment je peux remplir mon tableau avec des "X" ou "O" selon que la case soit en false ou true comme indiqué dans le sujet ?

 

merci.



#3 Théo BEAUDENON

Théo BEAUDENON

    Newbie

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

Posté 12 février 2015 - 06:58

/*
  Affiche la grille du morpion 
  _ indique case vide, O pion joueur 1 et X pion jour 2
 */
void afficheGrille() {
  int i, j;
  for (i=0; i<NB_LIG; i++) {
    for (j=0; j<NB_COL; j++) {
      switch (grille[i][j]) {
      case VIDE:
	cout << "_ " ;
	break;
      case ROND:
	cout << "O " ;
	break;
      case CROIX:
	cout << "X " ;
	break;
      }
    }
    cout << "\n" ; /* fin de la ligne */
  }
}


#4 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 12 février 2015 - 07:13

Merci de ta réponse mais nous avons un tableau qui aura comme type cette classe.

class Toto{
private:
   bool x;
   bool y;
public:
   Toto()
}


et nous devons remplir les cases du tableau par rapport au champs x,y qui sont des bool

a ma connaissance le swich ne fonctionne pas avec des bool

 

et donc comment afficher un "X" ou "O" selon l'etat bool d'une case dans le tableau



#5 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 12 février 2015 - 07:25

Ça parrait louche comme design et celui de Théo à base d'enum est meilleur, plus clair et expressif.

 

Mais sinon, un simple if ?

if (toto[i][j].x) {
    std::cout << 'X';
}


#6 Lucas BÉDOUT

Lucas BÉDOUT

    Newbie

  • Étudiant
  • Pip
  • 1 messages

Posté 13 février 2015 - 02:25

Bonjour,

 

Tu demandes ici une partie de la solution au projet, ce n'est pas le but du forum.

On te demande simplement d'afficher "X", "." ou "O" selon la valeur booléenne de la case, si tu lis bien la consigne ça ne devrait pas te poser de souci, c'est la base d'une condition.



#7 Thomas TRICHOT

Thomas TRICHOT

    Member

  • Étudiant
  • PipPip
  • 19 messages
  • LocationTours
  • Cursus:M.Sc.1

Posté 14 février 2015 - 11:43

Bonjour, j'ai une question concernant le sujet,

il est dit :

"Le jeu s’arrête quand l’ange ne peut plus bouger ou quand il a atteint le bord du plateau. "

 

est-ce que dans ce cas là la partie est finie ou faut-il que l'ange continue de jouer et aille sur le bord du plateau ?

miniprojet_2_CPP.jpg


Asc.1  : Tours  /  Asc.2  : Tours  B.Sc  :  Tours  /  M.Sc.1  :  Tours


#8 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 15 février 2015 - 01:01

Si il atteint les bords il a gagné et si il ne peut plus bouger il a perdu , dans tout les cas le jeu s'arrête.

#9 Thomas TRICHOT

Thomas TRICHOT

    Member

  • Étudiant
  • PipPip
  • 19 messages
  • LocationTours
  • Cursus:M.Sc.1

Posté 15 février 2015 - 03:09

d'accord, moi j'avais compris que l'ange ne pouvais pas gagner et qu'il perdait en arrivant au bord ,

la partie continuait donc tant que le démon ne gagne pas.

cf : "Le démon gagne la partie quand il arrive à entourer l’ange de huit cases détruites. L’ange cherche lui à éviter indéfiniment une telle situation."

 

mais merci, je comprends enfin que l'ange peut gagner ^^


Asc.1  : Tours  /  Asc.2  : Tours  B.Sc  :  Tours  /  M.Sc.1  :  Tours


#10 Paul VENET

Paul VENET

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • LocationMontpellier

Posté 17 février 2015 - 02:01

Bonjour.

J'ai un soucis pour la création du plateau de jeu avec le double pointeur.
Pour commancer je fais un premier malloc pour allouer la taille des lignes:

dim = 35;
gameboard = malloc(dim * sizeof(*gameboard));

 

mais j'ai l'erreur suivante:

error: invalid conversion from 'void*' to 'Case**' [-fpermissive]|

 

j'ai essayer de mettre un typedef mais rien n'y fait. j'ai chercher sur le net et ^d'après ce que j'ai vu ma ligne et juste.

 

avez-vous une idée ?



#11 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 17 février 2015 - 03:18

Là tu reserve juste de l'espace memoire mais tu ne créer pas ton tableau, à ta place j'utiliserais un new * Case en plus de reserver une place tu créer ton tableau tout en appelant ton constructeur.



#12 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 17 février 2015 - 03:29

C'est normal, en C++, il est assez rare d'avoir besoin d'utiliser malloc. La raison de l'erreur est que malloc retourne un pointeur de type void *

 

En C, la conversion void * -> T * est implicite, donc il n'y a pas besoin de caster le retour de malloc (certains le font mais c'est redondant). En C++, cette conversion n'est pas implicite

et le compilateur te signale donc l'erreur. Si tu veux utiliser malloc, il faut utiliser une conversion de type explicite :

gameboard = static_cast<Case **>malloc(dim * sizeof(*gameboard));

Mais comme a dit Sylva, ne t'ennuie pas avec malloc et utilise new[]


  • Sylva ETOKABEKA aime ceci

#13 Paul VENET

Paul VENET

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • LocationMontpellier

Posté 17 février 2015 - 03:47

Merci beaucoup pour vos réponse.
J'ai trouvé ceci qui marche très bien:

gameboard = new Case * [dim];
        for(int i=0; i < dim; i++)
        {
           gameboard[i] = new Case [dim];
        }

 

Maintenant j'ai une question par rapport au sujet. Le tableau de base fais 35/35 ça d'accord. Mais quel est son minimum ? Je ne trouve pas la réponse dans le sujet ou alors je ne la voie pas.



#14 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 17 février 2015 - 04:12

Dans le sujet le tableau n'a pas de minimum on te dit juste que le tableau doit être impaire et positif donc si l'utilisateur met -10 et bah tu trouve un moyen pour le convertir en 11. :)
Après c'est a toi de voir si tu veux imposer un minimum ou pas .

#15 Paul VENET

Paul VENET

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • LocationMontpellier

Posté 17 février 2015 - 04:19

Je suis d'accord avce toi Sylva mais si l'on met 0, on aura un tableau de taille 1 et donc juste l'ange sur le plateau. C'est pour cela que je voulais savoir si il y avais un minimum ou si l'on considérais que l'utilisateur est "inteligent"



#16 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 17 février 2015 - 04:22

Pour ma part j'ai considéré que l'utilisateur est intelligent apres vu que ce n'est pas demandé dans le sujet j'ai fais l'impasse.

#17 Paul VENET

Paul VENET

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • LocationMontpellier

Posté 17 février 2015 - 04:35

D'accord merci de ta réponse.
Et une dernière question: "

La méthode « saisir » demande à l’utilisateur de rentrer un numéro de ligne et un numéro de colonne. Elle n’effectue pas de vérification de leurs validités. Cette opération de contrôle est effectuée par la méthode « incorrect »."

On vérifie quand même que ce son des nombre qui son saisie? Car moi si je ne fais pas de vérification, si la personne rentre en ligne des caractère cela remplie automatiquement la saisie de colonne ...



#18 Sylva ETOKABEKA

Sylva ETOKABEKA

    Member

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

Posté 17 février 2015 - 04:47

Toutes les vérifications vont se faire dans la méthode incorrect c'est dit dans le sujet tu demande juste la ligne et la colonne et le reste tu feras dans la méthode incorrect a toi de voir comment tu vas l'implémenter

#19 Paul VENET

Paul VENET

    Member

  • Étudiant
  • PipPip
  • 23 messages
  • LocationMontpellier

Posté 17 février 2015 - 04:48

D'accord Merci beaucoup et désolé pour mes questions idiote.



#20 Mathieu STEFANI

Mathieu STEFANI

    Member

  • Anciens
  • PipPip
  • 67 messages
  • Cursus:Alumni

Posté 17 février 2015 - 05:26

 

 

donc si l'utilisateur met -10 et bah tu trouve un moyen pour le convertir en 11

 

Reporter une erreur serait mieux plutôt que de magiquement changer l'entrée.

 

 

 

Car moi si je ne fais pas de vérification, si la personne rentre en ligne des caractère cela remplie automatiquement la saisie de colonne

 

Je suppose que la méthode incorrect vérifie juste que les nombres entrés par l'utilisateur sont valides ou non, selon que ce soit l'ange ou le démon (peut-il se déplacer sur le plateau à l'endroit indiqué ou non ?).

 

Si tu veux vérifier que l'utilisateur renseigne bien des entiers, et non pas des caractères, il va falloir le faire directement dans la fonction « saisir », vu que ça implique de vérifier directement l'état de std::cin.

 

Attention, faire de la validation d'entrée en C++, comme en C, ce n'est pas simple. Dans l'ordre, il faut:

 

1. Vérifier l'état du flux d'entrée (if !(std::cin >> x))

2. Si l'état n'est pas correct, ré-initialiser le flux avec clear()

3. Ignorer tous les caractères restant dans le flux avec ignore()

4. Tout cela en boucle







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

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

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