Jeu fini sauf bug avec cin
parent
e68f62b756
commit
0ae431d4d4
|
@ -0,0 +1,34 @@
|
||||||
|
#ifndef JEU_H
|
||||||
|
#define JEU_H
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <windows.h>
|
||||||
|
#include "Joueur.h"
|
||||||
|
#include "PiocheDeCartes.h"
|
||||||
|
#include "PiocheDeTortues.h"
|
||||||
|
#include "PlateauDeJeu.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
class Jeu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Jeu();
|
||||||
|
void jouer();
|
||||||
|
void recommencer();
|
||||||
|
void manche();
|
||||||
|
bool aTroisFeuillesDeSalade();
|
||||||
|
int indexJoueurLePlusJeune();
|
||||||
|
virtual ~Jeu();
|
||||||
|
protected:
|
||||||
|
|
||||||
|
private:
|
||||||
|
int nombreJoueurs;
|
||||||
|
vector<Joueur*> tabJoueurs;
|
||||||
|
PiocheDeCartes* piocheDeCartes;
|
||||||
|
PiocheDeTortues* listeTortues;
|
||||||
|
PiocheDeTortues* tuiles;
|
||||||
|
PlateauDeJeu* plateauDeJeu;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // JEU_H
|
|
@ -1,16 +1,26 @@
|
||||||
#ifndef JOUEUR_H
|
#ifndef JOUEUR_H
|
||||||
#define JOUEUR_H
|
#define JOUEUR_H
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "Carte.h"
|
||||||
|
#include "PiocheDeCartes.h"
|
||||||
|
#include "PiocheDeTortues.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
class Joueur
|
class Joueur
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Joueur();
|
Joueur();
|
||||||
Joueur(std::string nom, int age);
|
|
||||||
virtual ~Joueur();
|
virtual ~Joueur();
|
||||||
int getAge();
|
int getAge();
|
||||||
void setNom(std::string nom);
|
void debutDeManche(PiocheDeCartes* piocheDeCartes, PiocheDeTortues* tuiles);
|
||||||
|
void finDeManche();
|
||||||
|
Tortue* getTortueJoueur();
|
||||||
|
void setTortueJoueur(Tortue* uneTortue);
|
||||||
|
Carte* getIndiceMainJoueur(int i);
|
||||||
|
void renouvelerCarte(PiocheDeCartes* piocheDeCartes, Carte* carteJouee);
|
||||||
std::string getNom();
|
std::string getNom();
|
||||||
|
void ajoutFeuilleDeSalade();
|
||||||
|
int getNbFeuillesDeSalade();
|
||||||
|
Carte* choixCarteJouee();
|
||||||
affichage_joueur();
|
affichage_joueur();
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ class PiocheDeCartes
|
||||||
public:
|
public:
|
||||||
PiocheDeCartes();
|
PiocheDeCartes();
|
||||||
virtual ~PiocheDeCartes();
|
virtual ~PiocheDeCartes();
|
||||||
Carte* piocher();
|
Carte* piocher_carte();
|
||||||
|
void afficherPaquet();
|
||||||
protected:
|
protected:
|
||||||
vector<Carte*> tas;
|
vector<Carte*> tas;
|
||||||
int nb_cartes_restantes;
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,22 @@
|
||||||
#ifndef PIOCHEDETORTUES_H
|
#ifndef PIOCHEDETORTUES_H
|
||||||
#define PIOCHEDETORTUES_H
|
#define PIOCHEDETORTUES_H
|
||||||
|
#include <vector>
|
||||||
|
#include "Tortue.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
class PiocheDeTortues
|
class PiocheDeTortues
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PiocheDeTortues();
|
PiocheDeTortues();
|
||||||
|
void afficherPiocheDeTortues();
|
||||||
|
Tortue* piocherTortue();
|
||||||
virtual ~PiocheDeTortues();
|
virtual ~PiocheDeTortues();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
vector<Tortue*> liste_tortues;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PIOCHEDETORTUES_H
|
#endif // PIOCHEDETORTUES_H
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#ifndef PLATEAUDEJEU_H
|
||||||
|
#define PLATEAUDEJEU_H
|
||||||
|
#include <vector>
|
||||||
|
#include <windows.h>
|
||||||
|
#include "Tortue.h"
|
||||||
|
#include "PiocheDeTortues.h"
|
||||||
|
#include "Carte.h"
|
||||||
|
#include "constantes.h"
|
||||||
|
|
||||||
|
class PlateauDeJeu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlateauDeJeu(PiocheDeTortues* tortuesAuDepart);
|
||||||
|
void affichagePlateau();
|
||||||
|
void actionCarte(Carte* carteJouee);
|
||||||
|
bool uneTortueEstArrivee();
|
||||||
|
int* getOrdreArriveeTortue();
|
||||||
|
virtual ~PlateauDeJeu();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Tortue* plateau[NB_POSITIONS][NB_TORTUES];
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PLATEAUDEJEU_H
|
|
@ -1,6 +1,5 @@
|
||||||
#ifndef CONSTANTES_H
|
#ifndef CONSTANTES_H
|
||||||
#define CONSTANTES_H
|
#define CONSTANTES_H 1
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
/*
|
/*
|
||||||
|
@ -24,7 +23,7 @@ using namespace std;
|
||||||
#define C_JAUNE 4
|
#define C_JAUNE 4
|
||||||
#define C_VERT 5
|
#define C_VERT 5
|
||||||
|
|
||||||
int TAB_COULEUR[5] = {C_ROUGE, C_BLEU, C_VIOLET, C_JAUNE, C_VERT};
|
const int TAB_COULEUR[5] = {C_ROUGE, C_BLEU, C_VIOLET, C_JAUNE, C_VERT};
|
||||||
|
|
||||||
#define TAILLE_TAB_COULEUR 5
|
#define TAILLE_TAB_COULEUR 5
|
||||||
|
|
||||||
|
@ -40,11 +39,15 @@ int TAB_COULEUR[5] = {C_ROUGE, C_BLEU, C_VIOLET, C_JAUNE, C_VERT};
|
||||||
#define T_PLUS1_DERNIERE 7
|
#define T_PLUS1_DERNIERE 7
|
||||||
#define T_PLUS2_DERNIERE 8
|
#define T_PLUS2_DERNIERE 8
|
||||||
|
|
||||||
string AFFICHAGE_PLUS1 = "+";
|
const string AFFICHAGE_PLUS1 = "+";
|
||||||
string AFFICHAGE_PLUS2 = "+ +";
|
const string AFFICHAGE_PLUS2 = "++";
|
||||||
string AFFICHAGE_MOINS1 = "-";
|
const string AFFICHAGE_MOINS1 = "-";
|
||||||
string AFFICHAGE_PLUS1_DERNIERE = ">";
|
const string AFFICHAGE_PLUS1_DERNIERE = ">";
|
||||||
string AFFICHAGE_PLUS2_DERNIERE = "> >";
|
const string AFFICHAGE_PLUS2_DERNIERE = ">>";
|
||||||
|
|
||||||
|
const string AFFICHAGE_VIDE = " " ;
|
||||||
|
const string AFFICHAGE_TORTUE = " T ";
|
||||||
|
const string AFFICHAGE_BASE = " >>>";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WINDOWS
|
* WINDOWS
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef UTILS_H_INCLUDED
|
||||||
|
#define UTILS_H_INCLUDED
|
||||||
|
#include <string>
|
||||||
|
#include <windows.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void printf_en_couleur(string texte, int couleur);
|
||||||
|
FARPROC getConsoleFunction(char *name);
|
||||||
|
|
||||||
|
#endif // UTILS_H_INCLUDED
|
23
main.cpp
23
main.cpp
|
@ -1,23 +0,0 @@
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
#include "Carte.h"
|
|
||||||
#include "Tortue.h"
|
|
||||||
#include "Joueur.h"
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
Carte* uneCarte;
|
|
||||||
uneCarte = new Carte();
|
|
||||||
Carte* uneAutre = new Carte();
|
|
||||||
uneCarte->setCouleur(5);
|
|
||||||
uneCarte->afficher();
|
|
||||||
uneAutre->setType(2);
|
|
||||||
uneAutre->afficher();
|
|
||||||
Joueur* unJoueur;
|
|
||||||
unJoueur = new Joueur();
|
|
||||||
Tortue* uneTortue;
|
|
||||||
uneTortue = new Tortue(3);
|
|
||||||
uneTortue->affichageTortue();
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,31 +1,24 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "Carte.h"
|
#include "Carte.h"
|
||||||
#include "constantes.h"
|
#include "constantes.h"
|
||||||
|
#include "../include/utils.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
Carte::Carte()
|
|
||||||
{
|
|
||||||
cout << "Création d'une nouvelle carte !" << endl;
|
|
||||||
this->couleur = 0;
|
|
||||||
this->type = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Carte::Carte(int couleur, int type)
|
Carte::Carte(int couleur, int type)
|
||||||
{
|
{
|
||||||
this->setCouleur(couleur);
|
if(couleur < 0 || couleur > 5){
|
||||||
this->setType(type);
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
this->couleur = couleur;
|
||||||
|
this->type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Carte::~Carte()
|
Carte::~Carte()
|
||||||
{
|
{
|
||||||
//dtor
|
//dtor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string Carte::representation_type_carte(int type_carte)
|
string Carte::representation_type_carte(int type_carte)
|
||||||
{
|
{
|
||||||
switch (type_carte)
|
switch (type_carte)
|
||||||
|
@ -46,34 +39,19 @@ string Carte::representation_type_carte(int type_carte)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
void Carte::afficher(){
|
void Carte::afficher(){
|
||||||
cout<<"Représentation de la carte :"<<this->representation_type_carte(this->type)<<endl;
|
printf_en_couleur(this->representation_type_carte(this->getType()), this->getCouleur());
|
||||||
|
cout << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Carte::setType(int type) {
|
|
||||||
this->type=type;
|
|
||||||
}
|
|
||||||
int Carte::getType(){
|
int Carte::getType(){
|
||||||
return this->type;
|
return this->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Carte::setCouleur(int couleur){
|
|
||||||
if(couleur<5){
|
|
||||||
this->couleur=couleur;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
this->couleur=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int Carte::getCouleur(){
|
int Carte::getCouleur(){
|
||||||
cout<<"acces a la variablle couleur de l'objet "<<this<<endl;
|
|
||||||
return this->couleur;
|
return this->couleur;
|
||||||
}
|
}
|
||||||
int deplacement_type_carte (int type_carte)
|
|
||||||
|
int Carte::deplacement_type_carte(int type_carte)
|
||||||
{
|
{
|
||||||
return type_carte % 3;
|
return type_carte % 3;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,151 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <string>
|
||||||
|
#include "Jeu.h"
|
||||||
|
#include "Joueur.h"
|
||||||
|
#include "PiocheDeCartes.h"
|
||||||
|
#include "PiocheDeTortues.h"
|
||||||
|
#include "PlateauDeJeu.h"
|
||||||
|
#include "../include/utils.h"
|
||||||
|
#include "../include/constantes.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
Jeu::Jeu()
|
||||||
|
{
|
||||||
|
// init joueurs
|
||||||
|
// pour chaque manche
|
||||||
|
// init pioche
|
||||||
|
// init plateau de jeu
|
||||||
|
// choix tortue par chaque joueur
|
||||||
|
// remplacement main joueur
|
||||||
|
// ... déroulement manche
|
||||||
|
// free pioche
|
||||||
|
// free plateau de jeu
|
||||||
|
//puis:
|
||||||
|
// free joueurs
|
||||||
|
|
||||||
|
int nbJoueurs = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
cout << "Combien y a-t-il de joueurs ?" << endl <<"(Entrez une valeur comprise entre 1 et " << NB_MAX_JOUEURS << ") ";
|
||||||
|
cin >> nbJoueurs;
|
||||||
|
}
|
||||||
|
while (nbJoueurs > NB_MAX_JOUEURS || nbJoueurs <= 0);
|
||||||
|
this->nombreJoueurs = nbJoueurs;
|
||||||
|
for (int indexJoueur = 0; indexJoueur < nbJoueurs; indexJoueur++)
|
||||||
|
{
|
||||||
|
Joueur* unJoueur;
|
||||||
|
unJoueur = new Joueur();
|
||||||
|
this->tabJoueurs.push_back(unJoueur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Jeu::jouer()
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
this->piocheDeCartes = new PiocheDeCartes();
|
||||||
|
this->listeTortues = new PiocheDeTortues();
|
||||||
|
this->tuiles = new PiocheDeTortues();
|
||||||
|
this->plateauDeJeu = new PlateauDeJeu(this->listeTortues);
|
||||||
|
for (int j = 0; j < this->nombreJoueurs; j++)
|
||||||
|
{
|
||||||
|
this->tabJoueurs[j]->debutDeManche(this->piocheDeCartes, this->tuiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->manche();
|
||||||
|
|
||||||
|
for (int j = 0; j < this->nombreJoueurs; j++)
|
||||||
|
{
|
||||||
|
this->tabJoueurs[j]->finDeManche();
|
||||||
|
}
|
||||||
|
this->piocheDeCartes->~PiocheDeCartes();
|
||||||
|
this->listeTortues->~PiocheDeTortues();
|
||||||
|
this->tuiles->~PiocheDeTortues();
|
||||||
|
this->plateauDeJeu->~PlateauDeJeu();
|
||||||
|
}
|
||||||
|
while (!this->aTroisFeuillesDeSalade());
|
||||||
|
Joueur* joueurVainqueur;
|
||||||
|
for (int j = 0; j < this->nombreJoueurs; j++)
|
||||||
|
{
|
||||||
|
if (this->tabJoueurs[j]->getNbFeuillesDeSalade() == NB_MAX_FEUILLES_SALADE)
|
||||||
|
{
|
||||||
|
joueurVainqueur = this->tabJoueurs[j];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << "Le/La Joueur(euse) " << joueurVainqueur->getNom() << "a gagné la partie ! Félicitations ! " << endl << "Merci d'avoir joué ! ";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Jeu::aTroisFeuillesDeSalade()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < this->nombreJoueurs; i++ )
|
||||||
|
{
|
||||||
|
if (this->tabJoueurs[i]->getNbFeuillesDeSalade() == NB_MAX_FEUILLES_SALADE)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Jeu::manche()
|
||||||
|
{
|
||||||
|
int joueurEnCours = this->indexJoueurLePlusJeune();
|
||||||
|
cout << endl;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
this->plateauDeJeu->affichagePlateau();
|
||||||
|
Carte* carteJouee;
|
||||||
|
carteJouee = this->tabJoueurs[joueurEnCours]->choixCarteJouee();
|
||||||
|
this->plateauDeJeu->actionCarte(carteJouee);
|
||||||
|
this->plateauDeJeu->affichagePlateau();
|
||||||
|
this->tabJoueurs[joueurEnCours]->renouvelerCarte(this->piocheDeCartes, carteJouee);
|
||||||
|
carteJouee->~Carte();
|
||||||
|
//this->piocheDeCartes->afficherPaquet();
|
||||||
|
joueurEnCours = (joueurEnCours + 1)% this->nombreJoueurs;
|
||||||
|
}
|
||||||
|
while (! (this->plateauDeJeu->uneTortueEstArrivee()));
|
||||||
|
int* tabOrdreCouleursTortues = this->plateauDeJeu->getOrdreArriveeTortue();
|
||||||
|
for (int o = 0; o < NB_TORTUES; o++)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < this->nombreJoueurs; i++)
|
||||||
|
{
|
||||||
|
if (this->tabJoueurs[i]->getTortueJoueur()->Getcouleur() == tabOrdreCouleursTortues[o])
|
||||||
|
{
|
||||||
|
this->tabJoueurs[i]->ajoutFeuilleDeSalade();
|
||||||
|
cout << "Le Joueur " << this->tabJoueurs[i]->getNom() << " (" << this->tabJoueurs[i]->getAge() << " ans) a gagné la manche et a remporté une feuille de salade." << endl << "Il a maintenant " << this->tabJoueurs[i]->getNbFeuillesDeSalade() << " feuille(s)." << endl << "Il avait la tortue ";
|
||||||
|
this->tabJoueurs[i]->getTortueJoueur()->affichageTortue();
|
||||||
|
cout << "." << endl;
|
||||||
|
goto finDeRecherche; //break n'aurait permis de ne sortir que d'un seul for
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finDeRecherche:
|
||||||
|
if (!this->aTroisFeuillesDeSalade())
|
||||||
|
{
|
||||||
|
cout << "Appuyez sur une touche (sauf ENTREE) puis appuyez ensuite sur ENTREE pour passer à la manche suivante" << endl;
|
||||||
|
char reponse;
|
||||||
|
cin >> reponse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int Jeu::indexJoueurLePlusJeune()
|
||||||
|
{
|
||||||
|
int plusJeuneAge = -1;
|
||||||
|
int indexPlusJeuneAge = -1;
|
||||||
|
int ageJoueurEnCours;
|
||||||
|
for (int i = 0; i < this->nombreJoueurs; i++)
|
||||||
|
{
|
||||||
|
ageJoueurEnCours = this->tabJoueurs[i]->getAge();
|
||||||
|
if (plusJeuneAge < 0 || ageJoueurEnCours < plusJeuneAge)
|
||||||
|
{
|
||||||
|
plusJeuneAge = ageJoueurEnCours;
|
||||||
|
indexPlusJeuneAge = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indexPlusJeuneAge;
|
||||||
|
}
|
||||||
|
|
||||||
|
Jeu::~Jeu()
|
||||||
|
{
|
||||||
|
//dtor
|
||||||
|
}
|
106
src/Joueur.cpp
106
src/Joueur.cpp
|
@ -1,32 +1,114 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
#include "Joueur.h"
|
#include "Joueur.h"
|
||||||
|
#include "Carte.h"
|
||||||
|
#include "../include/PiocheDeCartes.h"
|
||||||
|
#include "../include/PiocheDeTortues.h"
|
||||||
|
#include "constantes.h"
|
||||||
Joueur::Joueur()
|
Joueur::Joueur()
|
||||||
{
|
{
|
||||||
|
|
||||||
std::cout << "Quel age as-tu ?" << std::endl;
|
|
||||||
std::cin >> this->age;
|
|
||||||
std::cout << this->age << std::endl;
|
|
||||||
|
|
||||||
std::cout << "Quel est ton nom ?"<<std::endl;
|
std::cout << "Quel est ton nom ?"<<std::endl;
|
||||||
std::cin >> this->nom;
|
std::cin >> this->nom;
|
||||||
std::cout << "Ton nom est : " << this->nom << ", et ton age est"<< this->age << std::endl;
|
std::cout << "Quel age as-tu ?" << std::endl;
|
||||||
|
std::cin >> this->age;
|
||||||
}
|
std::cout << "Ton nom est : " << this->nom << ", et ton age est "<< this->age << std::endl;
|
||||||
Joueur::Joueur(std::string nom, int age)
|
|
||||||
{
|
|
||||||
this->nom = nom;
|
|
||||||
this->age = age;
|
|
||||||
this->nb_feuilles_de_salade = 0;
|
this->nb_feuilles_de_salade = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Joueur::renouvelerCarte(PiocheDeCartes* piocheDeCartes, Carte* carteJouee)
|
||||||
|
{
|
||||||
|
Carte* cartePiochee = piocheDeCartes->piocher_carte();
|
||||||
|
for (int i = 0; i < NB_CARTES_MAIN; i++)
|
||||||
|
{
|
||||||
|
if (this->mainJoueur[i] == carteJouee)
|
||||||
|
{
|
||||||
|
this->mainJoueur[i] = cartePiochee;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
int Joueur::getAge()
|
int Joueur::getAge()
|
||||||
{
|
{
|
||||||
return this->age;
|
return this->age;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Joueur::debutDeManche(PiocheDeCartes* piocheDeCartes, PiocheDeTortues* tuiles)
|
||||||
|
{
|
||||||
|
for (int c = 0; c < NB_CARTES_MAIN; c++)
|
||||||
|
{
|
||||||
|
this->mainJoueur[c] = piocheDeCartes->piocher_carte();
|
||||||
|
}
|
||||||
|
this->tortueJoueur = tuiles->piocherTortue();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Joueur::finDeManche()
|
||||||
|
{
|
||||||
|
for (int c = 0; c < NB_CARTES_MAIN; c++)
|
||||||
|
{
|
||||||
|
this->mainJoueur[c]->~Carte();
|
||||||
|
}
|
||||||
|
this->tortueJoueur->~Tortue();
|
||||||
|
}
|
||||||
|
|
||||||
|
Tortue* Joueur::getTortueJoueur()
|
||||||
|
{
|
||||||
|
return this->tortueJoueur;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Joueur::setTortueJoueur(Tortue* uneTortue)
|
||||||
|
{
|
||||||
|
this->tortueJoueur = uneTortue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Carte* Joueur::getIndiceMainJoueur(int i)
|
||||||
|
{
|
||||||
|
return this->mainJoueur[i];
|
||||||
|
}
|
||||||
|
|
||||||
std::string Joueur::getNom()
|
std::string Joueur::getNom()
|
||||||
{
|
{
|
||||||
return this->nom;
|
return this->nom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Joueur::ajoutFeuilleDeSalade()
|
||||||
|
{
|
||||||
|
this->nb_feuilles_de_salade = this->nb_feuilles_de_salade + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Joueur::getNbFeuillesDeSalade()
|
||||||
|
{
|
||||||
|
return this->nb_feuilles_de_salade;
|
||||||
|
}
|
||||||
|
|
||||||
|
Carte* Joueur::choixCarteJouee()
|
||||||
|
{
|
||||||
|
char saisie;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
cout << this->nom << ", ("<< this->age << " ans) " << "appuie sur o puis sur ENTREE.." << endl;
|
||||||
|
cin >> saisie;
|
||||||
|
}
|
||||||
|
while (saisie != 'o');
|
||||||
|
|
||||||
|
cout << "Ta tortue : ";
|
||||||
|
this->tortueJoueur->affichageTortue();
|
||||||
|
cout << endl;
|
||||||
|
cout << "Tes cartes :" << endl;
|
||||||
|
for (int i = 0; i < NB_CARTES_MAIN; i++)
|
||||||
|
{
|
||||||
|
cout << i+1 << " : " ;
|
||||||
|
this->mainJoueur[i]->afficher();
|
||||||
|
}
|
||||||
|
int reponse = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
cout << endl <<"Quelle carte veux-tu jouer (entre 1 et " << NB_CARTES_MAIN << ")" << endl;
|
||||||
|
cin >> reponse;
|
||||||
|
}
|
||||||
|
while (reponse > NB_CARTES_MAIN || reponse <= 0);
|
||||||
|
return this->mainJoueur[reponse - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Joueur::~Joueur()
|
Joueur::~Joueur()
|
||||||
|
|
|
@ -1,37 +1,71 @@
|
||||||
#include "PiocheDeCartes.h"
|
#include "PiocheDeCartes.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "constantes.h"
|
#include "constantes.h"
|
||||||
|
#include <windows.h>
|
||||||
|
#include "../include/utils.h"
|
||||||
|
#include <vector>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <time.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
PiocheDeCartes::PiocheDeCartes()
|
PiocheDeCartes::PiocheDeCartes()
|
||||||
{
|
{
|
||||||
int nbCartesCreees = 0;
|
Carte* uneCarte;
|
||||||
cout << "Creation de la pioche !" << endl;
|
|
||||||
for (int index_couleur = 0; index_couleur < TAILLE_TAB_COULEUR; index_couleur++)
|
for (int index_couleur = 0; index_couleur < TAILLE_TAB_COULEUR; index_couleur++)
|
||||||
{
|
{
|
||||||
for (int nb_cartes = 0; nb_cartes < 5; nb_cartes++)
|
for (int nb_cartes = 0; nb_cartes < 5; nb_cartes++)
|
||||||
{
|
{
|
||||||
Carte* uneCarte;
|
|
||||||
uneCarte = new Carte(TAB_COULEUR[index_couleur], T_PLUS1_COULEUR);
|
uneCarte = new Carte(TAB_COULEUR[index_couleur], T_PLUS1_COULEUR);
|
||||||
this->tas.push_back(uneCarte);
|
this->tas.push_back(uneCarte);
|
||||||
nbCartesCreees++;
|
}
|
||||||
|
uneCarte = new Carte(TAB_COULEUR[index_couleur], T_PLUS2_COULEUR);
|
||||||
|
this->tas.push_back(uneCarte);
|
||||||
|
for (int nb_cartes = 0; nb_cartes < 2; nb_cartes++)
|
||||||
|
{
|
||||||
|
uneCarte = new Carte(TAB_COULEUR[index_couleur], T_MOINS1_COULEUR);
|
||||||
|
this->tas.push_back(uneCarte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int nb_cartes = 0; nb_cartes < 5; nb_cartes++)
|
||||||
|
{
|
||||||
|
uneCarte = new Carte(C_MULTI, T_PLUS1_MULTI );
|
||||||
|
this->tas.push_back(uneCarte);
|
||||||
}
|
}
|
||||||
for (int nb_cartes = 0; nb_cartes < 2; nb_cartes++)
|
for (int nb_cartes = 0; nb_cartes < 2; nb_cartes++)
|
||||||
{
|
{
|
||||||
Carte* uneCarte;
|
uneCarte = new Carte(C_MULTI, T_MOINS1_MULTI);
|
||||||
uneCarte = new Carte(TAB_COULEUR[index_couleur], T_MOINS1_COULEUR);
|
|
||||||
this->tas.push_back(uneCarte);
|
this->tas.push_back(uneCarte);
|
||||||
nbCartesCreees++;
|
|
||||||
}
|
}
|
||||||
Carte* uneCarte;
|
for (int nb_cartes = 0; nb_cartes < 3; nb_cartes++)
|
||||||
|
{
|
||||||
|
uneCarte = new Carte(C_MULTI, T_PLUS1_DERNIERE);
|
||||||
this->tas.push_back(uneCarte);
|
this->tas.push_back(uneCarte);
|
||||||
for (int nb_cartes = 0; nb_cartes < 5)
|
|
||||||
}
|
}
|
||||||
|
for (int nb_cartes = 0; nb_cartes < 2; nb_cartes++)
|
||||||
|
{
|
||||||
|
uneCarte = new Carte(C_MULTI, T_PLUS2_DERNIERE );
|
||||||
|
this->tas.push_back(uneCarte);
|
||||||
|
}
|
||||||
|
|
||||||
//ctor
|
//ctor
|
||||||
}
|
}
|
||||||
|
|
||||||
Carte* PiocheDeCartes::piocher()
|
Carte* PiocheDeCartes::piocher_carte()
|
||||||
{
|
{
|
||||||
|
int index_pioche = rand() % this->tas.size();
|
||||||
|
Carte* carte_piochee = this->tas[index_pioche];
|
||||||
|
//int indexSelectionne = this->0+ index_pioche;
|
||||||
|
this->tas.erase(tas.begin() + index_pioche);
|
||||||
|
return carte_piochee;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PiocheDeCartes::afficherPaquet()
|
||||||
|
{
|
||||||
|
for (int c = 0; c < this->tas.size(); c++)
|
||||||
|
{
|
||||||
|
printf_en_couleur(this->tas[c]->representation_type_carte(this->tas[c]->getType()), this->tas[c]->getCouleur());
|
||||||
|
}
|
||||||
|
cout << this->tas.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
PiocheDeCartes::~PiocheDeCartes()
|
PiocheDeCartes::~PiocheDeCartes()
|
||||||
|
|
|
@ -1,10 +1,51 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <time.h>
|
||||||
#include "PiocheDeTortues.h"
|
#include "PiocheDeTortues.h"
|
||||||
|
#include "Tortue.h"
|
||||||
|
#include "constantes.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
PiocheDeTortues::PiocheDeTortues()
|
PiocheDeTortues::PiocheDeTortues()
|
||||||
{
|
{
|
||||||
//ctor
|
this->liste_tortues.clear();
|
||||||
}
|
for (int i = 0; i<NB_TORTUES; i++)
|
||||||
|
{
|
||||||
|
this->liste_tortues.push_back(new Tortue(TAB_COULEUR[i]));
|
||||||
|
} //ctor
|
||||||
|
|
||||||
|
}
|
||||||
|
void PiocheDeTortues::afficherPiocheDeTortues()
|
||||||
|
{
|
||||||
|
cout << "Taille debut constructeur :" << this->liste_tortues.size()<< endl ;
|
||||||
|
cout << "Tableau des pointeurs de tortues :" << endl;
|
||||||
|
for (int i = 0; i < this->liste_tortues.size(); i++)
|
||||||
|
{
|
||||||
|
if (i != 4)
|
||||||
|
{
|
||||||
|
cout << this->liste_tortues[i] << " ";
|
||||||
|
cout << "Taille a l'indice " << i << ": " << this->liste_tortues.size() << endl ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << this->liste_tortues[i] << endl;
|
||||||
|
cout << "Taille a l'indice " << i << ": " << this->liste_tortues.size() << endl ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Tortue* PiocheDeTortues::piocherTortue()
|
||||||
|
{
|
||||||
|
if (this->liste_tortues.size() != 0)
|
||||||
|
{
|
||||||
|
int indexTortuePiochee = rand() % this->liste_tortues.size();
|
||||||
|
Tortue* tortuePiochee;
|
||||||
|
tortuePiochee = this->liste_tortues[indexTortuePiochee];
|
||||||
|
this->liste_tortues[indexTortuePiochee] = this->liste_tortues[this->liste_tortues.size() - 1 ];
|
||||||
|
this->liste_tortues.pop_back();
|
||||||
|
return tortuePiochee;
|
||||||
|
}
|
||||||
|
}
|
||||||
PiocheDeTortues::~PiocheDeTortues()
|
PiocheDeTortues::~PiocheDeTortues()
|
||||||
{
|
{
|
||||||
//dtor
|
//dtor
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <windows.h>
|
||||||
|
#include "PlateauDeJeu.h"
|
||||||
|
#include "../include/PiocheDeTortues.h"
|
||||||
|
#include "../include/Tortue.h"
|
||||||
|
#include "../include/utils.h"
|
||||||
|
#include "../include/PlateauDeJeu.h"
|
||||||
|
#include "../include/Carte.h"
|
||||||
|
using namespace std;
|
||||||
|
PlateauDeJeu::PlateauDeJeu(PiocheDeTortues* tortuesAuDepart)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < NB_POSITIONS; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < NB_TORTUES; y++)
|
||||||
|
{
|
||||||
|
if (x == 0)
|
||||||
|
{
|
||||||
|
this->plateau[x][y] = tortuesAuDepart->piocherTortue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->plateau[x][y] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ctor
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlateauDeJeu::affichagePlateau()
|
||||||
|
{
|
||||||
|
// cacher les informations du joueur précédent
|
||||||
|
system("@cls||clear");
|
||||||
|
cout << "Plateau de Jeu :" << endl;
|
||||||
|
for (int y = NB_TORTUES - 1; y >= 0 ; y--)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < NB_POSITIONS; x++)
|
||||||
|
{
|
||||||
|
if (this->plateau[x][y] != 0)
|
||||||
|
{
|
||||||
|
printf_en_couleur(AFFICHAGE_TORTUE, (plateau[x][y])->Getcouleur());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << AFFICHAGE_VIDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
for (int x = 0; x < NB_POSITIONS; x++)
|
||||||
|
{
|
||||||
|
cout << AFFICHAGE_BASE;
|
||||||
|
}
|
||||||
|
cout << endl << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlateauDeJeu::actionCarte(Carte* carteJouee)
|
||||||
|
{
|
||||||
|
int couleurCiblee = carteJouee->getCouleur();
|
||||||
|
if ((carteJouee->getType()) == T_PLUS1_DERNIERE || (carteJouee->getType()) == T_PLUS2_DERNIERE)
|
||||||
|
{
|
||||||
|
for (int position = 0; position < NB_POSITIONS; position++)
|
||||||
|
{
|
||||||
|
if (this->plateau[position][0] != 0)
|
||||||
|
{
|
||||||
|
couleurCiblee = (this->plateau[position][0])->Getcouleur();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (couleurCiblee == C_MULTI)
|
||||||
|
{
|
||||||
|
for (int c = 0; c < TAILLE_TAB_COULEUR; c++)
|
||||||
|
{
|
||||||
|
cout <<c+1<<":" ;
|
||||||
|
printf_en_couleur(AFFICHAGE_TORTUE, TAB_COULEUR[c]);
|
||||||
|
cout << "\t\t";
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
int choixCouleur;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
cout <<"Quelle tortue veux-tu deplacer (entre 1 et " << NB_TORTUES << ")";
|
||||||
|
cin >> choixCouleur;
|
||||||
|
}
|
||||||
|
while (choixCouleur > NB_TORTUES || choixCouleur <= 0);
|
||||||
|
couleurCiblee = TAB_COULEUR[choixCouleur - 1];
|
||||||
|
}
|
||||||
|
for (int x = 0; x < NB_POSITIONS; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < NB_TORTUES; y++)
|
||||||
|
{
|
||||||
|
if (this->plateau[x][y] != 0 && (this->plateau[x][y]->Getcouleur()) == couleurCiblee)
|
||||||
|
{
|
||||||
|
// calculer le déplacement à appliquer
|
||||||
|
int deplacement = carteJouee->deplacement_type_carte(carteJouee->getType());
|
||||||
|
if (x + deplacement < 0)
|
||||||
|
{
|
||||||
|
deplacement = -x;
|
||||||
|
}
|
||||||
|
else if (x + deplacement >= NB_POSITIONS)
|
||||||
|
{
|
||||||
|
deplacement = (NB_POSITIONS - 1) - x;
|
||||||
|
}
|
||||||
|
if (deplacement == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// trouver la nouvelle hauteur de la tortue ciblée
|
||||||
|
int y_cible;
|
||||||
|
for (y_cible = 0; this->plateau[x + deplacement][y_cible] != 0; y_cible++);
|
||||||
|
// poursuivre le parcours de la pile et faire le déplacement
|
||||||
|
for (; y < NB_TORTUES && this->plateau[x][y] != 0; y++, y_cible++)
|
||||||
|
{
|
||||||
|
this->plateau[x + deplacement][y_cible] = this->plateau[x][y];
|
||||||
|
this->plateau[x][y] = 0;
|
||||||
|
}
|
||||||
|
// déplacement terminé
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PlateauDeJeu::uneTortueEstArrivee()
|
||||||
|
{
|
||||||
|
return this->plateau[NB_POSITIONS - 1][0] != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int* PlateauDeJeu::getOrdreArriveeTortue()
|
||||||
|
{
|
||||||
|
int indiceTabArriveeTortue = 0;
|
||||||
|
int* tabArriveeTortue = (int*)malloc(sizeof(int)* NB_TORTUES);
|
||||||
|
for (int i = (NB_POSITIONS - 1); i >= 0; i--)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < NB_TORTUES; j++)
|
||||||
|
{
|
||||||
|
if (this->plateau[i][j] != 0)
|
||||||
|
{
|
||||||
|
tabArriveeTortue[indiceTabArriveeTortue] = this->plateau[i][j]->Getcouleur();
|
||||||
|
indiceTabArriveeTortue++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return tabArriveeTortue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlateauDeJeu::~PlateauDeJeu()
|
||||||
|
{
|
||||||
|
//dtor
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "Tortue.h"
|
#include "Tortue.h"
|
||||||
|
#include "../include/utils.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
Tortue::Tortue(int couleur_t)
|
Tortue::Tortue(int couleur_t)
|
||||||
|
@ -10,9 +11,8 @@ Tortue::Tortue(int couleur_t)
|
||||||
{
|
{
|
||||||
cerr << "Erreur dans la création de la tortue :" <<endl;
|
cerr << "Erreur dans la création de la tortue :" <<endl;
|
||||||
}
|
}
|
||||||
cout<< "Création d'une tortue !"<<endl;
|
|
||||||
this->couleur = couleur_t;
|
this->couleur = couleur_t;
|
||||||
this->position = 0;
|
this->position = 1;
|
||||||
//ctor
|
//ctor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,5 @@ void Tortue::Setposition(int val)
|
||||||
}
|
}
|
||||||
void Tortue::affichageTortue()
|
void Tortue::affichageTortue()
|
||||||
{
|
{
|
||||||
std::cout << "Affichage de la couleur : "<<this->Getcouleur()<<std::endl;
|
printf_en_couleur("T", this->Getcouleur());
|
||||||
std::cout << "Affichage de la position : "<<this->Getposition()<<std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <time.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include "PiocheDeCartes.h"
|
||||||
|
#include "../include/PiocheDeTortues.h"
|
||||||
|
#include "Carte.h"
|
||||||
|
#include "Tortue.h"
|
||||||
|
#include "Joueur.h"
|
||||||
|
#include "../include/PlateauDeJeu.h"
|
||||||
|
#include "../include/Jeu.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Jeu* unJeu;
|
||||||
|
srand(time(NULL));
|
||||||
|
unJeu = new Jeu();
|
||||||
|
unJeu->jouer();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include "../include/utils.h"
|
||||||
|
#include "../include/constantes.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
FARPROC getConsoleFunction(char *name) {
|
||||||
|
static HMODULE kernel32=(HMODULE)0xffffffff;
|
||||||
|
if(kernel32==0)
|
||||||
|
return NULL;
|
||||||
|
if(kernel32==(HMODULE)0xffffffff) {
|
||||||
|
kernel32=LoadLibrary("kernel32.dll");
|
||||||
|
if(kernel32==0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return GetProcAddress(kernel32,name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void printf_en_couleur(string texte, int couleur)
|
||||||
|
{
|
||||||
|
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
// pointer to the SetConsoleTextAttribute() winapi function
|
||||||
|
int (WINAPI* doSetConsoleTextAttribute)(HANDLE hConsoleOutput, WORD attr);
|
||||||
|
doSetConsoleTextAttribute = (int (__attribute__((__stdcall__)) *)(void*, short unsigned int)) getConsoleFunction("SetConsoleTextAttribute");
|
||||||
|
int couleurWindows;
|
||||||
|
switch (couleur)
|
||||||
|
{
|
||||||
|
case C_VERT:
|
||||||
|
couleurWindows = 10;
|
||||||
|
break;
|
||||||
|
case C_BLEU:
|
||||||
|
couleurWindows = 9;
|
||||||
|
break;
|
||||||
|
case C_VIOLET:
|
||||||
|
couleurWindows = 13;
|
||||||
|
break;
|
||||||
|
case C_JAUNE:
|
||||||
|
couleurWindows = 14;
|
||||||
|
break;
|
||||||
|
case C_ROUGE:
|
||||||
|
couleurWindows = 12;
|
||||||
|
break;
|
||||||
|
case C_MULTI:
|
||||||
|
couleurWindows = 7*16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
(*doSetConsoleTextAttribute)(hCon, couleurWindows);
|
||||||
|
cout << texte;
|
||||||
|
(*doSetConsoleTextAttribute)(hCon, 7);
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue