Vous êtes sur la page 1sur 18

// Class automatically generated by Dev-C++ New Class wizard

#ifndef CARTE_H
#define CARTE_H

class Carte
{
int valeur;
int couleur;
public:
Carte(){valeur=0;couleur=0;}//constructeur par defaut
Carte(const Carte& ct)//constructeur par recopie
{
this->valeur=ct.valeur;
this->couleur=ct.couleur;
}
int compare(Carte& ct)
{
if(this->valeur > ct.valeur) return 1;//si la premier carte superieu
r au 2 eme
else if(this->valeur < ct.valeur) return 2;//si la premier carte inf
erieur au 2 eme
else return 0;//il sont egaux
}
void setvaleur(int val)//accesseur en ecriture sur valeur
{
this->valeur=val;
}
void setcouleur(int coul)//accesseur en ecriture sur couleur
{
this->couleur=coul;
}
int getvaleur()//accesseur en lecture sur valeur
{
return valeur;
}
int getcouleur()//accesseur en lecture sur valeur
{
return couleur;
}
void echange(Carte& ct)//echanger deux carte
{
Carte aide=*this;//en creer une carte aide pour enregistrer la premie
r carte
valeur=ct.valeur;//en affecte la valeur de 2 carte à la 1
couleur=ct.couleur;// en affecte la couleur de 2 carte à la 1
ct=aide;//en recopie la 2 carte dans la premier
}
// class destructor
~Carte(){}//c'est le compilateur qui choisie le destructeur
};

#endif // CARTE_H
#ifndef ACCUEIL_H
#define ACCUEIL_H

#include<windows.h>
#include<conio.h>
#include "bataille.h"
#include "serveur.h"
#include "client.h"
#define Entrer 13
#define Haut 72
#define Bas 80
#define gauche 75
#define droit 77
#define Esc 27

/*
cette class a pour but de faire une menu des choix pour ce jeux
c'est ici ou vous pouvez choisir votre type de match local ou reseau
et d'autre choix
*/
class Accueil
{
Paquet pq;
public:
void entete()
{
system("cls");
textcolor(1,0,11);
cout<<"Universit\x82 Moulay Ismail";
textcolor(50,0,11);
cout<<"Facult\x82 des Sciences du Meknes"<<endl;
textcolor(20,1,11);
cout<<"Licence Professionnelle JAVA/C++ "<<endl;
textcolor(27,2,11);
cout<<"ESSADDOUKI Mostafa"<<endl;
for(int i=0;i<80;i++){textcolor(i,3,2);cout<<"\xcd";}
}
void Menu(int type,int mode,int curs)
{
//type 1:local 2:reseau
//mode 1:client 2:serveur
//curs le position du curseur
entete();
textcolor(18,5,12);
cout<<"\xc9";
for(int i=19;i<58;i++){textcolor(i,5,12);cout<<"\xcd";}
cout<<"\xbb\n";
textcolor(18,6,12);
cout<<"\xba";
textcolor(31,6,10);
cout<<"Menu Des Choix";
textcolor(58,6,12);
cout<<"\xba";
textcolor(18,7,12);
cout<<"\xcc";
for(int i=19;i<58;i++){textcolor(i,7,12);cout<<"\xcd";}
cout<<"\xb9";
textcolor(24,8,11);
cout<<"Type de Match ";
gotoxy(24,12);
cout<<"Lancer le Match";
if(type==1)
{
gotoxy(40,8);
cout<<"Local";
}
else
{
gotoxy(40,8);
cout<<"Reseau";
}

if(mode==2)
{
gotoxy(24,9);
cout<<"Creer Une partie";
gotoxy(24,10);
cout<<"Trier le paquet du Cartes";
gotoxy(24,11);
cout<<"Melanger le paquet du Cartes";
}
else if(mode==1)
{
gotoxy(24,9);
cout<<"Rejoindre un Joueur ";
}
if(type==1)
{
gotoxy(24,9);
cout<<" ";
gotoxy(24,10);
cout<<"Trier le paquet du Cartes";
gotoxy(24,11);
cout<<"Melanger le paquet du Cartes";
}
textcolor(16,8,12);
for(int i=0;i<6;i++)
{
gotoxy(18,i+8);
cout<<"\xba";
gotoxy(58,i+8);
cout<<"\xba";
}
gotoxy(18,13);
cout<<"\xc8";
for(int i=19;i<58;i++){textcolor(i,13,12);cout<<"\xcd";}
gotoxy(58,13);
cout<<"\xbc";
textcolor(22,curs+7,14);
cout<<"\x10";
}
void gotoxy(int x,int y)
{
COORD mycoord;
mycoord.X= x;
mycoord.Y= y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), mycoord
);
}
void textcolor(int x,int y,WORD color)
{
HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);
gotoxy(x,y);
SetConsoleTextAttribute(hConsole,color);
}
void saisiej()
{
entete();
textcolor(19,5,4);
cout<<"\xc9";
for(int i=20;i<63;i++){textcolor(i,5,4);cout<<"\xcd";}
textcolor(38,5,4);
cout<<"\xcb";
textcolor(63,5,4);
cout<<"\xbb";
for(int i=6;i<9;i++)
{
textcolor(19,i,4);
cout<<"\xba";
textcolor(38,i,4);
cout<<"\xba";
textcolor(63,i,4);
cout<<"\xba";
}
textcolor(19,7,4);
cout<<"\xcc";
for(int i=20;i<63;i++){textcolor(i,7,4);cout<<"\xcd";}
textcolor(38,7,4);
cout<<"\xce";
textcolor(63,7,4);
cout<<"\xb9";
textcolor(22,6,3);
cout<<" Joueur 1 : ";
textcolor(22,8,3);
cout<<" Joueur 2 : ";
textcolor(19,9,4);
cout<<"\xc8";
for(int i=20;i<63;i++){textcolor(i,9,4);cout<<"\xcd";}
textcolor(38,9,4);
cout<<"\xca";
textcolor(63,9,4);
cout<<"\xbc";
}
void affiche();//methode pour afficher le paquet
void jeux()//methode pour jouer en local
{
Joueur j1,j2;
Hand h1,h2;
char nom1[20];
char nom2[20];
saisiej();
textcolor(39,6,3);
cin>>nom1;
textcolor(39,8,3);
cin>>nom2;
j1.setprenom(nom1);
j2.setprenom(nom2);
pq.split(h1,h2);
j1.sethand(h1);
j2.sethand(h2);
Bataille bt(pq);
bt.combat(j1,j2);
getche();
}
void reseauserv()
{
char nom[20];
entete();
textcolor(19,5,4);
cout<<"\xc9";
for(int i=20;i<63;i++){textcolor(i,5,4);cout<<"\xcd";}
textcolor(38,5,4);
cout<<"\xcb";
textcolor(63,5,4);
cout<<"\xbb";
for(int i=6;i<8;i++)
{
textcolor(19,i,4);
cout<<"\xba";
textcolor(38,i,4);
cout<<"\xba";
textcolor(63,i,4);
cout<<"\xba";
}
textcolor(19,7,4);
cout<<"\xc8";
for(int i=20;i<63;i++){textcolor(i,7,4);cout<<"\xcd";}
textcolor(38,7,4);
cout<<"\xca";
textcolor(63,7,4);
cout<<"\xbc";
textcolor(22,6,3);
cout<<" Votre Nom : ";
textcolor(39,6,3);
cin>>nom;
Joueur j;
j.setprenom(nom);
system("cls");
entete();
gotoxy(24,5);
Serveur sr(j);
getche();
}
void reseauclt()
{
char nom[20];
char adress[20];
entete();
textcolor(19,5,4);
cout<<"\xc9";
for(int i=20;i<63;i++){textcolor(i,5,4);cout<<"\xcd";}
textcolor(38,5,4);
cout<<"\xcb";
textcolor(63,5,4);
cout<<"\xbb";
for(int i=6;i<9;i++)
{
textcolor(19,i,4);
cout<<"\xba";
textcolor(38,i,4);
cout<<"\xba";
textcolor(63,i,4);
cout<<"\xba";
}
textcolor(19,7,4);
cout<<"\xcc";
for(int i=20;i<63;i++){textcolor(i,7,4);cout<<"\xcd";}
textcolor(38,7,4);
cout<<"\xce";
textcolor(63,7,4);
cout<<"\xb9";
textcolor(22,6,3);
cout<<"Votre Nom : ";
textcolor(22,8,3);
cout<<" Serveur : ";
textcolor(19,9,4);
cout<<"\xc8";
for(int i=20;i<63;i++){textcolor(i,9,4);cout<<"\xcd";}
textcolor(38,9,4);
cout<<"\xca";
textcolor(63,9,4);
cout<<"\xbc";
textcolor(39,6,3);
cin>>nom;
textcolor(39,8,3);
cin>>adress;
Joueur j;
j.setprenom(nom);
system("cls");
entete();
gotoxy(24,5);
Client ct(adress,j);
getche();
}
void trie()
{
pq.trier();
affiche();
getche();
}
void melange()
{
pq.melanger();
affiche();
getche();
}
void choix()
{
int y=1;
char car;
bool sortie=true;
int mode=2,type=1;
do{
Menu(type,mode,y);
car=getche();
switch(car)
{
case Haut:
{
if(y==3&& type==1)y-=2;
else if(y==5&& mode==1)y-=3;
else if(y>1)y--;
else y=5;
break;
}
case Bas:
{
if(y==1 && type==1)y+=2;
else if(y==2 && mode==1)y+=3;
else if(y==5)y=1;
else y++;
break;
}
case Entrer:
{
if(y==5)
{
if(type==1)jeux();
else if(mode==1)reseauclt();
else if(mode==2)reseauserv();
break;
}
else if(y==3)
{
trie();
}
else if(y==4)
{
melange();
}
break;
}
case droit:
{
if(y==1)
{
if(type==1)
{
type=2;
mode=2;
}
else
{
type=1;
mode=0;
}
}
else if(y==2)
{
if(mode==1)mode=2;
else mode=1;
}
break;
}
case gauche:
{
if(y==1)
{
if(type==1)
{
type=2;
mode=2;
}
else
{
type=1;
mode=0;
}
}
else if(y==2)
{
if(mode==1)mode=2;
else mode=1;
}
break;
}
case Esc:sortie=false;exit(0);
}
}while(sortie);
}
};
#endif // ACCUEIL_H
// Class automatically generated by Dev-C++ New Class wizard

#ifndef BATAILLE_H
#define BATAILLE_H
#include"paquet.h"
#include"joueur.h"
#include"graphique.h"
/*
* cette class permet de gerer une partie netre deux joueur
*/
class Bataille
{
Paquet pq;
public:
// constructeur par initialisation
Bataille(Paquet& pq)
{
this->pq=pq;
}

//methode qui gere une partie entre deux joueur


void combat(Joueur& j1,Joueur& j2);

~Bataille(){}//destructeur
};

#endif // BATAILLE_H
// Class automatically generated by Dev-C++ New Class wizard

#ifndef HAND_H
#define HAND_H

/*
* catte class representer une main qui ce caracterise par une liste du cartes
*/
class Hand
{
Carte listcarte[26];
int nb_carte;
public:
// constructeur par defaut
Hand()
{
this->nb_carte=26;//au debut en met le nombre carte du carte sur u
ne main(hand) a 26
}
// constructeur par recopie
Hand(const Hand& h)
{
this ->nb_carte=h.nb_carte;
for(int i=0;i<26;i++) listcarte[i]=h.listcarte[i];
}
void setlist(Carte* t)//accesseur en ecriture sur la liste des cartes
{
for(int i=0;i<26;i++)
{
listcarte[i]=t[i];
}
}
Carte& tirer()//pour tirer une carte de la main
{
int indice = rand()%(this->nb_carte);//choisir un indice entre 0 et l
e nombre du carte
Carte *ct=new Carte(listcarte[indice]);//en memoirise la carte a tire
r
decaler(indice,nb_carte);//decaler la liste des carte
listcarte[nb_carte-1]=*ct;//en met la carte a tirer a la fin
nb_carte--;//decrementé le nombre du carte sur la main
return listcarte[nb_carte];//retourner la carte choisie
}
/*
methode pour decaler la liste des carte
apres un tirer du carte de la main
*/
void decaler(int debut,int fin)//
{
//debut: la position du carte tirer
//fin :position du dernier carte sur la main
for(int i=debut;i<fin;i++)
{
listcarte[i]=listcarte[i+1];
}
}
int getnb_carte(){return nb_carte;}//accesseur en lecture sur le nombre d
u carte reste dans la main
Carte& getcarte(int pos){return listcarte[pos];}
// class destructor
~Hand(){delete[] listcarte;}//destructeur
};

#endif // HAND_H
// Class automatically generated by Dev-C++ New Class wizard

#ifndef JOUEUR_H
#define JOUEUR_H

/*
* le joueur
*/
class Joueur
{
char *prenom;
Hand hand;
int score;
public:
// constructeur par defaut
Joueur()
{
this->score=0;//en in initialise le score du joueur par 0 au debut
}
void setprenom(char *nom)//accesseur en ecriture sur le prenom
{
prenom=new char[strlen(nom)+1];//allouer le chmps prenom par un table
au du caractereau taille du argument nom
strcpy(this->prenom,nom);//copie le nom vers prenom
}

void sethand(Hand& h)//accesseur en ecriture sur hand


{
this->hand=h;
}

Hand& gethand(){return hand;}//accesseur en lecture sur hand

void increment()// incrementer le score du joueur


{
this->score++;
}

char *getprenom(){return prenom;}//accesseur en lecture sur le prenom

int getscore(){return score;}//accesseur en lecture sur le score

~Joueur(){delete [] prenom;}
};

#endif // JOUEUR_H
Main

#include <iostream>
#include<winsock2.h>
#include"accueil.h"
#include"bataille.h"
#include"client.h"

using namespace std;

char *tabvaleur[]={"1","2","3","4","5","6","7","8","9","10","valet","rein","roi"};
char *tabcouleur[]={"carreau","trefle","coeur","pique"};

void Bataille::combat(Joueur& j1,Joueur& j2)


{
Hand h1=j1.gethand();
Hand h2=j2.gethand();
Carte ct1;
Carte ct2;
Graphique bat;
bat.add(90,80,6,j1.getprenom());
bat.add(560,80,6,j2.getprenom());
bat.add(1,100,6,"Score :");
int rn=1;
do
{
// afficher le round
char round[3];
bat.add(270,140,9,"Round :");
sprintf(round,"%d",rn);
bat.add(325,140,9,round);
bat.add(545,80,9," ");
bat.add(75,80,9,"-->");
getch();
//bat.add(300,170,4," ");
ct1=h1.tirer();// tirer une carte du main de joueur 2
delay(500);
bat.printcarte(80,170,170,260,ct1);
//outtext(" ");
//bat.add(80,190,11,tabcouleur[ct1->getcouleur()]);
//outtext(" ");
bat.add(75,80,9," ");
bat.add(545,80,9,"-->");
getch();
ct2=h2.tirer();// tirer une carte du main de joueur 2
bat.printcarte(535,170,625,260,ct2);
//bat.add(555,170,11,tabvaleur[ct2->getvaleur()]);
//outtext(" ");
//:bat.add(545,190,11,tabcouleur[ct2->getcouleur()]);
//outtext(" ");

if(ct1.compare(ct2)==1)//c'est a dire la carte du joueur 1 est su


perier que la carte du joueur 2
{
j1.increment();
char valeur[4];
sprintf(valeur,"%d",j1.getscore());
bat.add(300,170,4,"<----- ");
bat.add(90,100,7,valeur);
outtext(" ");
}
else if(ct1.compare(ct2)==2)//c'est a dire la carte du joueur 1 e
st inferieur que la carte du joueur 2
{
j2.increment();
char valeur[2];
sprintf(valeur,"%d",j2.getscore());
bat.add(300,170,4,"-----> ");
bat.add(555,100,7,valeur);
outtext(" ");
}
else//il sont egaux
{
bat.add(300,170,4,"egalite");
}
rn++;
}while(h1.getnb_carte()> 0 && h2.getnb_carte()> 0);
if(j1.getscore()>j2.getscore())
{
bat.add(260,260,4,j1.getprenom());
bat.add(314,260,4,"A gagnier le Match Bravo ");
}
else if(j1.getscore()<j2.getscore())
{
bat.add(260,260,4,j2.getprenom());
bat.add(314,260,4,"A gagnier le Match Bravo ");
}
else
{
bat.add(260,260,4,"Géniale vous etes dans le meme niveau ");
}
getch();
closegraph();
}

void Accueil::affiche()//afficher le paquet du carte


{
entete();
textcolor(28,3,4);
cout<<"Liste des Cartes";
textcolor(15,3,4);
cout<<"\xc9";
for(int i=16;i<53;i++){textcolor(i,3,4);cout<<"\xcd";}
textcolor(22,3,4);
cout<<"\xcb";
textcolor(38,3,4);
cout<<"\xcb";
textcolor(53,3,4);
cout<<"\xbb";
textcolor(15,4,4);
cout<<"\xba";
cout<<" N\xf8 ";
textcolor(22,4,4);
cout<<"\xba";
cout<<" Valeur ";
textcolor(38,4,4);
cout<<"\xba";
cout<<" Couleur ";
textcolor(53,4,4);
cout<<"\xba";
int aff=6;
Carte ct;
for(int i=0;i<52;i++)
{
for(int j=16;j<53;j++){textcolor(j,aff-1,4);cout<<"\xcd";}
textcolor(15,aff,4);
cout<<"\xba";
textcolor(22,aff,4);
cout<<"\xba";
textcolor(38,aff,4);
cout<<"\xba";
textcolor(53,aff,4);
cout<<"\xba";
textcolor(15,aff-1,4);
cout<<"\xcc";
textcolor(22,aff-1,4);
cout<<"\xce";
textcolor(38,aff-1,4);
cout<<"\xce";
textcolor(53,aff-1,4);
cout<<"\xb9";
ct=pq.getcarte(i);
textcolor(17,aff,4);
cout<<i+1;
textcolor(29,aff,4);
cout<<tabvaleur[ct.getvaleur()];
textcolor(41,aff,4);
cout<<tabcouleur[ct.getcouleur()];
aff+=2;
}
for(int j=16;j<53;j++){textcolor(j,aff-1,4);cout<<"\xcd";}
textcolor(15,aff-1,4); cout<<"\xc8";
textcolor(22,aff-1,4); cout<<"\xca";
textcolor(38,aff-1,4); cout<<"\xca";
textcolor(53,aff-1,4); cout<<"\xbc";
}
void Graphique::printcarte(int x,int y,int x1,int y1,Carte& ct)
{
rectangle(x,y,x1,y1);
moveto(x,y+30);
lineto(x1,y+30);

if(ct.getvaleur()<10)
{
moveto(x+25,y+10);
outtext(" ");
moveto(x+40,y+10);
outtext(tabvaleur[ct.getvaleur()]);
outtext(" ");
moveto(x+20,y+50);
outtext(tabcouleur[ct.getcouleur()]);
outtext(" ");
}
else
{
moveto(x+25,y+10);
outtext(tabvaleur[ct.getvaleur()]);
outtext(" ");
moveto(x+20,y+50);
outtext(tabcouleur[ct.getcouleur()]);
outtext(" ");
}
}
int main()
{
srand(time(0));//en initialise le generateur aleatoire
Accueil ac;
Joueur j1;
ac.choix();
getche();
}
// Class automatically generated by Dev-C++ New Class wizard

#ifndef PAQUET_H
#define PAQUET_H
#include"carte.h"
#include"hand.h"
using namespace std;
/*
* paquet qui representer l'ensemble du cartes(le paquet)
*/
class Paquet
{
Carte carte[52];

public:
// constructeur par defaut
Paquet()
{
int i=0;
for (int coul=0; coul<4; coul++)//0 à 3 (carreau, trèfle, coeur, piqu
e)
for (int val=0; val<13; val++)// 1 à 10 + valet,reine, roi
{
carte[i].setvaleur(val);
carte[i].setcouleur(coul);
i++;
}
}
void trier()
{
for(int i=0;i<51;i++)
{
for(int j=i+1;j<52;j++)
{
if(this->carte[i].getvaleur()>this-
>carte[j].getvaleur())
{
// permuter les deux carte
carte[i].echange(carte[j]);
}
}
}
}
// Melanger l'ensemble du cartes
void melanger()
{
int indice;
int pos=52;
for(int i=0;i<52;i++)
{
indice = rand()%(pos);//en prendre un indice d'une carte aux has
ard
//permutation du 2 carte
carte[indice].echange(carte[pos-1]);//en remplace la carte du l'
indice par le dernier carte
pos--;// en decrement la fin du paquet pour ne pas melanger la c
arte choisie encore une foix
}
}
// couper le paquet en deux sous paquet
void split(Hand& h1,Hand& h2)
{
Carte list1[26],list2[26];//en creer deux pointeur de list de carte
int a=0;
// en fais la distibution du paquet sur deux list
for(int i=0;i<26;i++)
{
list1[i]=carte[a];
a++;
list2[i]=carte[a];
a++;
}
h1.setlist(list1);//affectation du la list
h2.setlist(list2);//affectation du la list
}
Carte getcarte(int pos)//retourne la carte dans la position pos
{
return carte[pos];
}
// class destructor
~Paquet(){delete[] carte;}//destructeur
};

#endif // PAQUET_H

Vous aimerez peut-être aussi