Jeu du ver

Jeu du ver - C++ - Programmation

Marsh Posté le 22-10-2004 à 22:22:14    

Bonsoir,
 
Je suis en train de me mettre gentiment au C++ après 2 ans de Java et j'ai fait un pti prog avec une fonction récursive.
 
Voici le code
 

Citation :


//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
class Worm
{
        protected:
        int ***cube ;
        int *deltaX ;
        int *deltaY ;
        int *deltaZ ;
        int coup ;
        double pourcentage ;
        int hesitation ;
        int nbreSolutions ;
 
        public:
        Worm()
        {
                deltaX = new int[6] ;
                deltaY = new int[6] ;
                deltaZ = new int[6] ;
 
                int deltaX[6] =  {0, 0, 1, -1, 0, 0} ;
                int deltaY[6] =  {1, -1, 0, 0, 0, 0} ;
                int deltaZ[6] =  {0, 0, 0, 0, 1, -1} ;
 
                coup = 1 ;
                pourcentage = 0 ;
                hesitation = 0 ;
                nbreSolutions = 0 ;
 
                cube = new int**[10] ;
 
                for(int i=0;i<10;i++)
                        cube[i] = new int*[10] ;
 
                for(int j=0;j<10;j++)
                        for(int k=0;k<10;k++)
                                cube[j][k] = new int[10] ;
 
                for(int l=0;l<10;l++)
                        for(int m=0;m<10;m++)
                                for(int n=0;n<10;n++)
                                        *(*(*(cube+l)+m)+n) = 0 ;
        }
 
        ~Worm()
        {
                delete[] deltaX ;
                delete[] deltaY ;
                delete[] deltaZ ;
                delete[] cube ;
        }
 
        void moveWorm(int x, int y, int z, int coup)
        {
                if((x >= 0) && (x <= 9) && (y >= 0) && (y <= 9) && (z >= 0) && (z <= 9) && ((*(*(*(cube+x)+y)+z)) == (0)))
                {
                        *(*(*(cube+x)+y)+z) = coup ;
                        coup++ ;
 
                        if(coup>1000)
                        {
                                afficher(cube) ;
                        }
 
                        else
                        {
                                for(int i=0;i<6;i++)
                                moveWorm((x+deltaX[i]), (y+deltaY[i]), (z+deltaZ[i]), coup) ;
                        }
 
                        *(*(*(cube+x)+y)+z) = 0 ;
                 }
                 else
                 {
                        afficher(cube) ;
                 }
        }
 
        void afficher(int ***cube)
        {
                int freeCase = 0 ;
                nbreSolutions++ ;
 
                for(int a=0;a<10;a++)
                        for(int b=0;b<10;b++)
                                for(int c=0;c<10;c++)
                                        if((*(*(*(cube+a)+b)+c))==0)
                                                freeCase++ ;
 
                pourcentage = freeCase/100 ;
                cout << "Solution no : " << nbreSolutions << " Pourcentage de case libre = " << pourcentage ;
                cout << endl ;
                for(int i=0;i<10;i++)
                {
                        for(int j=0;j<10;j++)
                        {
                                for(int k=0;k<10;k++)
                                {
                                        cout << *(*(*(cube+i)+j)+k) ;
                                }
                                cout << endl ;
                        }
                        cout << endl ;
                }
 
        }
 
};
//---------------------------------------------------------------------------


 
 
J'ai passé un peu de temps sur le debugger et j'ai tracer, apparemment il y a un problème lorsque je rappelle la fonction dans ma méthode moveWorm.
 
Qqun pourrait-il m'aiguiller ??
 
Merci
 
 
edit: les règles du jeu, un cube, un ver qui se déplace, afficher lorsque le ver ne peut plus avancer, soit paske il se mange, soit pask'il touche un mur soit paske il a remplit tour le cube.


Message édité par Shaman LizardKing le 22-10-2004 à 22:24:22
Reply

Marsh Posté le 22-10-2004 à 22:22:14   

Reply

Marsh Posté le 22-10-2004 à 22:25:15    

C'est quoi cette horreur ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2004 à 22:30:08    

Vazy ca fait une semaine que je code fait pas le salaud

Reply

Marsh Posté le 22-10-2004 à 22:33:27    

Tu veux nous tuer notre Kadreg, hein !
(Mollo sur le stillrox, kad)
 
Et puis change de cat, si Taz te voit t'es mort.

Reply

Marsh Posté le 22-10-2004 à 22:34:23    

Excuse moi, mais je comprend pas ce que tu dis....

Reply

Marsh Posté le 22-10-2004 à 22:35:30    

verdoux a écrit :

(Mollo sur le stillrox, kad)


 
c'est stilnox :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2004 à 22:35:50    

Vous pouvez pas m'aider donc ?

Reply

Marsh Posté le 22-10-2004 à 22:36:25    

kadreg a écrit :

c'est stilnox :o


Ca titre à combien, 60° ?

Reply

Marsh Posté le 22-10-2004 à 22:38:23    

verdoux a écrit :

Ca titre à combien, 60° ?


 
10mg de tartrate de zolpidem :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2004 à 22:39:50    

Bon merci quand même j'irai demander sur un autre forum
 
Bonne soirée


Message édité par Shaman LizardKing le 22-10-2004 à 22:42:17
Reply

Marsh Posté le 22-10-2004 à 22:39:50   

Reply

Marsh Posté le 22-10-2004 à 22:47:42    

[:banguy]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 23-10-2004 à 18:34:01    

Shaman LizardKing a écrit :

Excuse moi, mais je comprend pas ce que tu dis....


 
Le premier bug, c'est l'utilisation de l'abominable *(*(*(cube+l)+m)+n) là où un simple tableau à 3 dimensions cube[l][m][n] suffirait.Ensuite, je m'étonne même que ça compile sans gueuler alors que tu définis tranquillement int* deltaX =new int[6] et juste après int deltaX[6]. Bonjour les confusions. Après 2 ans de Java, que tu codes comme ça, ça fait franchement peur...


Message édité par el muchacho le 23-10-2004 à 18:39:03
Reply

Marsh Posté le 25-10-2004 à 11:07:55    

el muchacho a écrit :

Le premier bug, c'est l'utilisation de l'abominable *(*(*(cube+l)+m)+n) là où un simple tableau à 3 dimensions cube[l][m][n] suffirait.Ensuite, je m'étonne même que ça compile sans gueuler alors que tu définis tranquillement int* deltaX =new int[6] et juste après int deltaX[6]. Bonjour les confusions. Après 2 ans de Java, que tu codes comme ça, ça fait franchement peur...


 
Excuse moi.... mais j'ai eu la réponse sur le forum de developpez.com
 
C'est incroyable a quel point votre seul but c'est d'enfoncer les débutants ici !!
 
Pour ceux que ca intéresse, j'ai simplement modifié l'insertion des données dans le tableau comme ca :
 
deltaX[0] = 0 ;
deltaX[1] = 0 ;
 
etc....
 
et ca marche très bien
 
Good bye !

Reply

Marsh Posté le 25-10-2004 à 11:30:03    

kadreg a écrit :

10mg de tartrate de zolpidem :o


 
c pas avec ca que tu va c**** de toute facon ca fait 3 mois que jmen prend 10mg tous les soir mais moi c pour pieuter   :whistle:


Message édité par red faction le 25-10-2004 à 11:30:22
Reply

Marsh Posté le 25-10-2004 à 11:32:05    

el muchacho a écrit :

Ensuite, je m'étonne même que ça compile sans gueuler alors que tu définis tranquillement int* deltaX =new int[6] et juste après int deltaX[6].


 
y'a pas a s'etonner, ca s'apelle du shadowing de variable et c'est autorisé (youpi)
par contre ca pue un max


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 25-10-2004 à 11:37:08    

Shaman LizardKing a écrit :

Excuse moi.... mais j'ai eu la réponse sur le forum de developpez.com
 
C'est incroyable a quel point votre seul but c'est d'enfoncer les débutants ici !!
 
Pour ceux que ca intéresse, j'ai simplement modifié l'insertion des données dans le tableau comme ca :
 
deltaX[0] = 0 ;
deltaX[1] = 0 ;
 
etc....
 
et ca marche très bien
 
Good bye !


 
ils ne t'ont pas aider en te donnant la solution
 
c'est architecturé à la java, et tout ces new sont inutiles
il faudrait d'ailleur redefinir constructeur par copie et operateur d'affectation, et apprendre à liberer correctement la memoire
 

Citation :


cube = new int**[10] ;  
 
                for(int i=0;i<10;i++)  
                        cube[i] = new int*[10] ;  
 
                for(int j=0;j<10;j++)  
                        for(int k=0;k<10;k++)  
                                cube[j][k] = new int[10] ;  
 


 

Citation :


~Worm()  
        {  
                delete[] deltaX ;  
                delete[] deltaY ;  
                delete[] deltaZ ;  
                delete[] cube ;
        }


 
delete[] c'est magique  :D


Message édité par cris56 le 25-10-2004 à 11:37:58
Reply

Marsh Posté le 25-10-2004 à 12:33:11    

cris56 a écrit :

delete[] c'est magique  :D


 
Ah mais le compilateur est magique : :o  
comme la variable s'appelle "cube", il sait qu'il faut faire les delete des lignes à l'intérieur du cube :o  
 
En tout cas, ça confirme une fois de plus que le java n'aide pas à coder proprement.

Reply

Marsh Posté le 25-10-2004 à 12:55:17    

Code :
  1. for(int i=0;i<10;i++)
  2.                         cube[i] = new int*[10] ;
  3.                 for(int j=0;j<10;j++)
  4.                         for(int k=0;k<10;k++)
  5.                                 cube[j][k] = new int[10] ;
  6.                 for(int l=0;l<10;l++)
  7.                         for(int m=0;m<10;m++)
  8.                                 for(int n=0;n<10;n++)
  9.                                         *(*(*(cube+l)+m)+n) = 0 ;


ca ca pourrait ce faire en 3 for...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-10-2004 à 13:38:26    

Smaragdus a écrit :

En tout cas, ça confirme une fois de plus que le java n'aide pas à coder proprement.


Mais qu'est-ce que tu racontes ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 25-10-2004 à 14:59:16    

sircam a écrit :

Mais qu'est-ce que tu racontes ?


 
On parle du "delete[] cube" pour ceux qui n'ont pas suivi  :sarcastic:

Reply

Marsh Posté le 25-10-2004 à 17:06:29    

Smaragdus a écrit :

On parle du "delete[] cube" pour ceux qui n'ont pas suivi  :sarcastic:


Et qu'est-ce que Java vient faire là-dedans, hein ? Je ne vois pas en quoi Java n'aide pas à coder proprement.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 25-10-2004 à 17:15:42    

sircam a écrit :

Et qu'est-ce que Java vient faire là-dedans, hein ? Je ne vois pas en quoi Java n'aide pas à coder proprement.


 
Si t'as pas compris, c'est pas la peine d'insister.

Reply

Marsh Posté le 25-10-2004 à 17:15:45    

peut etre que Smaragdus veut dire que Java n'aide pas à coder proprement en c++
 
ce qui est forcement vrai ?

Reply

Marsh Posté le 25-10-2004 à 17:17:22    

cris56 a écrit :

peut etre que Smaragdus veut dire que Java n'aide pas à coder proprement en c++


 
nuance importante, il pourrait le dire tout seul comme un grand
 

Citation :


ce qui est forcement vrai ?


 
bah pour la desalloc, oui. Apres, bon, c'est a voir
 


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 25-10-2004 à 18:05:12    

+1 chrisbk, c'est comme ça que je l'entendais ;)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 25-10-2004 à 23:08:47    

Shaman LizardKing a écrit :

Excuse moi.... mais j'ai eu la réponse sur le forum de developpez.com
 
C'est incroyable a quel point votre seul but c'est d'enfoncer les débutants ici !!
 
Pour ceux que ca intéresse, j'ai simplement modifié l'insertion des données dans le tableau comme ca :
 
deltaX[0] = 0 ;
deltaX[1] = 0 ;
 
etc....
 
et ca marche très bien
 
Good bye !


 
alors pour moi, c'est simple, si ton but est d'apprendre à coder à peu près correctement, tu viens ici et t'essayes de comprendre ce qui t'y est dit. Par contre, si tu veux continuer à coder comme un porc, tu vas sur Programmez et tu attends qu'on te fournisse les réponses comme on gave les oies. Perso, entre ces deux pédagogies, ça fait longtemps que j'ai fait mon choix. Sache que pour la plupart d'entre nous, ton problème ne présente mais alors strictement aucun intérêt.
 
Ton programme est simplement et objectivement mauvais, et si ce n'est pas aujourd'hui, c'est évident que ce style (si on peut dire) de programmation finira par te donner à l'avenir des migraines bien plus importantes que le problème pour lequel tu es venu. C'est facile d'en corriger les défauts les plus flagrants, je te les ai donnés, et ce faisant, je t'ai rendu un service bcp plus important que la réponse que tu as obtenue sur l'autre forum.

Reply

Marsh Posté le 25-10-2004 à 23:10:39    

chrisbk a écrit :

y'a pas a s'etonner, ca s'apelle du shadowing de variable et c'est autorisé (youpi)
par contre ca pue un max


 
Du shadowing dans le même bloc ??? Jamais vu ça jusqu'à présent.

Reply

Marsh Posté le 26-10-2004 à 09:04:11    

el muchacho a écrit :

Du shadowing dans le même bloc ??? Jamais vu ça jusqu'à présent.


Les variables ne sont pas déclarées dans le même bloc. Il y en a une qui est déclarée au niveau de la classe, et une dans le constructeur.
 

Code :
  1. static int elmuchacho;
  2. class Boo {
  3.   int elmuchacho;
  4.   Boo() {
  5.      ::elmuchacho = 1;
  6.      elmuchacho = 2;
  7.      int elmuchacho = 3;
  8.   }
  9. };


Reply

Marsh Posté le 26-10-2004 à 09:07:51    

el muchacho a écrit :

alors pour moi, c'est simple, si ton but est d'apprendre à coder à peu près correctement, tu viens ici et t'essayes de comprendre ce qui t'y est dit.  


Citation :


10mg de tartrate de zolpidem


 
c'est sur que ca va l'aider [:joce]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed