Bonsoir,
Je suis un élève en ING1 et j'ai un problème sur un projet que l'on doit réaliser en informatique. On doit réaliser une bataille navale en C et je n'arrive pas à positionner mes bateaux sur la grille 15x15 que j'ai créée. On nous demande de positionner au hasard les bateaux sur la grille. Si vous pouviez m'aider ca serait super !! Merci d'avance !!
Mon main:
Code:#include <stdio.h> #include <stdlib.h> int main() { int accueil,pretpourpartie, choix, i=0; printf("\t\t=== Accueil ===\n"); printf("\t\t===============\n\n"); printf("\t1. Jouer une partie a deux joueurs\n"); printf("\t2. Jouer contre l'ordinateur\n"); printf("\t3. Aide\n"); printf("\t4. Quitter\n\n"); scanf("%d", &accueil); printf("\n"); switch (accueil) { case 1: // choisis de faire une partie a deux joueurs printf("Vous avez choisi de jouer a deux joueurs ! Que le meilleur gagne !!\n\n"); tableau('cases'); printf("\n\n"); parametre_bateau(); break; case 2: // choisis de jouer contre l'ordinateur printf("Vous avez choisi de jouer contre l'ordinateur ! Bonne chance!!\n\n"); tableau('cases'); break; case 3: // affiche les regles printf("Voici les regles du jeu :\n\n"); printf("Chaque joueur (humain et ordinateur) joue a tour de role. Bien entendu, un joueur ne doit pas voir les grilles de son adversaire : seules les grilles du joueur en cours sont affichees. A chaque tour de jeu, les joueurs peuvent choisir l'une des 2 actions suivantes sur un seul navire de leur choix de la grille numero 1, en choisissant les coordonnees de l'une des cases du navire :\n\n \t(1) Tirer.\n\n Le joueur tire en choisissant les coordonnees d'une case valide de l'adversaire (grille numero 2). Chaque destroyer n'est muni que d'une seule fusee eclairante. Le premier tir d'un destroyer devoile un carre de 4*4 cases dans la grille adverse a partir du coin haut et gauche. Mais attention, les navires adverses de ce carre ne seront visibles que lors du tour du jeu (quelques secondes). Pour couler un navire, il faut avoir touche toutes les cases qu'il occupe : un cuirasse est plus resistant qu'un simple destroyer, les sous-marins ne peuvent etre coules que par d'autres sous-marins. Dans ce cas, le navire adverse coule disparait et la case touchee s'affiche sur la grille numero 2.\n\n \t(2) Deplacer le navire d'une seule case sauf s'il est touche.\n\n Un navire ne peut pas se deplacer en diagonale. Il ne peut se deplacer que dans sa direction horizontale ou verticale, et d'une seule case a la fois, et le point cardinal de deplacement (est ou ouest s'il est horizontal, nord ou sud s'il est vertical). Evidemment, en cas d'obstacle (case de deplacement occupee par un autre navire ou le bord de la grille), un navire ne pourra pas effectuer son déplacement et devra tenter une nouvelle action. A chaque tour de jeu, il faudra visualiser l'action, les coordonnees et le type du navire choisis par l'ordinateur\n\n"); printf("Vous sentez vous pret pour commencer une partie ?\n"); scanf("%d", &pretpourpartie); if (pretpourpartie==1) { printf("Voulez vous jouer contre un ami ou contre l'ordinateur ? : choisissez 1 ou 2 \n\n"); scanf("%d", &choix); printf("\n"); if (choix==1) { printf("Vous avez choisi de jouer a deux joueurs ! Que le meilleur gagne !!\n\n"); tableau('cases'); } else if (choix==2) { printf("Vous avez choisi de jouer contre l'ordinateur ! Bonne chance!!\n\n"); tableau('cases'); casestouchees('cases'); } } else if (pretpourpartie==0) { printf("Prenez votre temps pour lire et comprendre les regles du jeu !\n"); } break; case 4: // affiche au revoir si le joueur quitte le jeu system("clear"); break; } printf("\n\n"); return 0; }
Ma fonction tableau :
Code:#include <stdio.h> #include <stdlib.h> void tableau(cases) { int lettres=1, i=0, j; int b=0; for (b=0;b<2;b++) { printf(" "); for (i=0; i<15;i++) { printf("\xDD"); if (i<10) { printf(" "); } printf("%d", i); } printf("\xDD"); printf(" "); } printf("\n"); for(j = 0; j < 15; j++) { printf(" "); for(b=0;b<2;b++) { for(i = 0; i < 15; i++) { printf("\xDD"); printf("--"); } printf("\xDD "); } printf("\n"); printf("%c",intToChar(j)); for(i = 0; i < 16; i++) { printf("\xDD"); printf(" "); // mettre fonction qui prend les parametre de la case et qui donne une chaines de caractere qui donne les bateaux. } printf(" "); printf("%c",intToChar(j)); for(i = 0; i < 16; i++) { printf("\xDD"); printf(" "); // mettre fonction qui prend les parametre de la case et qui donne une chaines de caractere qui donne les bateaux. } printf("\n"); } printf(" "); for (b=0;b<2;b++) { for(i = 0; i < 15; i++) { printf("\xDD"); printf("--"); } printf("\xDD"); printf(" "); } return 0; } char intToChar1(int number) { char test[27] = "abcdefghijklmnopqrstuvwxyz"; return test[number]; }
Et pour le positionnement des bateaux j'ai essayé de faire comme ca :
Code:#include "parametre-bateau.h" #include <time.h> int parametre_bateau(int coordonnee_bateau, int x, int y) { int type_bateau; int i=0, xdebut=0, ydebut=0, xfin=0, yfin = 0; srand(time(NULL)); while (xdebut!=xfin || ydebut!=yfin) { xdebut = rand()%15; printf("%d", xdebut); ydebut=rand()%15; printf("%d", ydebut); xfin = rand()%15; printf("%d", xfin); yfin=rand()%15; printf("%d", yfin); } return 0; } char intToChar2(int number) { char test[27] = "abcdefghijklmnopqrstuvwxyz"; return test[number]; }
-----