CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c] bataille navale

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
29 décembre 2009 à 22:23:44

bonjour je dois faire un projet en C de bataille navale assez simple.
seulement je sais pas trop comment m'y prendre pour dans un premier temps placer des bateaux dans un tableau a 2 dimensions qui aura pour colonnes des nb de 0 à 9 (pas de soucis la) mais les lignes sont des lettres de A a J (la ca pose pb :d) )

ensuite je sais pas s'il est de bonne idée de créer une structure "bateaux"...
merci^^

godrik
godrik
Niveau 30
29 décembre 2009 à 22:38:34

pour ton premier probleme, tu devrais faire une fonction qui convertit les lettres de A a J en nombre de 0 a 9.

Pour la structure "bateaux". Ca depend de ce que tu veux en faire j'imagine

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
29 décembre 2009 à 22:46:47

okéé donc pour la fonction il faudra par exemple que je l'appelle apres admettons :

scanf("%c %d, ligneNomBateaux, colonneNomBateaux)

et la j'appelle ma fonction pour convertir le ligneNomBateaux en un entier.

ensuite j'ferais :

tab[ligneNomBateaux][colonneNomBateaux]=x ???????????? (j'veux surtout savoir pour mon premier[] )

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
29 décembre 2009 à 23:02:55

merci j'avai zapé le lettre-'A' pour faire un chiffre la galere pour retrouver ca lol

godrik
godrik
Niveau 30
29 décembre 2009 à 23:11:28

voui :)

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
29 décembre 2009 à 23:19:26

dis est-ce que tu sais comment je peux faire une condition pour que l'utilisateur me donne une lettre maj et pas une min ni un chiffre ?

if(lettre>='a' && lettre <='z || lettre ?????????)
printf("donnez une MAJ");

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
29 décembre 2009 à 23:19:53

desolé de t'embeter :pp

_viper_
_viper_
Niveau 10
29 décembre 2009 à 23:32:35

Hello !
D'abord, quand on manipule des caractères en C (et dans beaucoup de langage), il faut à tout prix se renseigner sur la table ASCII : c'est la table qui associe à chaque caractère un nombre entier positif (car, rappelons-le, l'ordi ne manipule que des données numériques).
A partir de ça, en observant la manière dont est conçue cette table, on peut très facilement déduire quelques astuces pour manipuler les caractères.
Ensuite, tu peux en effet faire une telle condition (c'est pas très compliqué, je préfère te laisser chercher et tester), mais sache qu'il y a déjà des fonctions toutes prêtes permettant de convertir une lettre en une majuscule ou en une minuscule, voici la page de man correspondante : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/toupper.3.html

chris_27
chris_27
Niveau 10
30 décembre 2009 à 18:39:48

Natty_Sam_Fayaa : simple curiosité, tu es L1 à Lyon 1 ?

Quand j'y (à Lyon 1) ai donné le TD sur la bataille navale, on est arrivé à la conclusion que le seul intérêt de créer une structure bateau était de pouvoir garder sous la main le nombre de cases qui n'ont pas été touchées afin que ce soit simple de tester si un bateau est coulé.
Personnellement, j'opterai plutôt pour un tableau global dont la case i contient le nombre de cases non touchées du bateau i. C'est bien moins lourd que de déclarer/manipuler un struct. :-)

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
31 décembre 2009 à 12:57:14

merci viper :)

chris non j'suis en semestre 1 de dut info à villetaneuse !
sinon merci pour ton explication tu donne raison à ma faineantise concernant les sructures, ca me prenai bien la tete lol^^

sinon la case i, c'est une case d'un bateau ?

chris_27
chris_27
Niveau 10
31 décembre 2009 à 16:09:39

Chez moi, une bataille navaille c'est :
:d) un tableau contenant la taille des bateaux ( int taille[5] )
:d) deux tableaux contenant les cases non touchées des bateaux pour chaque joueur ( int restant_j1[5], restant_j2[5] )
:d) deux grilles de placements de bateaux (char grille_j1[10][10], grille_j2[10][10])
:d) deux grilles de jeu pour les eau/touché (char grille_jeu_j1[10][10], grille_jeu_j2[10][10]).

Après, il "suffit" de faire une fonction pour remplir la grille_j1 avec ce que donne un joueur, une fonction pour remplir le grille_j2 (avec de l'aléa si tu veux jouer contre l'ordi), et une grosse boucle qui demande une case à un joueur jusqu'à ce qu'un joueur ait gagné.

dnob700
dnob700
Niveau 10
03 janvier 2010 à 16:19:57

tu peut virer les deux restant_j1 et j2 et les remplacer par un seul taille_j2 (et renommer taille en taille_j1) et diminuer la taille d'un bateau à chaque fois qu'il est touché. tu gagne NB_BATEAUX*sizeof(int) octets !

chris_27
chris_27
Niveau 10
03 janvier 2010 à 16:34:46

dnob700 : Si tu enchaînes plusieurs parties, tu vas perdre quelques cycles à réinitialiser taille_j2 aussi. :o))

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
03 janvier 2010 à 18:07:12

mmmmh je vois a moitié^^
merci :)

[Arhan5_
[Arhan5_
Niveau 9
03 janvier 2010 à 19:57:17

| https://www.jeuxvideo.com/forums/1-47-46522-1-0-1-0-0.htm#message_46527
| Citation de : Natty_Sam_Fayaa
| Date du message : Posté le 29 décembre 2009 à 23:19:26
| Contenu du message :
| "dis est-ce que tu sais comment je peux faire une condition pour que l'utilisateur me donne une lettre maj et pas une min ni un chiffre ?
|
| if(lettre>='a' && lettre <='z || lettre ?????????)
| printf("donnez une MAJ");
|
| "

:d) C'est sûrement possible...
Mais il y a une fonction pour cela: toupper(); penser à inclure la bibliothèque ctype.h sinon, il n'est pas possible de l'appeler.

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
03 janvier 2010 à 21:57:13

bon oublions ce probleme je l'ai contourné (il m'a falu fumer comme un gros porc pour partir dans un trip qui m'a ammené a la programmation pour que je comprenne une facon toute bete lol)

bref maintenant j'ai voulu faire une sorte de "grille" un peu artisanale lol, donc je voulais mettre apres les chiffres sur la ligne du haut puis les lettres sur la colonne a gauche mais ce que j'ai fé pour l'instant donne un truc assez bizarre :

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>

int main(void)
{
char* tab[21][21];
int i,j;
for(i<0;i<21;i++)
{
for(j=0;j<21;j++)
{
if(i%2==0 && j%2==0)
tab[j][i]=" ";
else if(i%2==0 && j%2!=0)
tab[j][i]="-";
else if(i%2!=0 && j%2==0)
tab[j][i]="|";
else
tab[j][i]="+";
printf("%c",tab[j][i]);
}
}

system("PAUSE");
return(0);
}

ca me donne un zolie dessin avec des piques, des carreaux et mm des tetes^^

au debut j'avai declaré char tab[21][21]; sans le pointeur mais la ca ne marchait pas du tout ..... avec ce genre de messages : 15 C:\Users\Samuel\Documents\Cours\IUT\Programmation s1\BatailleNavale\testgrille.c [Warning] assignment makes integer from pointer without a cast

je sens que j'ai encore fait un vieuuuuuux truc :'(

_viper_
_viper_
Niveau 10
03 janvier 2010 à 22:11:34

Dans ton code, tu as vraiment encadré les caractères (espaces, -, |, +) par des doubles guillemets comme ceci : "+" ?
Si c'est le cas, je suis très étonné que le code que tu viens de poster compile !
Il faut utiliser des guillemets simples : '+'. Ceci spécifie que tu utilises un caractère (un char). Les guillemets doubles sont pour les chaînes de caractères (les char* donc), d'où le fait que tu aies dû rajouter une étoile lors de la déclaration de ton pointeur. Malheureusement, il ne fallait pas la rajouter ^^

PS: Villetaneuse, c'est juste à côté de chez moi, tiens :p)

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
03 janvier 2010 à 22:28:07

ouaaaaais j'i vu ca avant de voir ton post lol

ensuite je l'ai changé parceque j'm'etai trompé j'ai inversé les '+' et les ' '

----> avec le char*, ca marche. Si ensuite je passe en tab[23][23], ca marche plus -_-'
et avec le char normal, ca marche pas non plus ^^ :snif2:

sinon t'es d'ou ? :p)

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
03 janvier 2010 à 22:42:58

d'ailleurs ca a l'air de marcher qu'avec 21 c chelou cette histoire :ouch:

Natty_Sam_Fayaa
Natty_Sam_Fayaa
Niveau 5
03 janvier 2010 à 23:00:29

ah ca marche aussi pour 42 (toujours en char*)
donc j'imagine que mon probleme se situe dans mes modulos que je qualifierai de de*****asse ^^
j vais refondre tout ca :p

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment