Bataille navale [Fermé]

Signaler
Messages postés
3
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
17 janvier 2014
-
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
-
Bonsoir, je dois programmer le jeu de la bataille navale (joueur contre ordinateur) en C, j'a fait la partie d'initialisation et de positionnement des bateaux sur les grilles. Mon programme de compile bien mais je ne comprend pas pourquoi il ne s'exécute pas.

Merci d'avance pour votre aide.

3 réponses

Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 130
'lut, juste avant de te répondre:
"je dois programmer": c'est un exo? Lis ceci avant de continuer ta question.

Ça coince à l'exécution; c'est un programme console ou GUI? T'utilises quoi comme IDE? As-tu un message d'erreur? As-tu utilisé un debugger pour savoir où il y a un problème?

(ouais je sais ça fait très genre interrogatoire barbant, mais il nous manque ces précisions)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
3
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
17 janvier 2014
1
Merci pour votre réponse. Je tiens tout d'abord à préciser que je ne demande pas une résolution , j'ai fait mon travail mais je ne comprend pas pourquoi il bloque à l'exécution.
Concernant ce qui est affiché, il n'y a aucun message d'erreur, les 2 premières fonctions d'initialisation et d'affichage de la grille d'exécutent, mais celle qui permet à la machine et au joueur de placer les bateaux elle ne s'exécutent pas.
J'ai essayé de debugger avec gdb voil) ce qu'on m'affiche:

Bienvenue au jeu de la bataille navale
Nouvelle partie
1 2 3 4 5 6 7 8 9 10
J
I
H
G
F
E
D
C
B
A
[Inferior 1 (process 10747) exited normally]
(gdb)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 130
Si le programme est quitté normalement, 3 cas de figure:
- il y a un
exit
qui n'est pas à sa place
- une boucle se termine trop tôt ou pas comme prévu
- il n'y a plus rien a exécuter: tu as oublié un appel de fonction; ou tout simplement la suite du déroulement de ton programme
Tu utilises un menu à choix multiple? Si oui, vérifies bien que tu reviens au début à chaque fois.

(pour le "charte: aide exos", c'est juste un topo qu'il faut lire avant de poster (car les gens ne le font pas); mais j'ai bien remarqué que ta question "est en règle" si on peut dire :) )
Messages postés
3
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
17 janvier 2014
1
C'est ce qu'on m'a dit mais j'arrive pas à trouver l'erreur ça fait 3 jours que je suis bloquée dessus, je n'avance pas.
voilà les fonctions que j'appelle dans le fichier exécutable après les fonctions d'initialisation:
Pour les fonctions de test,je crois pas que le beug en provient, je les ai mis en commentaire mais la fonction ne s'est pas exécutée
et Merci bcp.

PS: grille est un tableau 2 dimensions.


/* Placer un bateau sur la grille */
void placer_bateau(grille c, int x, int y, char sens, int nb){
int i=1;
switch (sens){
case 'h':
case 'H':
for(i=1; i<nb; i++){
c[x][y-i] = '1';
}
break;
case 'b':
case 'B':
for(i=1; i<nb; i++){
c[x][y+i] = '1';
}
break;
case 'g':
case 'G':
for(i=1; i<nb; i++){
c[x+i][y] = '1';
}
break;
case 'd':
case 'D':
for(i=1; i<nb; i++){
c[x-i][y] = '1';
}
break;
}
}


/* Placer la flotte du joueur humain */
void init_joueur(grille c){
char lettre;
int ligne=lettre-'A';
int colonne;
char sens;
for(int nb=5; nb<=2; nb--){
if((nb==5) || (nb==4)){
printf(" Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
while(ligne>9){
printf("Attention format incorrect\n");
printf(" Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
}
printf("Choisir une orientation\n");
scanf(" %c", &sens);

bool d=depasser(c, ligne, colonne, sens, nb);
bool pleine=est_pleine(c, ligne, colonne, nb, sens);
while((pleine==true) || (d==true)){
printf("Attention positionnement impossible\n");
printf("Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
printf("Choisir une orientation\n");
scanf(" %c", &sens);
d=depasser(c, ligne, colonne, sens, nb);
pleine=est_pleine(c, ligne, colonne, nb, sens);

}

placer_bateau(c, ligne, colonne, sens, nb);
afficher(c);
}
else{
int q=0; /* Compteur pour pouvoir placer 2 bateaux */
do{
printf("Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
while(ligne>9){
printf("Attention format incorrect\n");
printf(" Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
}
printf("Choisir une orientation\n");
scanf(" %c", &sens);
bool d=depasser(c, ligne, colonne, sens, nb);
bool pleine=est_pleine(c, ligne, colonne, nb, sens);
while((pleine==true) || (d==true)){
printf("Attention positionnement impossible\n");
printf("Position première case du bateau\n");
scanf(" %c", &lettre);
scanf(" %i", &colonne);
printf("Choisir une orientation\n");
scanf(" %c", &sens);
d=depasser(c, ligne, colonne, sens, nb);
pleine=est_pleine(c, ligne, colonne, nb, sens);

}

placer_bateau(c, ligne, colonne, sens, nb);
afficher(c);

q++;
}while(q<=1);
}
}
}
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 130
Se sont très probablement tes scanf qui sont responsables...
Mettre du scanf partout c'est pas lisible; et je constate que tu a plusieurs fois le même code (avant et dans des while). Dis toi que si tu as du code en double, c'est qu'il y a quelque chose qui ne va pas.
Je te propose d'utiliser des fonctions
lire_nombre
et
lire_lettre
pour que ça soit plus clair, et de mettre chaque morceau d'entrée utilisateur dans des do-while; comme je l'ai fait ici.
En attendant, je ne garantis pas que ton problème sera résolu, étant donné que je n'ai pas le code entier de ta bataille navale et donc ne peut pas tester :)