Petit jeu en mode texte [:D]

thedivxboy Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 27 novembre 2004 - 16 nov. 2004 à 23:53
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 17 nov. 2004 à 15:19
Alors je carbure en C aujourd'hui 8-) ...

Pourquoi la tête ne se déplace-t-elle pas au bon endroit ?
Pourquoi dois-je mettre un getchar() à un certain endroit (dans le default du switch) pour faire fonctionner le scanf ?


#include <stdio.h>
#include <conio.h>

void main() {
char x=40,y=12,key,quit;

do {
printf("Appuyez sur les touches du pavé directionnel pour diriger la tête,\net sur la touche 5 pour la recentrer à l'écran ...");

gotoxy(x,y);
printf("~[°€°]~");

gotoxy(52,2);
scanf("%d",&key);
clrscr();

switch(key) {
case 1 : x-=5; y+=3; break;
case 2 : y+=3; break;
case 3 : x+=5; y+=3; break;
case 4 : x-=5; break;
case 5 : x=40; y=12; break;
case 6 : x+=5; break;
case 7 : x-=5; y-=3; break;
case 8 : y-=3; break;
case 9 : x+=5; y-=3; break;
default : printf("Mauvaise touche ! Recommencer [O/N] ? ");
getchar();
scanf("%c",&quit);
if (quit=='O' || quit=='o') {
key=1;
x=40;
y=12;
clrscr();
} else
key=0;
}
} while(key==1 || key==2 || key==3 || key==4 || key==5 || key==6 || key==7 || key==8 || key==9);

printf("\nPROGRAMME TERMINE !");
}

3 réponses

cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
17 nov. 2004 à 00:47
encore toi thedivxboy...

je me suis permis quelques modifs sur ton prog :

#include <stdio.h>
#include <conio.c>

int main() {
char x= 40,y=12,key,quit;

do {
printf("Appuyez sur les touches du pavé directionnel pour diriger la tête,\net sur la touche 5 pour la recentrer à l'écran ...");

gotoxy(x,y);
printf("~[°€°]~");

gotoxy(52,2);
key=getch();

clrscr();

switch(key) {
case '1' : x- =5; y+= 3; break;
case '2' : y+ =3; break;
case '3' : x+= 5; y+=3; break;
case '4' : x-=5; break;
case '5' : x=40; y=12; break;
case '6' : x+=5; break;
case '7' : x-=5; y-=3; break;
case '8' : y-=3; break;
case '9' : x+=5; y-=3; break;
default : printf("Mauvaise touche ! Recommencer [O/N] ? ");
getchar();
scanf("%c",&quit);
if (quit=='O' || quit=='o') {
key=1;
x=40;
y=12;
clrscr();
} else
key=0;
}} while(key'1' || key '2' || key =='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9');

printf("\nPROGRAMME TERMINE !");
}

bonne continuation dans ton trip C
6co
0
thedivxboy Messages postés 15 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 27 novembre 2004
17 nov. 2004 à 14:48
Merci, ça fonctionne ...

Mais comme mon but est de progresser en C, je vais te demander quelques explications.

1) Pourquoi mon code n'allait pas ?
2) Peux-tu m'expliquer l'utilisation de getch() et de getchar() du mieux que tu peux ?
3) Différence entre void main() et int main() ?
4) Pourquoi doit-on mettre les chiffres entre ' ' lorsqu'on utilise getch() ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 nov. 2004 à 15:19
1) parce que tu n'est pas au point avec la notion de typage en c, '0' reprensente un caractere et 0 est l'entier 0

2) getch lit le clavier (pratique pour ce que tu veux faire mais pas portable), getchar est une fonction de la bibliotheque standard et lit un caractere sur stdin (le flux habituelement associé au clavier)

3) void main indique que le programme ne renvoi rien au systeme en fin d'execution et int main un entier, c'est à vérifier mais il me semble que le void main est transoformé en int main par le compilo, quoiqu'il en soit seul int main est correcte en c

4) arrete de parler de getch et lit un cours de c (livre, de preference k&r, ou autre), c'est la seul solution
0
Rejoignez-nous