Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/08/2020, à 17:43

chris7522

TIC TAC game C++

Bonjour a toutes et a tous ,
  J'aurai voulu qu'a chaque debut de partie , la personne qui commence soit différente . J'ai fait une fonction pour que cela soit aleatoire mais j'ai ce message :

chris@chris:~/Bureau/Essai$ g++ -o essai16C -std=c++1z essai16.cpp
essai16.cpp: In function ‘void Input()’:
essai16.cpp:42:16: error: invalid conversion from ‘char (*)()’ to ‘char’ [-fpermissive]
         player=gen_random;
                ^~~~~~~~~~
chris@chris:~/Bureau/Essai$

J'ai les yeux hs pour aujourd'hui et j'ai besoin de votre aide . Ca doit etre simple pour vous , mais je vois pas . Il y avait certainement une autre facon plus simple de le faire .
Merci

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char player;
int count;

char gen_random(){
   char choix[2] = {
      'L', 'T'
   };
   char res;
   for (int i = 0; i < 2; i++)
      res = res + choix[rand() % 2];
   return res;
}

void Draw()                                                                        
{
	cout << "     |     |     " << endl;
	cout << "  " << matrix[0][0]  << "  |  " << matrix[0][1] << "  |  " << matrix[0][2]  << endl;
 
	cout << "_____|_____|_____" << endl;
	cout << "     |     |     " << endl;

	cout << "  " << matrix[1][0]  << "  |  " << matrix[1][1]  << "  |  " <<matrix[1][2]  << endl;

	cout << "_____|_____|_____" << endl;
	cout << "     |     |     " << endl;

	cout << "  " << matrix[2][0] << "  |  " << matrix[2][1] << "  |  " << matrix[2][2] << endl;

	cout << "     |     |     " << endl << endl;
}

void Input()                                                                       //              
 {
        srand(time(NULL));
        player=gen_random;
                                                                                            
	cout << "Its "<<player<<" turn's Enter the number of the field: ";  
	int a;
	cin >> a; 								   
	
	if (a == 1)								   	
		if (matrix[0][0]=='1')                                             
			matrix[0][0] = player;
		else
			{
			cout << "\nInvalid move :-( \n";                           
				count=count-1;                                     
	
			}
	else if (a == 2)
		if (matrix[0][1]=='2')
			matrix[0][1] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
				
			}
	else if (a == 3)
		if (matrix[0][2]=='3')
			matrix[0][2] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
		
	else if (a == 4)
	        if (matrix[1][0]=='4')
			matrix[1][0] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
	else if (a == 5)
		  if (matrix[1][1]=='5')
			matrix[1][1] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
		
	else if (a == 6)
  		if (matrix[1][2]=='6')
			matrix[1][2] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
		
	else if (a == 7)
		  if (matrix[2][0]=='7')
			matrix[2][0] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
		
	else if (a == 8)
		  if (matrix[2][1]=='8')
			matrix[2][1] = player;
		else
			{
			cout << "\nInvalid move :-(  \n";
				count=count-1;
			}
		
	else if (a == 9)
		  if (matrix[2][2]=='9')
			matrix[2][2] = player;
		else
			{
			cout << "\nInvalid move :-( \n";
				count=count-1;
			}
}

void cuser()                                                                      //                                          
{
	if (player == 'L')                                                      //condition 
	{
	 
		player = 'T';                                                   
		
	}

	else
	{	
		player = 'L';
		
	}
}

char Winner()                                                                  
{
	                                                                        
	if (matrix[0][0] == 'L' && matrix[0][1] == 'L' && matrix[0][2] == 'L')
		return 'L';
	if (matrix[1][0] == 'L' && matrix[1][1] == 'L' && matrix[1][2] == 'L')
		return 'L';
	if (matrix[2][0] == 'L' && matrix[2][1] == 'L' && matrix[2][2] == 'L')
		return 'L';

	if (matrix[0][0] == 'L' && matrix[1][0] == 'L' && matrix[2][0] == 'L')
		return 'L';
	if (matrix[0][1] == 'L' && matrix[1][1] == 'L' && matrix[2][1] == 'L')
		return 'L';
	if (matrix[0][2] == 'L' && matrix[1][2] == 'L' && matrix[2][2] == 'L')
		return 'L';

	if (matrix[0][0] == 'L' && matrix[1][1] == 'L' && matrix[2][2] == 'L')
		return 'L';
	if (matrix[2][0] == 'L' && matrix[1][1] == 'L' && matrix[0][2] == 'L')
		return 'L';

	                                                                           
	if (matrix[0][0] == 'T' && matrix[0][1] == 'T' && matrix[0][2] == 'T')
		return 'T';
	if (matrix[1][0] == 'T' && matrix[1][1] == 'T' && matrix[1][2] == 'T')
		return 'T';
	if (matrix[2][0] == 'T' && matrix[2][1] == 'T' && matrix[2][2] == 'T')
		return 'T';

	if (matrix[0][0] == 'T' && matrix[1][0] == 'T' && matrix[2][0] == 'T')
		return 'T';
	if (matrix[0][1] == 'T' && matrix[1][1] == 'T' && matrix[2][1] == 'T')
		return 'T';
	if (matrix[0][2] == 'T' && matrix[1][2] == 'T' && matrix[2][2] == 'T')
		return 'T';

	if (matrix[0][0] == 'T' && matrix[1][1] == 'T' && matrix[2][2] == 'T')
		return 'T';
	if (matrix[2][0] == 'T' && matrix[1][1] == 'T' && matrix[0][2] == 'T')
		return 'T';

	return '/';                                                                  //fun
}

int main()                                                                                     
{
        
	count=0;
	cout << "*****************************************************************************\n";	
	cout << "\n Tic Tac Game  \n\n";
	cout << "*****************************************************************************\n\n";
	Draw();                                                                                 
	while (1)
	{
		count++;                                                                       
 		Input();
		Draw();
		if (Winner() == 'L')                                                      
		{
			cout << "_____________________________RESULT_________________________________________\n\n";
			cout << " Player Lauralee wins! :-)\n\n";
			break;
		}
		else if (Winner() == 'T')                                                       
		{
			cout << "_____________________________RESULT___________________________________________\n\n";
			cout << " Player Théo wins! :-) \n\n";
			break;
		}
		else if (Winner() == '/'&& count==9)                                           
		{
			cout << "_____________________________RESULT___________________________________________\n\n";
			cout << "Draw please try again :-( \n\n";
			break;
		}


		cuser();                                                                      
	}
	
	return 0;

}                                                         

Hors ligne

#2 Le 04/08/2020, à 17:52

pingouinux

Re : TIC TAC game C++

Bonjour,
Je crois que c'est :

         player=gen_random();

Hors ligne

#3 Le 04/08/2020, à 18:17

chris7522

Re : TIC TAC game C++

Merci , c'est ca ! je suis aveugle !
Par contre je n'obtiens pas le resultat escompté : Au lieu du 'T' ou du 'L' en retour de ma fonction , j'obtiens un point d'interogation dans un hexagone sad

Dernière modification par chris7522 (Le 04/08/2020, à 18:18)

Hors ligne

#4 Le 09/08/2020, à 10:03

chris7522

Re : TIC TAC game C++

Bonjour,
  Est ce que ce code gagnerai a etre une classe ?

Hors ligne

#5 Le 09/08/2020, à 10:25

Nuliel

Re : TIC TAC game C++

char gen_random(){
   char choix[2] = {
      'L', 'T'
   };
   char res;
   for (int i = 0; i < 2; i++)
      res = res + choix[rand() % 2];
   return res;
}

res est pas initialisé, et je comprends pas trop le res = res + choix[rand() % 2]; , tu veux pas juste choisir une lettre entre les deux lettres L et T?
Ou alors tu veux utiliser une chaine de caractère mais tu as mis char comme type pour res

Dernière modification par Nuliel (Le 09/08/2020, à 14:26)

Hors ligne

#6 Le 17/08/2020, à 16:00

chris7522

Re : TIC TAC game C++

Je me suis fait aider pour la fonction gen_random . J'ai copié betement ce qu'on m'a proposé sans trop savoir ce qu'il se passait .
Comme je le disais , ce qui m'intéréssait , c'était qu'a chaque nouvelle partie et pour le 1er coup seulement , se soit une personne différente qui commence la partie .   
Une fois le 1 er coup terminé , ce serai chacun son tour .

Hors ligne

#7 Le 17/08/2020, à 17:11

Nuliel

Re : TIC TAC game C++

char gen_random(){
   char choix[2] = {
      'L', 'T'
   };
   return choix[rand() % 2];
}

est à mon avis suffisant (pas besoin de boucle, d'ailleurs l'ancienne boucle additionnait les valeurs associées aux caractères, d'où les caractères impossibles à afficher).
Mais cette fonction est appelée à chaque tour alors qu'elle devrait être appelée seulement au début d'une partie, elle devrait donc plutôt être appelée dans le main.
Aussi srand(time(NULL)); ne devrait être appelée qu'une fois, il faut aussi mettre ça dans le main.
Les break à la fin ne sont pas utiles, ils te font sortir de la boucle infinie (ils seraient utiles en cas d'utilisation du case)
La fonction Input() pourrait être très simplifiée, une boucle serait top!

Dis moi quand tu voudras la version avec les modifs

Hors ligne

#8 Le 17/08/2020, à 17:12

grigouille

Re : TIC TAC game C++

Quelque chose comme ceci ?

char gen_random(){
    return rand() % 2 ? 'L' : 'T';
}

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#9 Le 17/08/2020, à 17:39

chris7522

Re : TIC TAC game C++

Il n'existe pas de fonctions aleatoire propre au C++ qui serai plus adapté au lieu de faire du C ?
Du genre random a utiliser avec la bibliotheque du meme nom ?

Dernière modification par chris7522 (Le 17/08/2020, à 17:39)

Hors ligne

#10 Le 17/08/2020, à 17:56

Nuliel

Re : TIC TAC game C++

La fonction rand est largement suffisante, et il n'y aurait pas trop de raison de créer une nouvelle fonction qui fasse exactement la même chose
Après si tu as envie de changer la distribution: https://en.wikipedia.org/wiki/C%2B%2B11 … r_facility (c'est une blague, tu vas sûrement jamais utiliser autre chose qu'une distribution uniforme, ce qui est utilisé par rand)

Hors ligne

#11 Le 19/08/2020, à 16:23

chris7522

Re : TIC TAC game C++

Merci a tous de votre aide !

Hors ligne

#12 Le 19/08/2020, à 16:43

Nuliel

Re : TIC TAC game C++

Tu as réussi à corriger ton code?

Hors ligne