jeux c++

Statut
N'est pas ouverte pour d'autres réponses.
L

leprincemiri

ex membre
Hello, voila je dois programmer un jeu e C++ (same game) mon prog compile et effactue la premiere fois la obucle pour demander le numero de la ligne et de la colonne mais au lieu de continuer apres, il me dit qu il yu a une erreur de segmentation et je ne vois pas c est quoi le probleme...

Code:
#include <iostream>
#include "samegame.cpp"
using namespace std;


	void affichage (char grille[nli][ncol]) //affiche la grille de jeu.
	{
	
		for (int i=0 ; i<nli ; i++)
		{
				cout<<endl;
			for (int j=0 ; j<ncol ; j++)
				cout<<grille[i][j] <<"  ";
		}
				cout<<endl;
	}

	void verif(char grille[nli][ncol], int numli, int numcol, int nli, int ncol) //vérifie les cases à vider.
	{
		while (grille[numli][numcol] == grille[numli+1][numcol])
			grille[numli-1][numcol] = grille[numli+1][numcol];
	
		while (grille[numli][numcol] == grille[numli][numcol-1])
		{
			grille[numli-1][numcol-1] = grille[numli][numcol-1];
			grille[numli-1][numcol] = grille[numli][numcol];
		}
		
		while (grille[numli][numcol] == grille[numli-1][numcol])
			grille[numli-2][numcol] = grille[numli][numcol];

		while (grille[numli][numcol] == grille[numli][numcol+1])
		{
			grille[numli-1][numcol] = grille[numli][numcol];
			grille[numli-1][numcol] = grille[numli][numcol+1];
		}
		
		
		for (int k = 0 ; k < nli ; k ++)
		{
				cout <<endl;
			
			for (int p = 0 ; p < ncol ; p ++)
				cout <<grille[k][p];
				
				cout <<endl;
		}
	}

	void coups_score (int score, int numli, int numcol) //demande les coups et affiche le score.
	{
				cout<<"Score acuel : " <<score << endl;
				cout<<"numero de la ligne : ";
				cin >> numli;
				cout<<"numero de la colonne : ";
				cin >> numcol;
	}

	void fin_jeu(char symb1, char symb2, char symb3, int score, int numli, int numcol)
	 //vérifie si des coups sont encore possibles.
	{
		while (symb1 >1 && symb2 >1 && symb3 >1)
		{
			coups_score (score, numli, numcol);
			verif (grille, numli, numcol, nli, ncol);
		}
	}

int main()
{
	int score = 0;
	int numli;
	int numcol;
	char symb1 = grille[0][0];
	char symb2 = grille[0][2];
	char symb3 = grille[0][3];	
	
			affichage(grille);
			fin_jeu (symb1, symb2, symb3, score, numli, numcol);
}
Si quelqu un voit le probleme, merci de me prevenir :D
 

null

ose();
Ca m'étonne que tu n'as pas d'autres problèmes à la compilation o_O

Tu fais :

Code:
char symb1 = grille[0][0];
Alors que grille n'est pas déclaré. Ensuite :

Code:
void affichage (char grille[nli][ncol]) //affiche la grille de jeu.
	{
	
		for (int i=0 ; i<nli ; i++)
		{
				cout<<endl;
			for (int j=0 ; j<ncol ; j++)
				cout<<grille[i][j] <<"  ";
		}
				cout<<endl;
	}
On ne fait pas comme ça mais on passe le tableau normalement (sans les crochets) et ensuite on fait "i < sizeof(grille)". Je comprends même pas comment ton compilateur t'a laissé faire ça :-D

Code:
void fin_jeu(char symb1, char symb2, char symb3, int score, int numli, int numcol)
	 //vérifie si des coups sont encore possibles.
	{
		while (symb1 >1 && symb2 >1 && symb3 >1)
		{
			coups_score (score, numli, numcol);
			verif (grille, numli, numcol, nli, ncol);
		}
	}
"grille", "nli" et "ncol" ne sont pas définis.

Ca compile vraiment ?
 
1er
OP
L

leprincemiri

ex membre
Si ca compile, regarde bien au debut j inclu un fichier .cpp dans lequel sont définis la grille de jeu et nli et ncol
Je sais d ou vient le probleme c est dans la fonction verif j ai mal fait mes test maintenant qu je vois je dois trouver le truc mais je sens que je me rapproche mdr :D
 

bOweL

Intestin
Tiens je pensais qu'on pouvais seulement inclure des fichiers .h

#include "samegame.cpp"

Tu m'apprends qqchose ^^
 
1er
OP
L

leprincemiri

ex membre
heureux de l apprendre ^^
par contre si quelqu un voit comment je pourrais ecrire une fonction qui supprime les caracteres identiques ca m aiderait beaucoup parce que la je ne vois pas...
 

Jereck

Α & Ω
Staff
leprincemiri a dit:
heureux de l apprendre ^^
par contre si quelqu un voit comment je pourrais ecrire une fonction qui supprime les caracteres identiques ca m aiderait beaucoup parce que la je ne vois pas...

Code:
char * strNRemoveDoublons (int size, char[] strOrigin){
	char tmp = '';
 
	char * RetVal = new (size * sizeof(char));
 
	if (RetVal == null) throw new Exception();
 
	for (int i = 0 ; i < size ; i++){
		if (*(strOrigin+ i) == '\0'){
			*(RetVal + i) = '\0';
			i = size + 1;
		}else{
			if (*(strOrigin + i) != tmp) {
				*(RetVal + i) = *(strOrigin + i);
			}
		}
	}
 
	return RetVal;
}

Bon, ça fait un moment que j'ai plus utilisé les pointeurs, et j'ai jms fait bcp de C++, dont la syntaxe du new est p-e pas tout à fait correcte, mais ça devrait donner une idée pour l'algorithme.
 

Ahava

Revenant
Une bonne pratique est de faire toutes les déclarations de la classe dans le .h et toutes les définitions de la classe dans le .cpp


Théoriquement, y a que dans le .cpp qu'on importe le .h, je vois pas pk faudrait, si le programme est bien codé, le faire dans l'autre sens :)
 
P

Pum

ex membre
C'est vrai que c'est un peu bizarre comme façon de programmer... Bah si ca marche tant mieux pour toi :-D A la base, le .h sert à déclarer tes variables et le prototype de tes méthodes et puis le .cpp, il sert à l'implémentation... Sinon, le segmentation fault est souvent un problème lié à l'allocation de mémoire ou un problème de lecture d'indice (genre tu veux lire qqchose qui est hors de ton tableau...) Et puis un truc pas mal serait que tu initialises les valeurs de ton tableau
for(i = 0 ; i < NbLigne; i ++)
{
for(j = 0; j < NbColonne; j++)
{
tab[j] = 0; // Par exemple, tu peux mettre autre chose :p
}
}

Enfin, je vais pas trop donner mon avis parce que moi et le C++, on est pas hyper pote :pfiou:
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut