jeux c++

Discussion dans 'Web, design' créé par leprincemiri, 26 Novembre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    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
    leprincemiri, 26 Novembre 2006
    #1
  2. Offline
    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 ?
    null, 26 Novembre 2006
    #2
  3. Offline
    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
    leprincemiri, 26 Novembre 2006
    #3
  4. Offline
    bOweL Intestin
    Tiens je pensais qu'on pouvais seulement inclure des fichiers .h

    #include "samegame.cpp"

    Tu m'apprends qqchose :p
    bOweL, 26 Novembre 2006
    #4
  5. Offline
    leprincemiri ex membre
    heureux de l apprendre :p
    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...
    leprincemiri, 26 Novembre 2006
    #5
  6. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be

    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.
    Jereck, 28 Novembre 2006
    #6
  7. Offline
    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 :)
    Ahava, 28 Novembre 2006
    #7
  8. Offline
    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:
    Pum, 1 Décembre 2006
    #8
Statut de la discussion:
Fermée.