Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » probleme démineur (31 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
caamg Ecrit le: Jeudi 10 février 2005 à 17:27 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

Je suis en train de developer 1 demineur
et j'aimerais savoir comment, lorsqu'on 'clique' sur 1 case et qu'il n'y a aucune mines autour,faire
pour decouvrir toute les cases qui n'aucune mines autour d'elles?
http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°1   Marquer comme non lu.
bobti89 Ecrit le: Jeudi 10 février 2005 à 18:06 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Dans mon demineur, j'utilise une fonction recursive qui teste si les cases autour sont vides et si on tombe sur une case vide, on relance la fonction et recursivement, ca va decouvrir toutes les cases comme dans le demineur de windows :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°2   Marquer comme non lu.
caamg Ecrit le: Vendredi 11 février 2005 à 16:24 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

bobti89 :
Dans mon demineur, j'utilise une fonction recursive qui teste si les cases autour sont vides et si on tombe sur une case vide, on relance la fonction et recursivement, ca va decouvrir toutes les cases comme dans le demineur de windows :)


D'acord,mais serait-il possible d'avoir 1 exemple:D
(je suis pas sur d'avoir tout pige #compris# )

-Edité le Vendredi 11 février 2005 à 16:50 par caamg-
http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°3   Marquer comme non lu.
Sasume Ecrit le: Vendredi 11 février 2005 à 18:01 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

if(weight(mat,ligne,colonne) == 0)
{
  short i,j;
  for(i = ligne - 1 ; i <= ligne + 1 ; i++)
    for(j = colonne - 1 ; j <= colonne + 1 ; j++)
      if(i >= 0 && i < NB_LIGNES && j >= 0 && j < NB_COLONNES && (i != ligne || j != colonne))
        explore(mat,i,j);
}

-Edité le Vendredi 11 février 2005 à 18:03 par Sasume-
    
./Post n°4   Marquer comme non lu.
caamg Ecrit le: Vendredi 11 février 2005 à 18:46 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

Sasume :
if(weight(mat,ligne,colonne) == 0)
{
  short i,j;
  for(i = ligne - 1 ; i <= ligne + 1 ; i++)
    for(j = colonne - 1 ; j <= colonne + 1 ; j++)
      if(i >= 0 && i < NB_LIGNES && j >= 0 && j < NB_COLONNES && (i != ligne || j != colonne))
        explore(mat,i,j);
}

Ok mais je voudrais savoir ce que signifie 'weight' et dans quelle fonction est placé ce code?
#confus#
-Edité le Vendredi 11 février 2005 à 18:52 par caamg-
http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°5   Marquer comme non lu.
Sasume Ecrit le: Vendredi 11 février 2005 à 19:32 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

C'est dans ta fonction explore.
weight renvoie le poids de la case #roll#
    
./Post n°6   Marquer comme non lu.
caamg Ecrit le: Vendredi 11 février 2005 à 20:08 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

J'ai crée 1 fonction explore:

void explore(short ligne,short colonne)
{
  
  if(Tableau[ligne][colonne] == 0)
  {
    short i,j;
    tab_info[ligne][ligne] = 3;

    for(i = ligne - 1 ; i <= ligne + 1 ; i++)
    for(j = colonne - 1 ; j <= colonne + 1 ; j++)
      if(i >= 0 && i < nbr_ligne && j >= 0 && j < colonne && (i != ligne || j != colonne))
        explore(i,j);
}
   
}


(Tableau est la matrice princiale et tab_info 1 tableau contenant des informations pour savoir l'etat d'1 case)
Cela ne marche pas (erreur memory) #confus#

http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°7   Marquer comme non lu.
Jfg Ecrit le: Vendredi 11 février 2005 à 20:28 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


void fill_it(short x, short y) {
  DrawPix(x,y,A_NORMAL);
  if (!GetPix(x+1,y))
  fill_it(x+1,y);
  if (!GetPix(x-1,y))
  fill_it(x-1,y);  
  if (!GetPix(x,y+1))
  fill_it(x,y+1);  
  if (!GetPix(x,y-1))
  fill_it(x,y-1);
}

void _main(void)
{
  ClrScr();
  DrawLine(10,10,80,50,A_NORMAL);
  DrawLine(80,50,40,45,A_NORMAL);
  DrawLine(10,10,40,45,A_NORMAL);
  fill_it(30,30);
  while (!_keytest(RR_ESC)) {};
}


Ce code permet d'explorer une zone délimitée. À adapter.
Kill Mario
    
./Post n°8   Marquer comme non lu.
bobti89 Ecrit le: Vendredi 11 février 2005 à 20:28 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

void explore(short ligne, short colonne)
{
    short i, j;
    for(i = ligne - 1 ; i <= ligne + 1 ; i++)
    for(j = colonne - 1 ; j <= colonne + 1 ; j++)
    if (i >= 0 && i < nbr_ligne && j >= 0 && j < nbr_colonne)
    {      
        if(Tableau[ligne][colonne] == 0 && tab_info[ligne][ligne] != 3) explore(i,j);
        decouvrir_case(i, j);
        tab_info[ligne][ligne] = 3;
    }  
}


je sais pas si ca marche, mais c'est un truc du genre que j'aurais fait :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°9   Marquer comme non lu.
Jfg Ecrit le: Vendredi 11 février 2005 à 20:45 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Peut être qu'éviter l'utilisation des variables "i" et "j" peu éliminer la "memory erreur".
Kill Mario
    
./Post n°10   Marquer comme non lu.
bobti89 Ecrit le: Samedi 12 février 2005 à 12:13 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Dans la fonction de mon demineur, j'utilise 3 varirables locales en plus des deux arguments et il n'y a pas d'erreur memoire meme en faisant un plateau vide sur tout l'ecran (22 par 13 cases) !
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°11   Marquer comme non lu.
caamg Ecrit le: Samedi 12 février 2005 à 12:17 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

Merci jfg, #merci# j'ai adaptée le ./7:

void explore(short ligne,short colonne)
{
  
  if (ligne+1 < nbr_ligne)
    if (!Tableau[ligne+1][colonne] && tab_info[ligne+1][colonne]!=3)
    {
      decouvrir_case(ligne+1, colonne);
      tab_info[ligne+1][colonne]=3;
      score++;
      explore(ligne+1,colonne);
    }
  if (ligne-1 >= 0)
    if (!Tableau[ligne-1][colonne] && tab_info[ligne-1][colonne]!=3)
    {
      decouvrir_case(ligne-1, colonne);
      tab_info[ligne-1][colonne]=3;
      score++;
      explore(ligne-1,colonne);  
    }
  if (colonne+1 < nbr_colonne)
    if (!Tableau[ligne][colonne+1] && tab_info[ligne][colonne+1]!=3 )
    {
      decouvrir_case(ligne, colonne+1);
      tab_info[ligne][colonne+1]=3;
      score++;
      explore(ligne,colonne+1);  
    }
  if (colonne-1 >= 0)
    if (!Tableau[ligne][colonne-1] && tab_info[ligne][colonne-1]!=3)
    {
      decouvrir_case(ligne, colonne-1);
            tab_info[ligne][colonne-1]=3;
      score++;
      explore(ligne,colonne-1);
    }
}

Ca marche #wahoo#
#dieu#
http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°12   Marquer comme non lu.
Sasume Ecrit le: Samedi 12 février 2005 à 19:57 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

caamg :
J'ai crée 1 fonction explore:

void explore(short ligne,short colonne)
{
  
  if(Tableau[ligne][colonne] == 0)
  {
    short i,j;
    tab_info[ligne][ligne] = 3;

    for(i = ligne - 1 ; i <= ligne + 1 ; i++)
    for(j = colonne - 1 ; j <= colonne + 1 ; j++)
      if(i >= 0 && i < nbr_ligne && j >= 0 && j < colonne && (i != ligne || j != colonne))
        explore(i,j);
}
   
}


(Tableau est la matrice princiale et tab_info 1 tableau contenant des informations pour savoir l'etat d'1 case)
Cela ne marche pas (erreur memory) #confus#

Il faut que tu empêches d'appeler la fonction si la case a déjà été explorée (au début de la fonction) :
if(Tableau[ligne][colonne] == 0 && tab_info[ligne][colonne] != 3)
    
./Post n°13   Marquer comme non lu.
Folco Ecrit le: Mardi 15 février 2005 à 13:19 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


J'avais pensé à cet algo, mais je n'en ai jamais écrit. On ne pourrait pas en faire un à base de backtracking??
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°14   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 15 février 2005 à 15:36 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


C'est essentiellement ce que fait la routine récursive, et de manière beaucoup plus efficace.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°15   Marquer comme non lu.
Onur Ecrit le: Mercredi 16 février 2005 à 03:31 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


Procedure OpenThisBloc(col as Integer,row as Integer)
  Local i as Integer
  If col>=0 And col=<15 And row>=0 And row=<15 And TabloView[col,row]=9 Then
    i = NghMineNumber(col,row)
    TabloView[col,row] = i
    If i=0 Then
      OpenThisBloc col-1,row-1
      OpenThisBloc col,row-1
      OpenThisBloc col+1,row-1
      OpenThisBloc col-1,row
      OpenThisBloc col+1,row
      OpenThisBloc col-1,row+1
      OpenThisBloc col,row+1
      OpenThisBloc col+1,row+1
    EndIf
  EndIf

Tout le monde a fait au moins un démineur dans sa vie #sante#
Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°16   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 16 février 2005 à 04:23 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Ou:
void OpenThisBloc(int col, int row) {
  int i;
  if (col>=0 && col<=15 && row>=0 && row<=15 && TabloView[col][row]==9) {
    i = NghMineNumber(col,row);
    TabloView[col][row] = i;
    if (i==0) {
      OpenThisBloc(col-1,row-1);
      OpenThisBloc(col,row-1);
      OpenThisBloc(col+1,row-1);
      OpenThisBloc(col-1,row);
      OpenThisBloc(col+1,row);
      OpenThisBloc(col-1,row+1);
      OpenThisBloc(col,row+1);
      OpenThisBloc(col+1,row+1);
    }
  }
}

:)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°17   Marquer comme non lu.
Onur Ecrit le: Vendredi 18 février 2005 à 11:18 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


sur un tel exemple, on dirait exactement la comparaison de vb.net et c#
:)
-Edité le Vendredi 18 février 2005 à 11:18 par Nounours-
Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°18   Marquer comme non lu.
caamg Ecrit le: Mercredi 23 février 2005 à 17:23 Déconnecté(e)    Voir le profil de caamg Envoyer un email à caamg Visiter le site WEB de caamg Envoyer un message privé à caamg  

J'ai uplaoder mon démineur
http://databob.free.fr/Volume/files/demine.zip

Il y a un gros problème : à chaque fois que je joue ma RAM diminue #confus#
et je ne vois pas ou est le bug
(la source est dans le zip)

-Edité le Mercredi 23 février 2005 à 17:32 par caamg-
http://Wartoom.free.fr
mon site perso,un portail php sur le divertissement
    
./Post n°19   Marquer comme non lu.
LionelA Ecrit le: Mercredi 23 février 2005 à 17:55 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Je n'ai pas testé mais pour ton probleme :
1) verifie que ce n'est pas l'historique des commandes tapées qui prend la place
2) verifie si tu ferme bien tous les fichiers ouverts avec fopen
3) verifie que tu free bien tous les malloc

A mon avis il doit s'agir du 1) :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
  :: Index » Forum Ti68K » Programmation C » probleme démineur (31 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 52.34ms avec 18 requetes