Aller au contenu

HELP Demineur version ancienne:RLOGIC


axjaw

Messages recommandés

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...

Lien vers le commentaire
Partager sur d’autres sites

Heu.

Quelle est la question ?

en fait c'est pas une question, c'est une presentation pour que je puisse avoir des tuyaux, voir un semblant d'algo pour commencer mon projet... j'ai quelque difficultés en info... donc votre aide me serait bien utile...

Lien vers le commentaire
Partager sur d’autres sites

je n'en suis qu'au tout debut...

/* Une mine est représentée par le caractère + */
#define CONTIENT_MINE ('+')

/* On définit un chemin solution :
deplacement aléatoire vers le bas et vers la gauche
*/
tableau de tableau cheminSolution;
cheminSolution = marqueChemin(terrain);

/* On compte le nombre de cases libres
* et on crée deux tableaux :
* l'un contenant les abscisses des cases libres
* l'autre les ordonnées
*/
entier nbCases;
nbCases = nombreDeCasesLibres(terrain);

tableau casesLibresX;
casesLibresX = abscissesDesCasesLibres(terrain);

tableau casesLibresY;
casesLibresY = ordonnéesDesCasesLibres(terrain);

/* On place maintenant les mines */
booleen pose;
tantque nbMines > 0
{
nbMines--;
nbCases--;
pose = faux;

tantque pose == false
{
entier mine = nbAleatoire() % nbCases
si
pasDeMines(terrain[casesLibresX[mine]][casesLibresY[mine]])
alors
{
terrain[casesLibresX[mine]][casesLibresY[mine]] = CONTIENT_MINE;
pose = vrai;
}

Lien vers le commentaire
Partager sur d’autres sites

pour générer le terrain avec le nombre de mine définit tel que :nbMine de maniere aléatoire quelque fonction dois je utiliser et comment ...

pour qu'elle répartisse les mines aléatoirements, je dois parcourir tout le tableau? du type tableau[nbColone][nbLigne]

Lien vers le commentaire
Partager sur d’autres sites

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

#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;
}

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 '*'

Lien vers le commentaire
Partager sur d’autres sites

C'est juste un conseil.

Si l'énoncé c'est juste ce que l'on a vu, alors je pense que la solution qu'il a retenue n'est pas la meilleure (les mines générées seront pratiquement toujours, sauf cas très improbables, vers les premières cases). Il a le choix entre rester sur cette solution ou changer ça.

Aussi si les autres élèves ont la même chose, il pourra se démarquer.

Sinon un dernier petit conseil, j'aurai mis '_' pour les absences de mines plutôt que 0. C'est plus facile à visualiser.

Lien vers le commentaire
Partager sur d’autres sites

merci baroud...

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?

C'est juste un conseil.

Si l'énoncé c'est juste ce que l'on a vu, alors je pense que la solution qu'il a retenue n'est pas la meilleure (les mines générées seront pratiquement toujours, sauf cas très improbables, vers les premières cases). Il a le choix entre rester sur cette solution ou changer ça.

Aussi si les autres élèves ont la même chose, il pourra se démarquer.

Sinon un dernier petit conseil, j'aurai mis '_' pour les absences de mines plutôt que 0. C'est plus facile à visualiser.

oui tu as raison ... je vais répartir les mines aléatoirements...merci pour ces conseils avisés...

baroud, si ce n'est pas à théo c'est à qui que tu t'es adressé :D

Lien vers le commentaire
Partager sur d’autres sites

il faut que je crée un deuxieme tableau pour afficher le jeux "modifié"... le premier tableau contient le terrain de base avec les mines et les '-' comme ceci:

les premieres case autour du joueur sont decouverte...

J 1 - - - - - -

2 * - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - V

j'ai donc besoin d'un second tableau pour faire apparaitre à chaque appui sur les touches h d b g qui correspondent aux deplacements haut droit bas gauche

if (getchar(d))

se déplacer à droite pr exemple...

et ça je ne vois pas comment le faire....

Lien vers le commentaire
Partager sur d’autres sites

plutot qu'un tableau, pourquoi pas une liste (doublement) chaine ?

et theo a raison, pour un meilleur placement aleatoire, c'est les coordonnees des bombes que tu devrais generer

bon, maintenant la pratique

ta liste chaine

typedef struct s_toto

{

char mine; /* presence d'une mine */

char curs; /* est-ce que tu es sur cette case, enfin, tu pourrais garder cette position dans une statique hosr structure, pour un truc plus propre */

char posx; /* la position x de la case que ce maillon represente */

char posy; /* meme hose pour la position en y */

struct s_toto *next; /* le maillon suivant */

struct s_toto *prev; /* le maillon precedant */

} t_toto;

ensuite, tu te fait un petit jeux de fonctions pour utiliser ta liste chaine (genre, deplacement de tant de crans dans telle direction, creation de maillon, supression de maillon [uniquement pour l'init et la fermeture du programme])

enfin, les idees que tu as rendraient cette methode assez crade

tu vas pas reecrire un tbleau a chaque deplacement pour mettre a jour ton affichage

l'affichage peut etre calcule a la volee en fonction de tes variables, tu n'es pas oblige de tout stocker en dur

enfin, question de point de vue, je presume

Lien vers le commentaire
Partager sur d’autres sites

ok merci pour vos reponses! ça avance...

autre question dans la continuité de celle de mephisto... pour eviter de réafficher le jeu à chaque fois sur le terminal, il y a moyen de le mettre fixe (effectuer les deplacement directement sur le meme tableau?)

en gros sur le terminal, lorsque je lance mon prog ça me fait:

$ entrez un niveau:

je rentre 2 pour intermediare par exemple (change le niveau de jeu)

$entrez la taille du tableau de jeu

8 8 par exemple un tableau (8x8)

$affiche le tableau de jeu

J - - - - - - -

- - - - - - - -

- - - - - - -

- - - - - - --

-- - - - - - -- -

- - - - - - - F

$entrez un deplacement 'h' pour haut g pour gauche etc...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...