Problèmes déplacement (Jeux en C)
Résolu
Br8314
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je réalise un jeux connu en C, le principe est celui d'un p-a-c-k-m-a-n
Voilà mon (mes) soucis,
1)
Au départ, l'arène est remplie de points et de murs. Lorsque le personnage se déplace, il n'efface pas les points situés à sa nouvelle position. Il laisse donc pas des espaces derrière lui.
2)
Le personnage se déplace même si le caractère est autre chose qu'un point ou du vide.
Donc il traverse les murs.
Voici mon code ~~
Je réalise un jeux connu en C, le principe est celui d'un p-a-c-k-m-a-n
Voilà mon (mes) soucis,
1)
Au départ, l'arène est remplie de points et de murs. Lorsque le personnage se déplace, il n'efface pas les points situés à sa nouvelle position. Il laisse donc pas des espaces derrière lui.
2)
Le personnage se déplace même si le caractère est autre chose qu'un point ou du vide.
Donc il traverse les murs.
Voici mon code ~~
#include <stdio.h> #include <string.h> /*________________________________________________________________________*/ /* Le personage est representé par une tête */ /* La Zone de jeu est de 20 en horizontale et 40 en vertical */ /*________________________________________________________________________*/ char perso = 0x2 ; char table [20][40] ; char orientation_perso ; int x = 3 ; int y = 1 ; int i , j ; int score = 0 ; void affiche (){ for(i=0;i<20;i++){ for(j=0;j<40;j++){ printf("%c",table[i][j]); } printf("\n" ); } } void arene (){ char coin_hg = 0xC9; char coin_hd = 0xBB; char coin_bg = 0xC8; char coin_bd = 0xBC; char bar_hor = 0xCD; char bar_ver = 0xBA; char T_gauche = 0xB9; char T_droit = 0xCC; char T_bas = 0xCA; char T_haut = 0xCB; /* Bord du haut */ for (j=0;j<40;j++){ table[0][j] = 0xB2; } /* Bord du bas */ for (j=0;j<40;j++){ table[19][j] = 0xB2; } /* bord gauche */ for (i=1;i<19;i++){ for (j=0;j<2;j++){ table[i][j] = 0xB2; } } /* bord de droite */ for (i=1;i<19;i++){ for (j=39;j<40;j++){ table[i][j] = 0xB2; } } for (i=1;i<19;i++){ table[i][38] = 0xB2; } /* Interieur : Je rempli l'interieur */ /*Point*/ for (i=1;i<19;i++){ for (j=2;j<38;j++){ table[i][j] = '.'; /*Décor intérieur*/ /*Ligne 1*/ table[1][19] = bar_ver; /*Ligne 2*/ table[2][3] = coin_hg; table[2][4] = bar_hor; table[2][5] = bar_hor; table[2][6] = bar_hor; table[2][7] = bar_hor; table[2][8] = coin_hd; table[2][10] = coin_hg; table[2][11] = bar_hor; table[2][12] = bar_hor; table[2][13] = bar_hor; table[2][14] = bar_hor; table[2][15] = bar_hor; table[2][16] = bar_hor; table[2][17] = coin_hd; table[2][19] = bar_ver; table[2][21] = coin_hg; table[2][22] = bar_hor; table[2][23] = bar_hor; table[2][24] = bar_hor; table[2][25] = bar_hor; table[2][26] = bar_hor; table[2][27] = bar_hor; table[2][28] = coin_hd; table[2][30] = coin_hg; table[2][31] = bar_hor; table[2][32] = bar_hor; table[2][33] = bar_hor; table[2][34] = bar_hor; table[2][35] = bar_hor; table[2][36] = coin_hd; ... (jusqu'à ligne 19) } } /* Personnage a l'origine */ table[y][x] = perso; } int main ( int argc, char *argv[]) { char go; int e; char cop = 0xB8; char nom_j; /*console*/ char a = 0x1E; // Fleche avant char r = 0x1F; // Fleche arriere char d = 0x10; // Fleche droite char g = 0x11; // Fleche gauche char pt = 0x4; // Point central /*Affichage nom du jeux...*/ ... /*Selection nom du joueur*/ ... /*Selection difficulté*/ ... /*Affichage nom joueur*/ ... /*Affichage score*/ ... /*Affichage console*/ printf("\n\n"); printf("\t\t z\n"); printf("\t\t (%c)\n",a); printf("\t\tq(%c)%c(%c)d\n",g,pt,d); printf("\t\t (%c)\n",r ); printf("\t\t s\n"); printf("\n"); /*Quitter*/ ... /*Choix_deplac=_getch(), selec sans entrer*/ orientation_perso = _getch(); switch (orientation_perso){ /* Deplacement vers le bas */ case 's' : { y++; score++; } break; /* Deplacment vers le haut */ case 'z' : { y--; score++; } break; /* Deplacmeent vers la gauche */ case 'q' : { x--; score++; } break; /* Deplacement vers la droite */ case 'd' : { x++; score++; } break; /* Erreur */ default : printf("erreur\n" ); break; } /*Rafraichissement de la page*/ system("CLS"); arene(); affiche(); } } return 0; }
A voir également:
- Problèmes déplacement (Jeux en C)
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick jeux - Télécharger - Jeux vidéo
- Jeux zuma - Télécharger - Jeux vidéo
- Jeux java football - Télécharger - Jeux vidéo
- Historique déplacement google - Guide
4 réponses
ba c'est logique !
par quel miracle ton programme devinerait qu'il ne doit plus marqué de point et ne pas passer à travers les murs ?
il manque des if(g && !mur_a_gauche) et un truc du genre
table[x][y]=' '; pour remplacer les points par des espaces.
Je pense qu'il ne faut appeler qu'une fois arene au début, et c'est tout.
par quel miracle ton programme devinerait qu'il ne doit plus marqué de point et ne pas passer à travers les murs ?
il manque des if(g && !mur_a_gauche) et un truc du genre
table[x][y]=' '; pour remplacer les points par des espaces.
Je pense qu'il ne faut appeler qu'une fois arene au début, et c'est tout.
C'est justement là ou je suis bloqué ~~ j'ai essayé plusieurs choses sans résultats... c'est pour cela que je viens demander de l'aide
Comme je te le dis, mets des if dans chaque case pour vérifier que tu peux bien aller à gauche ou à droite avant d'effectuer l'opération. Une fois que tu as effectué l'opération, remplace ton point par une espace (à la position de ton pacman) n'appel qu'une fois arene.
Le problème dans ce que je te dit, c'est d'avoir un pacman d'afficher qui se déplace. Je te conseil de sauver ton tableau tel qu'il est, puis à chaque tour d'en faire une copie, de modifier la copie pour afficher pacman (et plus tard les fantômes) et d'afficher la copie à l'écran.
Des fois, lorsqu'on y arrive pas, c'est que dès le début on est partie ave la mauvaise façon de penser.
Le problème dans ce que je te dit, c'est d'avoir un pacman d'afficher qui se déplace. Je te conseil de sauver ton tableau tel qu'il est, puis à chaque tour d'en faire une copie, de modifier la copie pour afficher pacman (et plus tard les fantômes) et d'afficher la copie à l'écran.
Des fois, lorsqu'on y arrive pas, c'est que dès le début on est partie ave la mauvaise façon de penser.
Problème non résolu...
Mes if bloque le personnage totalement, quelqu'un pourrait me proposer sa solution ou m'expliquer?
Merci
Mes if bloque le personnage totalement, quelqu'un pourrait me proposer sa solution ou m'expliquer?
Merci