A priori, oui.
Tu as deux objets, donc si tes variables membres ne sont pas static, tu auras bien 2 jeux de données.
A priori, oui.
Tu as deux objets, donc si tes variables membres ne sont pas static, tu auras bien 2 jeux de données.
ok merci de ton aide je vais tester sa je reviendrai si j'ai un probleme merci
je comprend plus rien ...
voici mon codeIci il s'emblerai que je paramètre J (ou est passer J1 ou J2 ) ne soit pas pris en compte car normalement mais int devrai etre decrementer et ce n'est pas le cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void Joueurs::VerifCouler(int NumeroBateaux,Joueurs J) { int BateauxToucher; switch(NumeroBateaux) { case 5: J.GetSonPorteAvion(); J.SetSonPorteAvion(); ... pour chaque bateau
Il c'est mon accesseur car mon entier est en privé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int Joueurs::GetSonPorteAvion() { return PorteAvion; }
Et la je voulais faire une fonction pour décrementer mon int a chaque fois qu'il est toucher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Joueurs::SetSonPorteAvion() { PorteAvion=PorteAvion-1; std::cout<<std::endl; }
Si quelque peu m'expliquer ou est mon pb car je pence que sa vien de mon paramètre constructeur mais je compren pas pourquoi car il n'y a pas d'erreur
Bon apres quelque test j'ai decouvert que en faite sa n'accede pas a ma fonction GetPorteAvion, j'ai rajouter de std::cout dedans et sa ne les affiche pas donc sa ne doit pas y acceder...
Un effort a faire: ecrire correctement tes phrases avec le moins de fautes d'orthographe possible. Merci.
Tu ne veux vraiment pas poster tout ton code sur le site que je t'ai indiqué?
Tu fais J.GetPorteAvion() mais tu ne le stocke nulle part.
ba si je vais le mettre mais il n'y a aucun commentaire donc je c'est pas si vous allez comprendre quelquechose. Et que veux tu dire par stocker ???
Je te met le code
main.cpp
Partie.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include <iostream> #include <map> #include "Partie.hpp" int main() { int x; std::cout<<"Menu:"<<std::endl; std::cout<<"1- Créer une partie"<<std::endl; std::cout<<"2- Charger une partie"<<std::endl; std::cout<<"3- Exit"<<std::endl; std::cin>>x; Partie Partie1; switch(x) { case 1: Partie1.execute();break; case 2: break; case 3: break; default: main(); } return 0; }
Partie.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <iostream> #include <map> #include <set> #include "Joueurs.hpp" class Partie { Joueurs J1; Joueurs J2; int TabBateauxJ1 [25][25]; int TabBateauxJ2 [25][25]; public: int SonTirX,SonTirY; int SonX,SonY; char SaDirection; int NumeroBateau; int PorteAvions; int SaLongueur; void PlacementBateaux(int Tab [][25]); void Tir(int TabJr [][25],char TabTir[][25],Joueurs J); void initialisation(); void TourDeJeu(); void affiche(std::string); void execute(); void PauseEfface(); char TabTirJ2[25][25]; char TabTirJ1[25][25]; Partie(); };
Joueurs.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176 #include "Partie.hpp" #include <stdexcept> #include "Bonus.hpp" Partie::Partie() {} void Partie::initialisation() { for(int y = 0; y < 25; y++) { for(int x = 0; x < 25; x++) { TabBateauxJ1[x][y]=0 ; TabBateauxJ2[x][y]=0; TabTirJ2[x][y]='-'; TabTirJ1[x][y]='-'; } } } void Partie::PlacementBateaux(int Tab [][25]) { int Bateaux=2; while(Bateaux>=2 && Bateaux<=5) { std::cout<<"Entrez une position pour le "; switch(Bateaux) { case 2: std::cout<<"Torpilleur"<<std::endl;break; case 3: std::cout<<"Destroyer"<<std::endl;break; case 4: std::cout<<"Croiseur"<<std::endl;break; case 5: std::cout<<"Porte-Avion"<<std::endl;break; default: std::cout<<"erreur"<<std::endl; } //try //{ std::cin>>SonX>>SonY; // if(SonX<=0 || SonX>25 || SonY<=0 || SonY>25) // throw(true); //} //catch(bool & e) //{ // std::cout<<"Erreur veuillez entrer un chiffre entre 1 et 25"<<std::endl; // std::cin>>SonX>>SonY; //} std::cout<<"Placement Horizontal(h) ou vertical(v) ?"<<std::endl; std::cin>>SaDirection; SaLongueur=0; if (SaDirection=='h' || SaDirection=='H') { while(SaLongueur<Bateaux) { int Taille=Bateaux; std::cout<<SonX<<";"<<SonY<<std::endl; (Tab[SonX-1][SonY-1])=Taille; // probleme si le tableau vaut Tableau; [SonX-1][SonY-1]car un tableau commence �0 SonY++; SaLongueur++; } } if (SaDirection=='v' || SaDirection=='V') { while(SaLongueur<Bateaux) { int Taille=Bateaux; std::cout<<SonX<<";"<<SonY<<std::endl; (Tab[SonX-1][SonY-1])=Taille; // probleme si le tableau vaut Tableau; [SonX-1][SonY-1]car un tableau commence �0 SonX++; SaLongueur++; } } Bateaux++; std::cout<<std::endl; } } void Partie::affiche(std::string Joueur) { if(Joueur=="J1") { std::cout<<"Maps Joueurs 1"<<std::endl<<std::endl; for(int i = 0; i < 25; i++) { for(int j = 0; j < 25; j++) std::cout << TabBateauxJ1[i][j]; std::cout<<" "; for(int j = 0; j < 25; j++) std::cout << TabTirJ1[i][j]; std::cout << std::endl; } } if(Joueur=="J2") { std::cout<<"Maps Joueurs 2"<<std::endl<<std::endl; for(int i = 0; i < 25; i++) { for(int j = 0; j < 25; j++) std::cout << TabBateauxJ2[i][j]; std::cout<<" "; for(int j = 0; j < 25; j++) std::cout<<TabTirJ2[i][j]; std::cout << std::endl; } } } void Partie::Tir(int TabJr [][25],char TabTir[][25], Joueurs J) { if(TabJr==TabBateauxJ2) { std::cout<<"Joueur 1 "; } else { std::cout<<"Joueur 2 "; } std::cout<<"Entrez la position ou vous souhaitez tirer"<<std::endl; std::cin>>SonTirX>>SonTirY; NumeroBateau=TabJr[SonTirX-1][SonTirY-1]; if(TabJr[SonTirX-1][SonTirY-1]<=5 && TabJr[SonTirX-1][SonTirY-1]>0) { std::cout<<"toucher"<<std::endl; TabTir[SonTirX-1][SonTirY-1]='T'; std::cout<<"NumeroBateau"; std::cout<<NumeroBateau<<std::endl; J.VerifCouler(NumeroBateau,J); } else { std::cout<<"a l'eau"<<std::endl; TabTir[SonTirX-1][SonTirY-1]='E'; //Tir(); } } void Partie::execute() { initialisation(); std::cout<<"Joueur1 place bateau"<<std::endl; PlacementBateaux(TabBateauxJ1); affiche("J1"); PauseEfface(); std::cout<<"Joueur 2 place bateau"<<std::endl; PlacementBateaux(TabBateauxJ2); affiche("J2"); PauseEfface(); TourDeJeu(); std::cout<<std::endl; } void Partie::PauseEfface() { system("pause"); //met en pause en attente d'une touche system("cls"); //efface le contenu de la console } void Partie::TourDeJeu() { //Bonus Bonus1; //Bonus1.tirageBonus(); //J1.TestToucherJ1(); Tester es constructeur //J2.TestToucherJ2(); Tester les constructeur Tir(TabBateauxJ2,TabTirJ1,J2); affiche("J1"); PauseEfface(); //Bonus1.tirageBonus(); Tir(TabBateauxJ1,TabTirJ2,J1); affiche("J2"); PauseEfface(); TourDeJeu(); }
Joueurs.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <string> #include <iostream> class Joueurs { int PorteAvion; int Cuirasse; int Torpilleur; int Destroyer; public: int TabTirJ1 [25][25]; int TabTirJ2 [25][25]; Joueurs(); void VerifCouler(int,Joueurs); int GetSonTorpilleur(); int GetSonPorteAvion(); int GetSonDestroyer(); int GetSonCuirasse(); void SetSonTorpilleur(); void SetSonPorteAvion(); void SetSonDestroyer(); void SetSonCuirasse(); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include "Joueurs.hpp" Joueurs::Joueurs() :PorteAvion(5),Cuirasse(4),Destroyer(3),Torpilleur(2) { std::cout<<"PorteAvion créer"<<PorteAvion<<std::endl; std::cout<<"Cuirasse créer"<<Cuirasse<<std::endl; std::cout<<"Destroyer créer"<<Destroyer<<std::endl; std::cout<<"Torpilleur créer"<<Torpilleur<<std::endl; } void Joueurs::VerifCouler(int NumeroBateaux,Joueurs J) { //std::cout<<PorteAvion<<Cuirasse<<Destroyer<<Torpilleur; int BateauxToucher; switch(NumeroBateaux) { case 5: J.GetSonPorteAvion();/*J.GetSonPorteAvion();*/break; case 4: /*J.GetSonCuirasse();*/break; case 3: /*J.GetSonDestroyer();*/break; case 2: /*J.GetSonTorpilleur();*/break; } if(Torpilleur<=0 || PorteAvion<=0) { std::cout<<"Bateau couler !!!"<<std::endl; if(Torpilleur==0 && Destroyer==0 && Cuirasse==0 && PorteAvion==0) { std::cout<<"Joueurs perd la partie !!!! Game over"<<std::endl; } } } int Joueurs::GetSonPorteAvion() { std::cout<<"PorteAvion"<<std::endl; //c'était pour vérifier les valeur avant et apres le Set() mais sa n'affiche rien donc la fonction n'est pas acceder je pence SetSonPorteAvion(); std::cout<<PorteAvion<<std::endl; return PorteAvion; } void Joueurs::SetSonPorteAvion() { std::cout<<"aaaaaa"<<std::endl; PorteAvion=PorteAvion-1; std::cout<<std::endl; } Meme fonction Get et Set pour les autre bateau
voila mon code si il y a quelque chose que tu ne comprend pas demande moi
Salut,
Bon tout d'abord, je pense qu'il faudrait que tu revois les notions sur les objets car c'est pas ca...
Bon sinon.
Getter et setter ne sont des fonctions qui ne font que retourner une valeur ou la modifier avec une nouvelle valeur.
Ainsi tu devrait avoir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int Joueur::getCuirasse() const {
Désolé, un soucis de clavier, et le message a été envoyé.
Bon je reprend:
et meme chose pour tes autres setter et getter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int Joueur::getCuirasse() const { return cuirasse; } void Joueur::setCuirasse(int value) { cuirasse = value; }
Ensuite, dans ta fonction verif bateaux, comme tu es dans ton objet Joueur, pas besoin de le passer en parametre, et dans la fonction, la variable correspond automatiquement a la variable membre.
ainsi:
Cependant, je ne suis pas sur que ce code fonctionne mieux car je n'ai pas bien compris ce que représente NumeroBateaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void Joueurs::VerifCouler(int NumeroBateaux) { int BateauxToucher; switch(NumeroBateaux) { case 5: porteAvion --;break; case 4: cuirasse --; break; case 3: destroyer--;break; case 2: torpilleur--;break; } ...
Voila avec cela tu devrais pouvoir avancer. Cependant, si tu as du temps, essai de revoir ta conception car c'est pas terrible en tant que programmation objet.
Pour te donner des pistes, l'objet Joueur devrait a mon avis comporter les grilles de ses bateaux et celle de son jeu (2 grilles).
Ensuite dans ta classe partie, tu appelles successivement
J1.getNewTir(x1, y1);
J1.setResultTir(J2.setNewTir(x1, y1));
J2.getNewTir(x2, Y2);
J2.setResultTir(J1.setNewTir(x2, y2));
getNewTir definit la position du nouveau tir d'aprés la grille des tirs, setNewTir verifie la grille de position des bateaux et renvoie si le coup est à l'eau ou touché, setResult conserve le resultat du tir dans la grille des coups du joueur.
Voilà quelques infos qui pourront certainement t'aider.
Dernière remarques comme le dit lun4t1k, il serait bon de faire attention à ceux que tu écris car ce n'est pas évident de te lire . Meme si l'orthographe n'est pas mon fort, j'essaie tout de meme d'ecrire le plus lisiblement possible.
ok merci en effet cela peu m'aider et j'ai aussi du mal avec les objet comme tu la dit ... Je comprend ce que tu veut dire mais je voit pas comment on peu déclarer les tableau dans le constructeur si c'est bien cela que tu voulais dire, j'avait deja essayer sa mais sa marche pas...
POur en faite créer automatiquement le tableau du joueurs ce qui me permettrai en effet d'utiliser mon tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Joueurs::Joueur(std::string J) ::PorteAvion(5),Cuirasse(4),Destroyer(3),Torpilleur(2) { int TabBateau+'J'[25][25] }
Salut,
Bon bien que pas demandé voici encore quelques pistes:
C'est pour revenir à l'objet.
Maintenant que tes grilles font bien partie de l'objet Joueur,
Tu peux supprimer de l'objet Partie la methode innitialise qui se retrouve dans le contructeur de Joueur et plaement bateau et affiche sont aussi des methode de Joueur.
Avec tout cela, tu devrais t'en sortir.
oui tinkiète j'y avait deja pencer merci de ton aide en tout cas !!!
A si un dernier petit soucis que j'aimerai éclairer, en faite quand je réalise sa:il me dit que ma fonction ne peut pas prendre J1 car J1 est de ma classe Joueurs et affiche de ma classe Partie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part J1.affiche()
L'erreur générer:
Mais il va donc falloir que je mettent toute mes fonction dans ma classe Joueurs si je veut utiliser mes J1 et J2 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 1>e:\Partie.cpp(165) : error C2039: 'affiche'*: n'est pas membre de 'Joueurs' 1> e:\Joueurs.hpp(6)*: voir la déclaration de 'Joueurs'
Or ma analyse ne prévoit pas sa et sa parait plus logique de mettre mes fonction PlacementBateaux et affiche dans Partie non ???
Il doit surment y avoir un moyen mais je ne voit pas lequel ...
Si vous savez pouvez-vous me dire merci, en attendant bas je tout mettre dans joueurs
Il faudrait effectivment mieux que affiche soit dans Joueur.
Si tu veux utilisé une instruction du style J1. il faut que ce qui est derriere le '.' soit un membre de la classe Joueur.
Juste pour ton probleme et en te mettant en garde car en terme de conception c'est pas terrible, tu peux faire dans partie: Affiche(J1);
a ce moment tu as
Voilà qui peut peut être te donner un coup de pouce.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 partie::Affiche (Joueur J) { magrille = J.GetGrille(); for (uint i...) for (uint j ...) cout << ... }
D'accord merci je vais voir sa, merci encore de ton aide
bon c'est remoi j'ai pratiquement fini cependant il me reste un petit soucis et pas des moindre.
Voila en faite mon projet inclus des bonus (tir multiple...) et la j'ai un probleme je lance ma fonction j'entre les différent position pour les tirs je met J.affiche tout s'affiche correctement je voit bien ou les tir on été lancer et quelle sont leur résultats mais des que je quitte la fonction je ne voit plus les tire réaliser c'est comme si je n'était jamais passer dans la fonction ...
voila mon code:
ma fonction SetNewTir(SonTirX,SonTirY) retourne si le bateau est toucher ou non et renvoie T ou E vers la fonction SetResultTir et ma fonction SetResultTir(int,int,char) me place le char retourner par la fonction SetNewTir dans mon tableau de jeu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void Bonus::TirMulti(int TirBonus,Joueurs J,Joueurs Jadv) { int SonTirX; int SonTirY; while(TirBonus>=0) { std::cout<<"entrez la position ou vous souhaitez tirer (entre 1 et 25)"<<std::endl; std::cin>>SonTirX>>SonTirY; J.SetResultTir(SonTirX,SonTirY,Jadv.SetNewTir(SonTirX,SonTirY)); J.VerifCouler(SonTirX,SonTirY); TirBonus=TirBonus-1; } J.affiche(); // ici mon affichage fonctionne correctement }
ca sera surement mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void Bonus::TirMulti(int TirBonus,Joueurs& J,Joueurs& Jadv)
euh non sa ne change rien sa ne m'affiche pas.
Dans la fonction l'affichage est correcte mais des que je sort les chiffres que j'ai insérer dans mon tableau disparaisse ...
Est ce que tu appelles affiche juste en sortant de tirmulti ?
Peux tu me montrer cette partie du code appel a tirmulti jusqu'à affiche à l'exterieur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Bonus1.tirageBonus(GetJoueurs(GetCompteur()),GetJoueurs(GetCompteur()+1)); //Tirage au sort d'un bonus J1.affiche();ici j'appelle donc ma fonction TirageBonus qui doit me générer un nombre aléatoire et me renvoie vers une fonction. Et donc si je vais vers TirMulti ou Leurres l'affichage ce réalise correctement dans la fonction mais des qu eje sort sa n'affiche plus rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void Bonus::tirageBonus(Joueurs & J,Joueurs & Jadv) { srand(time(NULL)); ranD=rand()%10; std::cout<<"le chifre est"<<ranD<<std::endl; switch(/*ranD*/2) { case 1:std::cout<<"Aucun Bonus"<<std::endl;AucunBonus();break; case 2:std::cout<<"Tir multiple"<<std::endl;TirMulti(4,J,Jadv);break; case 3:std::cout<<"Leurres"<<std::endl;Leurres(J);break; case 4:std::cout<<"PasseTour"<<std::endl;PasseTour(J);break; case 5:std::cout<<"TourPerdu"<<std::endl;TourPerdu(J);break; case 6:std::cout<<"Devoilement<<std::endl";Devoilement(J);break; case 7:std::cout<<"Radar"<<std::endl;Radar(Jadv);break; default:std::cout<<"Aucun Bonus"<<std::endl;AucunBonus();break; } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager