Probleme d'algorithme C++ d''un jeu puissance4

Résolu/Fermé
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012 - 2 nov. 2012 à 05:49
WarthogDJ Messages postés 202 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 septembre 2020 - 6 nov. 2012 à 18:31
Bonjour,

J'ai un probleme avec un algorithme de jeu puissance4 en C++. Dans mon code j'ai defini X comme etant le cymbole du joueur1 et M le cymbole du joueur2 (la seule facon de jouer aux jeu est dans le compliateure, il n'y a pas de visuel, contrainte de travaille). Dans mon verifierVictoire j'essai de reprende X et M mais Visuel Studio me retourne des erreure en disatn que x et m ne sont pas defini.

Error 1 error C2065: 'X' : undeclared identifier
Error 2 error C2065: 'M' : undeclared identifier

Sa me fais ca chaque endroit ou je les ai marque. Quelqun sait pourquoi? J'ai eseyer plusieure chose et rien ne marche, je doit le rendre Lundi de la semaine prochaine et le code ne compile pas, sa va mal. Il me reste encore aussi a mettre l'inteligence Artificiel (je n'ai aucune idee commen la faire) pour donner le choix de jouer contre un humain ou contre l'ordi. Je pense aussi Mettre un choix de regarder un combat avec 2 inteligence artificiel un conter l'autre, avec un timer evidament si non ils jourais trop vite.


Je met mon code apres le message. Le verifierVictoire est le dernier en bas.


Desole pour l'absence d'accent et autremmon clavier a changer de langue tout seul, je sait pas pourquoi et je ne suis pas capable de le remettre


Merci
LeNoobDeLOrdie



Le code:


#include <iostream>

const int LONGUEUR = 6;
const int LARGEUR = 7;
const char CASE_VIDE = '0';
//const char demanderChoix = 'D';

void Afficher(char grid[LONGUEUR][LARGEUR]);
void Initialiser(char grid[LONGUEUR][LARGEUR]);
bool Placer(char grid[LONGUEUR][LARGEUR], int x, char symboleJoueur);
bool Placer2(char grid[LONGUEUR][LARGEUR], int x, char symboleJoueur2);
char DemanderChoix();
//bool twoPlayer = voide;

int main()
{
// Variables
char grid[LONGUEUR][LARGEUR]; /*= {
{'0','0','0','0','0','0','0'},
{'0','0','0','0','0','0','0'},
{'0','0','0','8','0','0','0'},
{'0','0','0','0','0','0','0'},
{'0','0','0','0','0','0','0'},
{'0','0','0','0','0','0','0'}
};*/



// Execution
Initialiser(grid);
Afficher(grid);

do
{
//std::cout << "Computer battel? y\n"; std::cin >> choix;
//(si le joueur entre y computreBattel = true, si le joueur entre n computerBattel = false)
//std::cout << "Two player? y\n"; std::cin >> choix;
//(si le joueur entre y twoPlayer = true, si le joueur entre n twoPlayer = false)
char choixColonne;
do
{
std::cout << "Player1"; std::cin >> choixColonne;
choixColonne = DemanderChoix();
}while(!Placer(grid, choixColonne - 'A', 'X'));
Afficher(grid);
//verifierVictoire(i, j);

char choixLigne;
do
{
std::cout << "Player2"; std::cin >> choixColonne;
choixLigne = DemanderChoix();
}while(!Placer(grid, choixLigne - 'A', 'M'));
Afficher(grid);
//verifierVictoire(i, j);

}while(true/*!VerifierVictoire()*/);

return 0;
}

char DemanderChoix()
{
char choix;
do
{

std::cout << "Please enter a letter between A- G"; std::cin >> choix;

if (choix >= 'a' && choix <= 'z')
{
choix += ('A' - 'a');
}
}while(!(choix >= 'A' && choix <= 'G'));

return choix;
}

bool Placer(char grid[LONGUEUR][LARGEUR], int x, char symboleJoueur)
{
bool isFound = false;
int i;
for( i = LARGEUR-1; i >= 0; i--)
{
if(grid[i][x] == CASE_VIDE)
{
grid[i][x] = symboleJoueur;
return true;
}
}

return isFound;
}

bool Placer2(char grid[LONGUEUR][LARGEUR], int m, char symboleJoueur2)
{
bool isFound = false;
int i;
for( i = LARGEUR-1; i >= 0; i--)
{
if(grid[i][m] == CASE_VIDE)
{
grid[i][m] = symboleJoueur2;
return true;
}
}

return isFound;
}


void Initialiser(char grid[LONGUEUR][LARGEUR])
{
for(int i = 0; i < LONGUEUR; i++)
{
for(int j = 0; j < LARGEUR; j++)
{
grid[i][j] = CASE_VIDE;
}
}
}

void Afficher(char grid[LONGUEUR][LARGEUR])
{
std::cout << " A B C D E F G" << std::endl;
for(int i = 0; i < LONGUEUR; i++)
{
std::cout << i+1 << "." << '|';
for(int j = 0; j < LARGEUR; j++)
{
std::cout << grid[i][j] << '|';
}
std::cout << std::endl;
}
}


char verifierVictoire(int i, int j)
{

char grid[LONGUEUR][LARGEUR];

if (grid [i][j] == X || M)
{
if (grid [i ++][j] == X || M)
{
if (grid [i + 2][j] == X || M)
{
if (grid [i + 3][j] == X || M)
{
if (grid [i][j] == X)
{

}std::cout << "Player1 win!"; std::cin >> verifierVictoire;

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}
}
}
}
}

if (grid [i][j] == X || M)
{
if (grid [i][j ++] == X || M)
{
if (grid [i][j + 2] == X || M)
{
if (grid [i][j + 3] == X || M)
{
if (grid [i][j] == X)
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}

}
}
}
}

if (grid [i][j] == X || M)
{
if (grid [i ++][j ++] == X || M)
{
if (grid [i + 2][j + 2] == X || M)
{
if (grid [i + 3][j + 3] == X || M)
{
if (grid [i][j] == X)
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}

}
}
}
}

if (grid [i][j] == X || M)
{
if (grid [i --][j --] == X || M)
{
if (grid [i - 2][j - 2] == X || M)
{
if (grid [i - 3][j - 3] == X || M)
{
if (grid [i][j] == X)
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}

}
}
}
}

if (grid [i][j] == X || M)
{
if (grid [i ++][j --] == x || M)
{
if (grid [i + 2][j --] == X || M)
{
if (grid [i + 3][j --] == X || M)
{
if (grid [i][j] == X)
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}

}
}
}
}

if (grid [i][j] == X || M)
{
if (grid [i --][j ++] == X || M)
{
if (grid [i --][j + 2] == X || M)
{
if (grid [i --][j + 3] == X || M)
{
if (grid [i][j] == X)
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == M)
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}

}
}
}
}
}
A voir également:

7 réponses

WarthogDJ Messages postés 202 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 septembre 2020 8
Modifié par WarthogDJ le 2/11/2012 à 17:06
J'avoue que déja c'est pas lisible mais par exemple dans la ligne

if(grid [i][j] == X || M)

ce que veut dire si grid [i][j] == X ou M est utilisé comme constante je pense

faut mettre des parentheses

if( grid [i][j] == ( X || M))

j'ai pas vu de #define M

ni de déclaration de M


Donc enfait je me pose la même question que le compilateur c'est quoi M ?


*************Une signature est un gribouillis ****************
C'est important?************************Au yeux des gens oui.
1
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
2 nov. 2012 à 18:04
Bonjour LeNoobDeLOrdi,

Déclaration des variables :
bool Placer(char grid[LONGUEUR][LARGEUR], int x, char symboleJoueur);
bool Placer2(char grid[LONGUEUR][LARGEUR], int x, char symboleJoueur2); 

WarthogDJ a raison .. je ne trouve pas la déclaration de "m" !!
1
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012
Modifié par LeNoobDeLOrdi le 2/11/2012 à 23:54
Merci pour vos reponce.

J'ai regle le probleme. maintenant toute les ligne du verifierVictoire ressemble a ca.

if (grid [i][j] == 'X' || 'M')


sa me donne encore une erreure mais je la comprend pas.
J'essai de dire au joueur apres la verification qui a gagner mais sa macher pas.

Voici une des ligne en question:
std::cout << "Player1 win!"; std::cin >> verifierVictoire;


Les erreure que sa me donne sont les suivante:
1 IntelliSense: no operator ">>" matches these operands
operand types are: std::istream >> char (int i, int j)


Je ne comprend pas quel est mon erreure.


Merci



Voici la premiere parti de l'algo verifierVictoire (c'est deja plus lisible en petite partie) et avec les modification:


char verifierVictoire(int i, int j)
{

char grid[LONGUEUR][LARGEUR];

if (grid [i][j] == 'X' || grid [i][j] == 'M')
{
if (grid [i ++][j] == 'X' || grid [i ++][j] == 'M')
{
if (grid [i + 2][j] == 'X' || grid [i + 2][j] == 'M')
{
if (grid [i + 3][j] == 'X' || grid [i + 3][j] == 'M')
{
if (grid [i][j] == 'X')
{
std::cout << "Player1 win!"; std::cin >> verifierVictoire;
}

if (grid [i][j] == 'M')
{
std::cout << "Player2 win!"; std::cin >> verifierVictoire;
}
}
}
}
}
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 nov. 2012 à 10:10
Bonjour ,
Cela fait un certain temps que je n'ai plus fait du "C".
Est-ce correct ? std::cout << "Player1 win!"; std::cin >> verifierVictoire;
Ce ne serait pas plutôt : std::cout << "Player1 win!"; std::cin << verifierVictoire;
0
WarthogDJ Messages postés 202 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 septembre 2020 8
Modifié par WarthogDJ le 3/11/2012 à 15:36
Non elitote
cin est surdéfinie avec l'opérateur >>
cout est surdéfinie avec l'opérateur <<

pour ces erreur je te conseille de mettre dans ta page main.cpp
#include <iostream>  

using namespace std;  


tu n'aura donc plus a utiliser le std::

if (grid [i + 3][j] == 'X' || grid [i + 3][j] == 'M')   

avec cette ligne M est un char ce qui est correct au vu du
char grid[LONGUEUR][LARGEUR];   


ce pendant ton
std::cin >> verifierVictoire;   

est illogique. En effet tu veux faire passer des char du buffer clavier en parametres a ta fonction.
Si j'ai bien compris ce que tu voulais faire.
C'est incorrecte comme sa.

De plus tu appelle ta fonction dans cette même c'est de la récursivitée. Je comprend pas bien ce que tu as voulu faire ici.

J'ai testé ton programme excepté ta fonction verifier victoire.
J'avais la flemme de tout remettre au propre tes succession de if sont trop lourdes.

verifier victoire ne retourne rien hors le type est char elle doit donc retourner un char si tu ne veux pas qu'elle retourne quelque chose declare la en void.

pour ton
if (grid [i][j] == ('X' || 'M'))
	{
		if (grid [i ++][j ++] == ('X' || 'M'))
		{
			if (grid [i + 2][j + 2] == ('X' || 'M'))
			{
				if (grid [i + 3][j + 3] == ('X' || 'M'))
				{
					if (grid [i][j] == 'X')
					{
						std::cout << "Player1 win!"; 
					}

					if (grid [i][j] == 'M')
					{
						std::cout << "Player2 win!";
					}
				}
			}
		}
	}


je te conseille plutot ceci au lieu de tes imbrications de if
A toi de l'adaptater a ton algorithme de ta fonction verifier victoire.

int lignes;
int colonnes;

while( lignes = 0; lignes <= (lignes + 3);  lignes++;)
	while( colonnes = 0; colonnes <= (colonnes +3); colonnes++)
	{
		if (grid  [lignes] [colonnes]   ==   ('X' || 'M'))
			if (grid  [lignes] [colonnes]   == 'X')
				std::cout << "Player1 win!"; 
			if (grid  [lignes] [colonnes]   == 'M')
				std::cout << "Player2 win!";
	}

0
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012
3 nov. 2012 à 16:25
En fais ce que je veut faire avec ca c'est dir a la console de retourner au joueur le texte en tre les guilmet. Le professeure a dit que c'etais comme ca qu"il falais le faire, mais sa empeche mon code de compiler.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012
3 nov. 2012 à 22:34
WarthogDJ Merci de l'algorithme simplifier pour le verifierVictoire. Je vais tenter de l"adapter. C"est vrai que c"est plus leger.
0
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012
3 nov. 2012 à 22:57
Si non avez vous une idee pour faire un IA fonctionelle? Je n'en ai jamais fais et je n'aucune idee par ou commencer.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 nov. 2012 à 23:02
IA ? What ?
0
LeNoobDeLOrdi Messages postés 9 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 24 novembre 2012
4 nov. 2012 à 01:29
Desoler Inteligence artificiel.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
4 nov. 2012 à 11:53
Perso, je ne te serais d'aucune aide, désolé
0
WarthogDJ Messages postés 202 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 septembre 2020 8
6 nov. 2012 à 18:31
Lol moi je suis qu'en 2eme année de BTS IRIS mais sur le net on doit trouver son bonheur :p Après une IA c'est hardcore parce que sa veux dire qu'elle doit apprendre toute seul a moins qu'on lui apprenne tout soi même.

If you see what I mean x)
0