begin process at 2012 05 30 11:14:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Réalisation en C d'un Démineur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Réalisation en C d'un Démineur

lundi 21 janvier 2008 à 21:21:40 | Réalisation en C d'un Démineur

axjaw

voilà dans le cadre de mes études, je dois réaliser un demineur version rlogic en C... le principe de base est le meme sauf que dans ce rlogic, il faut parcourir le terrain en partant du coin en haut à gauche jusqu'au coin en bas à droite.
j'utiliserais donc 2 tableaux l'un servant à conserver l'état du terrain et l'autre contenant les informations d'affichage.

Donc voilà je souhaite avoir de l'aide pour ce qui est de l'algorithme...
je dois générer un terrain miner, puis me lancer dans les situations pour lesquelles je suis pres d'une mine etc... les 1,2,3,4 que je place autour des mines je les gerent comment étant donné la pose aléatoire du terrain miné...

merci d'avances pour vos réponses...
mardi 22 janvier 2008 à 10:13:18 | Re : Réalisation en C d'un Démineur

kts_system

c'est simple un fois le terain miné generer,  pour chaque case non miné tu compte combien de case sont miné autour .
Ex : Sur un tableau Tab[X][Y] (on considère que une case  miné est a -1)

pour i de 0 a X-1
   pour j de 0 a Y-1
      Si (Tab[i][j] != -1)  //case non miné
          iNbMine = 0      

         Si (Tab[i-1][j] = = -1)
            iNbMine++

         Si (Tab[i][j-1] == -1)
            iNbMine++

         Si (Tab[i+1][j] == -1)
            iNbMine++

          Si (Tab[i][j+1] == -1)
            iNbMine++ 

          Tab[i][j] = iNbMine;
      FinSi
   FinPour
FinPour

Voila apres je ne sais plus si tu doit aussi verfier les cases en diagonales ds le demineur
mardi 22 janvier 2008 à 10:33:45 | Re : Réalisation en C d'un Démineur

Pistol_Pete

Salut,

Pour le demineur, les cases en diagonales doivent etre prise en compte. ( sinon c'est impossible pour jouer)
La vrai seule difficultee pour le demineur, c'est de devoiler les cases "0", mais si tu maitrises la recursivitee ou les piles, il n'y a plus aucun probleme.

A+

Mon site internet : [ Lien ]

mardi 22 janvier 2008 à 17:17:12 | Re : Réalisation en C d'un Démineur

axjaw

merci pour vos réponses... mais comment réaliser le terrain en positionant les mines aléatoirement... j'ai entendu parler de la fonction:

srand((unsigned)time(NULL));

avec laquelle j'utilise:

int mine=rand()%nbMine;

mais je ne vois pas comment cela genere le "nbMine" prédéfini dans tout le tableau[nbColonne][nbLigne].
il faut pas faire une boucle for imbriquée dans une autre pour parcourir chaque case et mettre la fonction aléatoire à l'interieur?
si vous pouvez m'éclairer la dessus merci...
mardi 22 janvier 2008 à 17:35:58 | Re : Réalisation en C d'un Démineur

kts_system

Une solution serait (pour expliquer on suppose que tu doit generer 10 bombes et que tu a un tableau  tab de 10*10 "Tab[10][10] "

pour i de 0 a 9 //on passe 10 fois donc 10 bombes
   X = Generer un nb aleatoire entre 0 et 9 //Puisque tu a 10 case en longeur
   Y = Generer un nb aleatoire entre 0 et 9 //Puisque tu a 10 case en largeur

   si (Tab[X][Y] != -1)//Si la case n'est pas deja marquer (ca peut arriver)
        Tab[X][Y] = -1 // marque la case
   sinon
         i = i -1 //Sinon il te manquera une bombe
   FinSi
FinPour

Voila de cette façon tu n'a qu'une boucle

Pour generer un nb aléatoire tu doit initializer le compteur avec srand((unsigned)time(NULL));
Puis a chaque apel de "rand() % (10)" tu aura un nb different compris entre 0 et 9

pour plus de detail sur rand va sur
[ Lien ]

mardi 22 janvier 2008 à 17:59:44 | Re : Réalisation en C d'un Démineur

axjaw

j'ai pas encore essayé ta facon...

voilà le code d'essai pour l'utilisation de la fonction aléatoire:

[code]#include <stdio.h>
#include<stdlib.h>

int main (void){
  int i,j;
  char tab[9][9];
  int mine=0;
for(i=0;i<9;i++)
{
  for(j=0;j<9;j++)
    {
      tab[i][j]=rand()%2;
      if ((tab[i][j]>0.5) && (mine<10))
    {
      tab[i][j]='*';
      mine++;
    }
      else tab[i][j]=0;
 printf("%c ",tab[i][j]);
    }
  printf("\n");
 
 
}
 
return 0;
}[/code]

Le probleme est que la répartition aléatoire n'est valable qu'une seule fois, car lorsque je refais une nouvelle l'execution du programme, j'obtiens le meme resultat: les mines sont représentées avec '*'

c'est possible de cette maniere ou il faut que je fasse de la tienne?
mardi 22 janvier 2008 à 18:08:14 | Re : Réalisation en C d'un Démineur

kts_system

il faut initialiser le compteur avec l'heure courante pour que tes nb soit aleatoire a chaque demarage
avec la fct srand((unsigned)time(NULL)) a mettre en debut de programme

oui ta methode devrait marcher mais je comprend pas trop ton > 0.5  (tu risque d'avoir beaucoup de  mine au debut du tab et pas du tout a la fin, essaye en tous cas)

de plus 2 boucle for sa veut dire que le temps d'execution et le carré du temps si il n'y en a qu'une.

mardi 22 janvier 2008 à 19:41:07 | Re : Réalisation en C d'un Démineur

axjaw

ok merci je continue dans mon prog... je risque d'avoir encore quelque question...
mardi 22 janvier 2008 à 20:37:36 | Re : Réalisation en C d'un Démineur

axjaw

j'ai une autre question: il faut que j'utilise les touches h,d,b,g du clavier pour me deplacer des cases en haut à gauche aux cases en bas à droite de mon demineur... on nous a parlé succintement de sequence d'échappement... pour faire correspondre une action à une touche au clavier... mais il faut faire quoi pour que le simple deplacement du curseur face apparaitre ce qui se cache sous la case? je vais utiliser un deuxieme tableau pour "jouer" cad modifier mon premier tableau qui est le terrain de base ou il y a eu le tirage aléatoire...
mercredi 23 janvier 2008 à 09:31:10 | Re : Réalisation en C d'un Démineur

Pistol_Pete

Salut
Axjaw, tu devrais suivre la methode de kts__system pour la generation aleatoire du terrain car ta facon de faire n'est pas du tout aleatoire.
Tu testes toutes les cases, et tu dis qu'il y a une 1 chance sur 2 pour qu'il y ai une mine la. Tu n'as aucun control sur le nombre de mine present sur ton tableau a la fin de ta generation.
Ben oui imagine que rand()%2 te donne a chaque fois 0 !! (peut probable mais ya une chance), tu n'aurai alors aucune mines sur ton tableau alors que tu pensais en avoir 10!

Et en l'occurence, comme tu as un gros tableau, et peu de mines, toutes tes mines seront sur les premieres colonnes.

En conclusion, tu as aucun controle sur le nombre de mines et leurs emplacements n'est pas aleatoire=> oublie cette methode 

A+
Mon site internet : [ Lien ]


1 2

Cette discussion est classée dans : voil, réalisation, terrain, démineur, rlogic


Répondre à ce message

Sujets en rapport avec ce message

Problème démineur [ par pitidragon ] Bonjour !Alors voilà, je dois créer un démineur en C pour mes études. Bon j'ai bien avancé, mais je bloque sur un truc débile !Je ne vois pas comment Système expert pour démineur [ par mohdaef ] Bonjour à tous,Je réalise actuelle un petit projet de démeur en API Windows, je cherche à créer un S.E. (Système Expert) pour le mode multijoueur.En u Créationn d'un editeur de resource comment faire? [ par babyboo1107 ] Bonjour à tous, voilà , dans le cadre d'un projet de fin d'étude j'aimerais créer un éditeur de ressource, mais voilà je n Tableau et fichier txt [ par cleloa ] Salut tout le monde !Alors voilà, je suis en plein combat  ac le langage c pour reussir à :Importer des données d'un fichier txt dans un tableau de st tableau 2D de RECT winapi [ par dyroj ] Bonsoir a tous,je suis en train de créer un snack et j'aurai besoin d'un tableau 2D de la structure RECT pour y placer la position de la nouritur pour ecriture dans fichier C [ par green mamba ] Bonjour à tous!voilà, j'ai refait un code de tri (je me suis légèrement inspiré d'un cs présent ici, je code plutôt mal en général), et je voudrais ré se servir de real spy [ par vincedu67 ] Bonjour à tous,voilà mon problème:je debute en informatique et j 'ai telechargé real spy seulement voilà que dois je faire pour pouvoir m'en servir?Po réalisation d'un Hub usb 7 ports [ par Kronanberg ] Bonjour, Voila je suis sur un projet ou je dois créer un HUB USB qui sera associé plus tard à des liaisons RS232. Je pense faire ce HUB avec le compos étape de réalisation de système d'exploitation [ par laopatrick ] salut à tous, Commment conçoit-on un systeme d'exploitation graphique ? Executer un fichier .cmd [ par Anthrax77 ] Bonjour,voilà je me présente je m'appel Fred et c'est mon tout premier post sur ce site.Alors voilà je suis débutant et je fais en ce moment un petit


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales