recherche comment faire un pacman en C - C - Programmation
Marsh Posté le 17-10-2006 à 14:33:58
faut utiliser des fonctions non standard il me semble (pour effacer l'écran)
Marsh Posté le 17-10-2006 à 15:23:54
orelyw1 a écrit : |
Merci de lire les regles du forum et d'utiliser les balises code.
Project : Forums |
Ca fout la trouille !
Le principe du déplacement est le suivant :
1 Le personnage est en X,Y
2 On affiche le personnage à sa position.
3 On attend une commande de changement de position
4 On traite un changement de direction
4.1 On efface le personnage à sa position courante (X,Y)
4.2 Selon le changement, on modifie X ou Y
4.3 On affiche le personnage à sa nouvelle position.
5 Tant que le jeu n'est pas terminé, on recommence en 3
Marsh Posté le 17-10-2006 à 15:56:27
Il y a plusieurs contrainte dans ton code...
--- premièrement dans ton main() tu dois afficher l'arena après avoir fais le déplacement, sinon comment veut tu que les modification apparaissent..
--- dans ta fonction deplacement(), quand en appuis sur 'B' le perso dois descendre donc la valeur de i augmente et non pas le contraire... (voire 'H' aussi).
--- dans ta même fonction deplacement(), je ne vois pas pourquoi tu affiche a la fin printf("%c\t", table[i][j]); , et puis je croi qu'il faut aussi que tu rajoute le cas au on appuis sur une autre touche différente de 'H' ou 'B' ou 'G' ou 'D' ... ajoute un un default: ,
et aprés le deplacement tu peut remetre la case à '.' .
-- et nettoie un peut ton code : pourquoi tu utilise des variable i, j non initialisé dans ta fonction , et tu les déclare aussi initialisé dans ton main() sans aucun intérêt...
Corrige déjà ca ... après on verra..
Marsh Posté le 17-10-2006 à 18:16:03
merci beaucoup
j'ai rajouté les x et y pour la position du perso., mais bon ça marche toujours pas.
effectivement, j'affiche mon arene avant de changer la position de mon perso, c plutot con.
bah c'est sympa
Marsh Posté le 18-10-2006 à 22:10:17
Salut,
Quelques remarques qui n'engagent que moi.
Dans la fonction arene() tu utilises 8 boucles alors que 2 suffisent.
Et puis surtout, pourquoi remplir le tableau à chaque appel ? Ca fait beaucoup de temps perdu pour rien.
Et on sort comment de ta boucle while infinie ?
Il serait peut être plus clair de séparer dans plusieurs fonctions distinctes, gestion des données et affichage de celles-ci, à la manière du xHtml + css.
Avant de commencer un programme, il est bon de réfléchir à ce qu'il doit faire, d'écrire en français le fonctionnement des différentes fonctions. Comme l'a fait Emmanuel Delahaye.
Car si tes idées ne sont pas claires au point de ne pas pouvoir les exprimer en français, je ne vois pas comment tu pourrais les traduire en C.
Marsh Posté le 18-10-2006 à 22:28:19
anordem a écrit : Car si tes idées ne sont pas claires au point de ne pas pouvoir les exprimer en français, je ne vois pas comment tu pourrais les traduire en C. |
+1
Marsh Posté le 19-10-2006 à 08:55:29
/*________________________________________________________________________*/
/* pacman */
/*________________________________________________________________________*/
#include <stdio.h>
#include<string.h>
/*#include "getEntries.c"*/
/*________________________________________________________________________*/
/* perso est represente par un "X" */
/* zone de jeu = 20 en horizontale * 40 en vertical */
/*________________________________________________________________________*/
char perso ='X';
char table[20][40];
int x=1;
int y=1;
int i,j;
/*char chaine[MAX_SIZE];*/
/*_______________________________________________________________________*/
/* fonction construisant l'arene */
/*_______________________________________________________________________*/
void arene (){
/* bord du haut */
for (j=0;j<40;j++){
table[0][j]='#';
}
/* bord du bas */
for (j=0;j<40;j++){
table[19][j]='#';
}
/* bord gauche */
for (i=1;i<19;i++){
table[i][0]='#';
}
/* bord de droite */
for (i=1;i<19;i++){
table[i][39]='#';
}
/* interieur : on rempli l'interieur avec des points */
for (i=1;i<19;i++){
for (j=1;j<39;j++){
table[i][j]='.';
}
}
/* personnage a l'origine */
table[y][x]=perso;
}
/*_____________________________________________________________________*/
/* affiche arene */
/*_____________________________________________________________________*/
void affiche (){
for(i=0;i<20;i++){
for(j=0;j<40;j++){
printf("%c",table[i][j]);
}
printf("\n" );
}
}
/*_______________________________________________________________________*/
/* fonction principale */
/*_______________________________________________________________________*/
int main (){
printf("*****************************************\n" );
printf("* *\n" );
printf("* PACMAN *\n" );
printf("* *\n" );
printf("*****************************************\n" );
/*_____________________________________________________________________*/
/* affichage arene et perso a l'etat initial */
/*_____________________________________________________________________*/
arene();
affiche();
/*_____________________________________________________________________*/
/* deplacement du personnage */
/*_____________________________________________________________________*/
char choix_deplac;
/*_____________________________________________________________________*/
/* boucle tant que pour afficher a chaque fois le jeu et les commandes */
/*_____________________________________________________________________*/
while (-1){
printf("\n\n[z(Haut), s(Bas), d(Droite), q(Gauche)]?\n" );
/*choix_deplac=getChar (chaine);*/
scanf("%s", &choix_deplac);
switch (choix_deplac){
/* deplacement vers le bas */
case 's' : {table[y][x]=' ';
y++;
/*table[y+1][x]=perso;*/
}
break;
/* deplacment vers le haut */
case 'z' :{ table [y][x]=' ';
y--;
/*table[y-1][x]=perso;*/
}
break;
/* deplacmeent vers la gauche */
case 'q' : {table [y][x]=' ';
x--;
/*table[y][x-1]=perso;*/
}
break;
/* deplacement vers la droite */
case 'd' :{ table [y][x]=' ';
x++;
/*table[y][x+1]=perso;*/
}
break;
/* erreur */
default : printf("erreur\n" );
break;
}
arene();
affiche();
}
}
voila mon perso bouge maintenant, mais il m'affiche toujours des points à sa place initial alors que je veux du vide.
désolée, mais je suis une novice en C, pour ça c'est pas super.
Marsh Posté le 19-10-2006 à 08:58:28
sinon ma boucle while sarretera quand le fantome touchera le perso, mais ça c'est pas encore fait (ou qd la partie est gagné (plus de point), il faut aussi que je fasse un labyrinthe et que mon perso ne puisse pas traverser les murs.....prochaine étape. Ensuite, on gagne des points a chaque fois que que le perso mange un point. voila
Marsh Posté le 19-10-2006 à 09:22:39
orelyw1 a écrit : /*________________________________________________________________________*/ |
Pour les balises codes, y'a rien à faire ? C'est trop difficile de lire les regles du forum ?
Citation : |
C'est pas un problème de 'novice en C'. C'est un problème de conception. OK, tu es novice en conception.
C'est pas très difficile. Il suffit de commencer par écrire ce que tu veux faire en bon français simple et clair[1]. C'est pas de la magie l'informatique, c'est surtout de la méthode, un peu d'intuition et pas mal d'expérience. Comme dit un de mes élèves 'faut en bouffer'...
Reprenons :
1 - Spécification
"voila mon perso bouge maintenant, mais il m'affiche toujours des points à sa place initial alors que je veux du vide."
C'est pas extrèmement clair comme spécification. Je rephrase en :
"Au départ, l'arène est remplie de points. Lorsque le personnage se déplace, il efface le point situé à sa nouvelle position. Il laisse donc des espaces derrière lui."
2 - Conception
L'arène est modélisée par un tableau de caractères de 20 lignes par 40 colonnes.
Au démarrage, le tableau est rempli de caractères '.' (point).
Le personnage est représenté par le caractère '*'.
Au démarrage, il se situe en ligne 0, colonne 0.
A chaque déplacement, le caractère du personnage est remplacé par le caractère ' ' à sa position courante, puis sa nouvelle position est calculée et le caractère du personnage est alors placé à la nouvelle position.
C'est si difficile d'écrire ces quelques lignes ?
-------------------
[1] Pas de métier scientifique sans maitrise de sa langue de travail et de l'anglais...
Marsh Posté le 19-10-2006 à 12:27:45
C'est bien, Mais je te conseil de ne pas utilisé les variable globale (toute tes variable sont globale -pourquoi ?- ),
tu peut déclarer i et j dans chaque fonction qui a besoin de i et j , et le tableau de char tu le déclare dans ton main() et tu le passe en argument a chaque fonction qui a besoin de l'utiliser, par exemple :
void arene(table[][40]) , attention le nombre de colonne dois être connu par le compilateur tu ne fais pas table[][] .
et tu peut arrêter ta boucle quand le perso touche un mure (où plutôt interdire que le perso ce déplace sur le mur '#')...
Marsh Posté le 20-10-2006 à 19:35:31
rooooooooooooooh quel gentillesse Emmanuel. Wouah, ça fait plaisir à lire.
merci pour ceux qui m'ont aidé.
Ca y est mon perso ne peut plus traverser les murs et mon stystème de points qui disparaissent marche.
J'ai aussi intégrer le score.
voila
Marsh Posté le 20-10-2006 à 19:43:44
orelyw1 a écrit : rooooooooooooooh quel gentillesse Emmanuel. Wouah, ça fait plaisir à lire. |
\o/
Marsh Posté le 20-10-2006 à 19:48:10
orelyw1 a écrit : rooooooooooooooh quel gentillesse Emmanuel. Wouah, ça fait plaisir à lire. |
Dommage pour toi, tu viens de passer pour un idiot auprès de celui qui est de loin le codeur C le plus expérimenté du forum, et sans aucun doute le plus prompt à aider les gens, en plus.
Marsh Posté le 20-10-2006 à 19:54:57
orelyw1 a écrit : Ca y est mon perso ne peut plus traverser les murs et mon stystème de points qui disparaissent marche. |
Je pari que tu utilises toujours les variable globale... non?
Marsh Posté le 20-10-2006 à 20:44:07
orelyw1 a écrit : rooooooooooooooh quel gentillesse Emmanuel. |
Je suis pas là pour être 'gentil', mais pour essayer de te faire progresser. Si ça ne t'intéresse pas, va jouer ailleurs.
Marsh Posté le 15-04-2012 à 16:34:08
orelyw1 a écrit : /*________________________________________________________________________*/ |
jaimerai bien avoir tt le code source merci
Marsh Posté le 15-04-2012 à 17:01:05
Joli déterrage de topic. Tu as remarqué que ce sujet a environ 6 ans ?
Accessoirement, ici, c'est un forum d'entraide, personne ne te donnera de code tout fait. Si tu as un problème on t'aide à le résoudre, mais on ne fait pas ton travail à ta place.
Marsh Posté le 15-04-2012 à 17:32:33
daliess20 a écrit : |
Marsh Posté le 26-01-2014 à 07:11:46
J'suis tombé par hasard sur ce topic en tappant "programmez un pacman" dans Google. Quand je vois comment la nana se fait traiter ça donne vraiment pas envie de ce mettre au C. Meilleur codeur ou pas ça lui donne pas le droit de se comporter comme un connard hautain, voit l'ambiance sans déconner j'aimerais pas l'avoir comme collègue celui-là. Détendez vous quoi zen O_O ! Les geeks et leur égo ... sans déconner chapeau
Marsh Posté le 26-01-2014 à 10:29:20
pilume a écrit :
|
.
Onze fautes de français en quatre phrases ! Et tu te permets d'insulter l'élite d'HFR ! Va faire un stage chez , et reviens quand tu auras appris la différence entre la particule pronominale et l'adjectif démonstratif, appris que la négation nécessite la particule discordantielle "ne", appris à mettre des signes de ponctuation, notamment des virgules, des tirets et des points, et appris à mettre des smileys. Quand même, merde ! :-|\__
Marsh Posté le 26-01-2014 à 10:41:31
Ah oui d'accord, ici ça pardonne rien et faut faire gaffe à tout. On se sent à peine jugé, ambiance chaleureuse chez les prout-prout auto-proclamés élitistes, c'est génial.
Ravis quand même de constater que le balais n'est pas rentré tout entier jusqu'au rectum et que parfois on se lâche et laisse échapper quelques insonorités (ai-je bien lu "merde" ? Diantre fichtre !)
http://forum.hardware.fr/hfr/Progr [...] 1076_1.htm
Les rapports humains ici sont absolument fascinants.
Marsh Posté le 26-01-2014 à 12:22:09
Ne vous formalisez pas pour notre manque d'affabilité.
Ce qui s'apparente à une pratique vexatoire ne constitue en réalité qu'un rite d'initiation pour souhaiter la bienvenue aux nouveaux intervenants.
Il faut, en effet, dissocier la forme et le fond, suivant en cela Roger Martin du Gard pour qui "le fond et la forme sont aussi distincts que le lièvre et sa sauce", et qui justifiait son propos en ajoutant "Est-ce que le lièvre naît en civet ?" lol, mdr.
La forme n'est une enveloppe dont la beauté dépend de critères qui sont propres à chacun, car "Beauty is in the eye of the beholder", comme disent les natifs de la fière Albion, ou "de gustibus et coloribus non est disputandum" si vous préférez un aphorisme latin.
Accordons plus de valeur au contenu qu'aux mots car comme le disait the bard of Avon à travers la voix de Juliet : "What's in a name? That which we call a rose / By any other name would smell as sweet."
Post Scriptum : "Quand même, merde !" est une citation de M. Manuel Valls. Je l'ai placée dans le but d'obtenir la bienveillance du bureau ministériel de la censure et de la NSA.
Marsh Posté le 26-01-2014 à 20:19:56
billgatesanonym a écrit : |
Ça a plus de classe que casse toi pauv' con!
Marsh Posté le 27-01-2014 à 07:16:03
ReplyMarsh Posté le 27-01-2014 à 11:15:48
pilume a écrit : J'suis tombé par hasard sur ce topic en tappant "programmez un pacman" dans Google. Quand je vois comment la nana se fait traiter ça donne vraiment pas envie de ce mettre au C. Meilleur codeur ou pas ça lui donne pas le droit de se comporter comme un connard hautain, voit l'ambiance sans déconner j'aimerais pas l'avoir comme collègue celui-là. Détendez vous quoi zen O_O ! Les geeks et leur égo ... sans déconner chapeau |
Réveiller à nouveau un topic aussi vieux pour ne rien y apporter et se plaindre du comportement de quelqu'un qui ne vient plus ici, respect ...
Marsh Posté le 27-01-2014 à 12:06:00
Reply
Marsh Posté le 17-10-2006 à 14:31:36
bonjour
voila je voudrais fair eun pacman en C
mon probleme est que j'arrive pas a faire bouger mon perso.
voici mon pti bout de code pour l'instant
/*________________________________________________________________________*/
/* pacman */
/*________________________________________________________________________*/
#include <stdio.h>
#include<string.h>
/*________________________________________________________________________*/
/* perso est represente par un "X" */
/* zone de jeu = 20 en horizontale * 40 en vertical */
/*________________________________________________________________________*/
char perso ='X';
char table[20][40];
/*_______________________________________________________________________*/
/* fonction construisant et affichant l'arene */
/*_______________________________________________________________________*/
void arene (){
int i,j;
/* bord du haut */
for (j=0;j<40;j++){
table[0][j]='#';
}
/* bord du bas */
for (j=0;j<40;j++){
table[19][j]='#';
}
/* bord gauche */
for (i=1;i<19;i++){
table[i][0]='#';
}
/* bord de droite */
for (i=1;i<19;i++){
table[i][39]='#';
}
/* interieur : on rempli l'interieur avec des points */
for (i=1;i<19;i++){
for (j=1;j<39;j++){
table[i][j]='.';
}
}
/* affichage du personnage=X */
table[1][1]=perso;
/* fonction affichage du jeu */
for(i=0;i<20;i++){
for(j=0;j<40;j++){
printf("%c",table[i][j]);
}
printf("\n" );
}
}
/*_______________________________________________________________________*/
/* fonction deplacement de X */
/*_______________________________________________________________________*/
void deplacement (){
char choix_deplac;
int i,j;
switch (choix_deplac){
case 'B' : table[i-1][j]=perso;
break;
case 'H' : table[i+1][j]=perso;
break;
case 'G' : table[i][j-1]=perso;
break;
case 'D' : table[i][j+1]=perso;
break;
}
printf("%c\t", table[i][j]);
}
/*_______________________________________________________________________*/
/* fonction principale */
/*_______________________________________________________________________*/
int main (){
int i=1, j=1;
printf("*****************************************\n" );
printf("* *\n" );
printf("* PACMAN *\n" );
printf("* *\n" );
printf("*****************************************\n" );
/*_____________________________________________________________________*/
/* affichage arene et perso a l'etat initial */
/*_____________________________________________________________________*/
arene();
/*_____________________________________________________________________*/
/* deplacement du personnage */
/*_____________________________________________________________________*/
char choix_deplac;
/*_____________________________________________________________________*/
/* boucle tant que pour afficher a chaque fois le jeu et les commandes */
/*_____________________________________________________________________*/
while (1){
printf("\n\n[H(aut), B(as), D(roite), G(auche)]?\n" );
scanf("%s", &choix_deplac);
arene();
deplacement();
}
}
merci de bien vouloir maider