cs_dany23
Messages postés3Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention15 mai 2007
-
15 mai 2007 à 22:44
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008
-
15 mai 2007 à 23:57
salut à tous, j'ai finalement décié de choisir de programmer le jeu de la bataille navale en C++.
J'ai déjà quelque idée comment faire. Le problème et que mon prof m'a demandé de trouver/inventer quelque algorithme qui pourrait m'aider pour mon programme et j'ai un peu de paine.
Il faut que je trouve: 1) comment faire pour mettre les bateaux alétoirement.
2) comment faire pour que ces bateaux ne se croisent pas.
pour c 2 chose, j'ai quelque idée mais elles sont assez vague( si vous avez quelque indice, je serait reconnaissant)
Il y a un autre problème aussi. Je ne voit pas comment je pourrait faire pour que l'ordinateur sache s'il y a un bateaux à la case que le joueur à choisit.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 15 mai 2007 à 22:59
1) pour l'aléatoire, tu peux déterminer les coordonnées du centre du bateau ainsi qu'une direction aléatoire. Tu places ensuite le bateau si possible, si ce n'est pas le cas, tu tires au hasard a nouveau.
2) pour que la bateaux ne se croisent pas, suffit que ta fonction vérifie que sur chaque case ou tu places ton bateau, aucun bateau n'y est deja.
Et ta dernière question révèle en fait, que tu n'as pas d'idée précise du comment tu vas faire ta bataille navale. Faut forcément que quelque part, tu es une représentation du damier qui te permettent de tester a tel case, les bateaux qui s'y trouvent, si le joueur a deja tirer a cet endroit etc ...
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 15 mai 2007 à 23:03
Hello, tu es débutant en c ou en c++ ? (cad, connais-tu la STL ou pas ?)
Si tu ne la connais pas :
- Creation d'une matrice à 2 dimension de caractere (tu vas voir pour quoi) (char Bataille[Dimension][Dimension]={0};)
- Puis tu créés fait 2 randoms pour récupérer une coordonée X et une Y (donc 0<=X<=Dimension et 0<=Y<=Dimension)
- ensuite, tu choisis une direction (un autre random de 1 à 4 fera l'affaire)
- Tu regardes si tu peux poser le bateau (cad si il ne va pas dépasser du bord et si il ne va pas se placer sur une case ayant une valeur différente de 0)
- Si la voie est libre, alors il faut definir un code pour chaque bateau (5 pour le destroyer par exemple) et puis à chaque case du plateau ou il se trouve, tu dois marquer le code du bateau à poser
- Pour le jeu à proprement parlé, quand le joueur choisis une case, alors toi tu testes si elle est vide (=0) --> c'est dans l'eau, si c'est une case d'une autre valeur et qu'elle n'a pas déja été marquée (tu vas voir comment) alors on marque
Une case est marquée lorsque son numero est > 20 (par exemple), en fait pour marquer une case, on fait Bataille[X][Y]+=20;
Ce qui veut donc dire que l'on garde l'info du bateau qui est touché (suffit d'enlever 20 ou de faire un modulo 20) et qu'on sait qu'il a été marqué.
- Un bateau coule quand toutes ses cases sont marquées
(Il faut obligatoirement stocker les cases du bateau en plus car il ne suffit pas de tester que toutes les cases adjacentes correspondant au même bateau soient marquée (par récursivité) car si 2 destroyer sont à coté, alors ça va chier (à moins que tu attribue un ID unique à chaque bateau, comme tu veux, à toi de voir)).
- tu connais la suite
Avec le c++, c'est bien plus propre, je te déconseillerai fortement le c pour ça car ça ne peut t'apporter que des bugs et puis une énorme lourdeur à coder. Mieux vaut garder le c pour les algorithmes et le c++ pour tout ce qui ne nécéssite pas de vitesse particulierement rapide (tout est relatif) et un code clair/maintenable.