axjaw Posté(e) le 21 janvier 2008 Partager Posté(e) le 21 janvier 2008 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 More sharing options...
theocrite Posté(e) le 21 janvier 2008 Partager Posté(e) le 21 janvier 2008 Heu. Quelle est la question ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 21 janvier 2008 Auteur Partager Posté(e) le 21 janvier 2008 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 More sharing options...
theocrite Posté(e) le 21 janvier 2008 Partager Posté(e) le 21 janvier 2008 Il faudrait que tu définisse l'aide que tu souhaites avoir. Qu'est ce que tu as déjà fait ? As tu un commencement ? Où est ce que tu blocques ? Quels sont tes problèmes ? Comment tu comptes t'y prendre ? etc. Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 21 janvier 2008 Auteur Partager Posté(e) le 21 janvier 2008 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 More sharing options...
axjaw Posté(e) le 22 janvier 2008 Auteur Partager Posté(e) le 22 janvier 2008 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 More sharing options...
axjaw Posté(e) le 22 janvier 2008 Auteur Partager Posté(e) le 22 janvier 2008 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 More sharing options...
Barroud Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 http://www.cplusplus.com/reference/clibrar...dlib/srand.html http://www.cplusplus.com/reference/clibrar...tdlib/rand.html Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 Là tu répartis des mines en mettant une mine ou pas (une chance sur deux) sur chaque case. Ce ne serait pas mieux de distribuer aléatoirement un nombre donné de mines ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Barroud Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 Mon avis c'est que l'on es pas là pour lui faire son devoir mais bien pour l'aider s'il a un problème. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 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 More sharing options...
Barroud Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 Ce n'était pas à toi que je disais ça Theo Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 22 janvier 2008 Auteur Partager Posté(e) le 22 janvier 2008 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é Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 23 janvier 2008 Auteur Partager Posté(e) le 23 janvier 2008 personne pour me répondre? Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 23 janvier 2008 Partager Posté(e) le 23 janvier 2008 pas compris ce que tu voulais, en même temps... Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 24 janvier 2008 Auteur Partager Posté(e) le 24 janvier 2008 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 More sharing options...
Mephisto Posté(e) le 26 janvier 2008 Partager Posté(e) le 26 janvier 2008 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 More sharing options...
PiFou86 Posté(e) le 26 janvier 2008 Partager Posté(e) le 26 janvier 2008 Ca pique les yeux ce que vous écrivez... (mais c'est plein de bonne volonté !) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 27 janvier 2008 Partager Posté(e) le 27 janvier 2008 c'est une question de point de vue... c'est toujours mieux qu'un tableau a quinze dimentions... qu'est-ce que tu proposerais toi ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
axjaw Posté(e) le 29 janvier 2008 Auteur Partager Posté(e) le 29 janvier 2008 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 More sharing options...
Mephisto Posté(e) le 30 janvier 2008 Partager Posté(e) le 30 janvier 2008 la, c'est des termcaps (man termios, termcap, ioctl, etc.) en gros, t'as tout ce qu'il te faut pour te deplacer dans tous les sens sur ton terminale, ne pas afficher l'entree standart, etc. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.