langage C : coordonnées dans un jeu

BiG ToM

Membre confirmé
8 Mai 2007
31
0
35
Bonjour,
Pour la réalisation d'un jeu, nous cherchons à modifier les valeurs dans une matrice qui représente la grille du jeu.
En fait on entre les coordonnées de la matrice où on veut jouer et on met une croix dedans.
On sait comment faire mais, comment est il possible de modifier la valeur et réafficher les nouvelles grille avec la croix que l'on a placé ???
Merci
 
Bonjour

Hum... :confused:

Comme la seule indication dont on dispose c'est que programme est en langage C, on va avoir beaucoup de mal à deviner tout seul tout le reste...

Un petit mot sur l'environnement, l'interface utilisateur et les librairies employées, peut-être ?

;)
 
Ça m'a tout l'air d'être un jeu en mode texte.

Le plus simple est d'effacer l'écran et de réafficher entièrement la grille avec son nouveau contenu.

Sinon, si c'est possible (mais cela dépend de l'interface utilisateur), on peut se passer d'effacer l'écran et se contenter de déplacer le curseur pour n'aller modifier que la croix rajoutée.

Il faudrait avoir plus de renseignements pour pouvoir en dire plus... Dans quoi va devoir tourner le jeu ? Une fenêtre Terminal ? Une fenêtre Aqua ? La console X ? Une fenêtre graphique X ?
 
Oui on voudrait faire ce que tu dis mais on ne siat pas comment sachant que l'on a déja une fonction Affichage qui affiche la grille je ne sais pas si c'est dans une fonction qui fallait la mettre mais bon...
L'affichage se fait sur le terminal
 
Y aurait-il déjà une fonction d'effacement de prévue ?

Sinon, on peut lancer une commande système "clear" pour effacer la fenêtre du Terminal, ou bien encore "afficher" des caractères de contrôle pour provoquer la remontée du curseur jusqu'en haut de la grille avant de rappeler la fonction d'affichage.

Dans le réglage par défaut de la fenêtre Terminal, on doit pouvoir faire remonter le curseur au début de la ligne du dessus grâce aux caractères "\b\r".
 
J'avais fait un Pacman qui fonctionnait un peu sur le même principe. Il te suffit de parcourir ton tableau case par case (2 for imbriqués) et pour chaque case de faire un gotoxy(x,y) où x et y sont les coordonnées du caractère à afficher. Et juste après tu fais un cout de ce caractère. Et tu mets tout ça dans un do while pour le faire tourner en boucle.

C'est pas la meilleur méthode, mais si tu la comprends tu pourras facilement l'améliorer. Et ce n'est pas facile à expliquer non plus car ton programme peut être fait de plein de façons, donc sans voir le code c'est pas super facile à trouver une solution.
 
NCurses ?
Announcing ncurses 5.6 - GNU Project - Free Software Foundation (FSF)
ncurses - Wikipedia, the free encyclopedia

C++ : NCurses Development Kit for C++


C'est assez simple à prendre en main : j'ai réussi à écrire un Tetris en C avec ncurses juste en me servant des pages de man (elles sont très bien foutues !) quand j'avais pas encore internet à mon appart.

Ça te permettra de facilement faire ce que tu demandes :)

oui c'est ce que j'allais suggerer :up: car faire des clears c'est assez limite deplacer un curseur aussi on obtient jamais vraiment ce qu'on veut et ca varie d'un term emulator a un autre
 
Il est vrai que "\r" risque d'être interprété différemment suivant les systèmes.

Mais utiliser NCurses pour répondre à un exercice scolaire risque d'être hors sujet.

On peut admettre à la limite que les librairies dynamiques nécessaires au fonctionnement de NCurses fassent partie du système lorsqu'on est sous Mac OS X ou Linux.

Mais il est probable que l'exercice doive tourner au final sur un PC sous Windows (bien que nous n'ayons pas encore eu de réponse à ce sujet), lequel nécessiterait alors forcément un composant logiciel supplémentaire (passage par Cygwin, ou portage de NCurses par GnuWin32 par exemple).

Et si les composants logiciels extérieurs spécifiques à l'OS sont autorisés, alors autant passer carrément à un véritable environnement graphique.

Et si tel n'est pas le cas, peut-être vaudrait-il mieux se tourner vers les séquences escape ANSI, qui ont toutes les chances d'être acceptées par tous les systèmes, moyennant (seulement) un paramétrage adéquat.
 
Le dernier prof d'info que j'ai eu à l'école était venu quelques temps avant les premiers cours pour se faire la main dans la salle informatique. À ce moment, nous ne savions pas qui il était. Il est bien resté dix minutes à tourner autour d'un IBM PC (un vrai de vrai, à l'époque, pas un "compatible"). Il a fini par nous demander comment on l'allumait (le gros interrupteur rouge était pourtant situé dans un logement noir bien visible sur le côté droit, si je me souviens bien). Quand on l'a reconnu à l'entrée du premier cours qu'il nous a prodigué, on a tous pensé qu'on était mal barrés ! La suite l'a prouvé, et le taux d'assiduité a vite chuté.

Bref, tout ça pour dire que les profs d'informatique ne sont pas forcément informaticiens (tout comme certains profs ne sont pas forcément compétents dans la matière qu'ils enseignent - ce n'est pas un reproche que je leur fait, c'est seulement un constat).
 
Si tu as une matrice qui s'appelle "m" ayant "n" lignes et "m" colonnes, ce bout de code devrait affiche le contenu de ta matrice sur la console.

Bloc de code:
for(int i = 0; i < n; i++) {
  for(int j = 0; j < m; j++)
    if(m[i][j])
      printf(" x ");
    else
      printf(" 0 ");
  printf("\n");
}
 
Amusant...
Juste une remarque anodine.
Je sais qu'a l'époque des cartes perforées, on réduisait les noms des variables à une lettre car on faisait tout à la main à l'époque.
Mais pourquoi ne pas utiliser "NombreDeColonnesDansLeTableau" au lieu de "m", "PositionEnColonneDansLeTableau" au lieu de "j", etc, etc.
A défaut de commenter, mais c'est une autre histoire, cela simplifierait la lecture non ?

Cordialement
 
pourquoi ne pas utiliser "NombreDeColonnesDansLeTableau" au lieu de "m", "PositionEnColonneDansLeTableau" au lieu de "j", etc, etc.
A défaut de commenter, mais c'est une autre histoire, cela simplifierait la lecture non ?
"m" et "j" sont probablement moins parlants que "NombreDeColonnesDansLeTableau" et "PositionEnColonneDansLeTableau".

En revanche, ces deux derniers sont longs à taper, ils risquent à la longue d'occasionner de la fatigue et des erreurs de frappe, et puis ils sont finalement assez peu lisibles.

On rallongerait inutilement le temps de développement sans beaucoup gagner au niveau de la lisibilité (... pas bon !).

Les noms longs et explicites sont à réserver pour les éléments dont on ne voit pas immédiatement la fonction parce qu'ils sont trop délayées dans le code source.

Quand la portée d'un variable est limitée à trois ou quatre lignes, la question ne se pose pas vraiment, à moins que l'opération codée ne soit pas triviale.

Dans les autres cas, il me semble que pour les éléments qui apparaissent souvent, il est préférable de choisir un nom assez court mais suffisamment explicite, et d'accompagner sa déclaration ou sa première utilisation d'un commentaire explicatif.


Dans le cas présent, je laisserais "i" et "j", et je rallongerais "m" et "n", et éventuellement "mat".
 
oui ca depend, mais pour ce genre de chose, de simple lettre "mathematique" sont lisibles

m (matrix), r (row), c (column)
par exemple c'est bien aussi

while(r)
-> --r
-->while(c)
-----> --c

#define MAX(a,b) (a>b ? a : b)

mais apres c'est une question de style, si tu utilises des frameworks avec beaucoup de deco
t'as tendence a Reproduire afin d'obtenir une homogénéité de lecture
Bloc de code:
typededef int32_t IndexType;
typededef void NoReturnType;
typededef const *void TypeRef;

// Matrix NumberOfRow NumberOfColumn

NoReturnType 
MatrixPaint(
  IndexType NumberOfRow, 
  IndexType NumberOfColumn, 
  ...);

typedef struct {
  int32_t r;
  int32_t c;
} matrix_t;

...

void   
matrix_paint(
  int32_t r, 
  int32_t c, 
  ...);

matrix_t   
matrix_create(
   int32_t r, 
   int32_t c);

void   
 matrix_paint( matrix_t , ...
si 1, rien n'interdit de packer son code avant compilation, le tout c'est d'etre human bitable :D
 
Les noms de variables explicites je trouve ça très bien mais en l'occurence pour i et j c'est tellement courant de s'en servir pour le parcours d'un tableau que les deux lettres sont assez explicites en elles mêmes.

Mais sinon appelé une matrice "m", "mat", "matrice" dans un vrai programme c'est pas coule par contre, la matrice c'est "quelque chose" : une grille de jeu par exemple. Donc faut lui donner un nom en rapport avec ça :)

EDIT: connexion internet foireuse y a eu deux réponses depuis que j'ai pas pu poster :-/
 
EDIT: connexion internet foireuse y a eu deux réponses depuis que j'ai pas pu poster :-/
Grillé !
Diabolique6.gif


:D