pierrealex56
le 03 mars 2009 à 15h33
Voila. Je suis en 2eme année de DUT Informatique Génie Logiciel et on nous demande de créer une application Bataille Navale. Un fichier archiver nous a été donné avec pas mal de classes(CBaseJeu.h, CJoueur.h, CJoueur.cpp, CCoups.h, CCoups.cpp,...).
Moi et mon binome devont coder les classes CArmada.cpp, CBateau.cpp et CGui.cpp(interface).
Si qqun pouvait nous aider je lui en serait reconnaissant.
Voila une ébauche de mon travail :
Classe CBateau.cpp :
#include "CBateau.h"
// Constructeur par défaut : "neant", (0,0), 0
CBateau::CBateau () {
m_Taille=0;
}
// Constructeur, le bateau n'a encore aucune case touchée
CBateau::CBateau ( string n, pair<int,int> p, int t ) {
m_Taille=t;
m_Position=p;
m_Nom=n;
m_Degats.resize(m_Taille);
}
// Renvoie vrai si la case num. i du bateau est touchée
bool CBateau::get_Degats ( int i ) {
return m_Degats;
}
// Accesseur
string CBateau::get_Nom() {
return nom;
}
// Accesseur
int CBateau::get_Taille() {
return taille;
}
// Accesseur
pair<int,int> CBateau::get_Position() {
return position;
}
// Modifie la position du bateau sur la grille, ième ligne, jème colonne
void CBateau::set_Position ( int i, int j ) {
}
// Renvoie vrai si le bateau est coulé
bool CBateau::est_Coule() {
for (int i = 0;i<this->m_Position; i++) {
if(!(this->m_Taille)->touche)
return false;
}
return true;
}
// Tir adverse : renvoie vrai si la coordonnée passée en paramètre correspond à une case du bateau. Si la case du bateau est touchée, elle est marquée dans le tableau m_Degats.
bool CBateau::tir_Adverse ( pair<int,int> p ) {
}
// Surcharge de l'opérateur << pour afficher à l'écran les caractéristiques du bateau
ostream& operator << ( ostream& os, CBateau& theB ) {
os << "Ligne " << m_Position.first << endl;
os << "Colonne " << m_Position.second << endl;
return os;
}
Classe CArmada.cpp :
CArmada::CArmada() // Constructeur par défaut : cas où le nombre total de bateaux est inconnu (sera fixé ultérieurement avec « set_Effectif_Total ( int nbre_Total ) »
/**********************************************/
CArmada::CArmada ( int nbreTotal ) // Constructeur : cas où le nombre total de bateaux est connu
/**********************************************/
int CArmada::get_Effectif() // Renvoie le nombre des bateaux qui ne sont pas encore coulés (flotille encore en vie sur l'eau)
/**********************************************/
int CAramada::get_Effectif_Total() // Accesseur
/**********************************************/
void CArmada::set_Effectif_Total ( int nbreTotal ) // Modificateur
/**********************************************/
void CArmada::ajouter_Bateau ( CBateau& unBat ) // Ajoute un bateau dans la structure m_Liste_Bateaux (à la suite "append")
/**********************************************/
CBateau& CArmada::get_Bateau ( int index ) // Accesseur : renvoie (par référence) le bateau qui se trouve à l'index i dans le tableau
/**********************************************/
int CArmada::get_Nbre_Tot_Cases(); // Accesseur : renvoie le nombre total de cases occupées par la flotille
/**********************************************/
bool CArmada::placer_Aleatoirement() // Placement aléatoire ET automatique de TOUS les bateaux sur la grille. Renvoie faux si le positionnement automatique a échoué.
{
int cpt;
int tailleEffectGrille;
bool ok = true;
// Initialisation aléatoire
srand(time(NULL));
// Tableau à 2 entrées de booléens correspondant à la grille de taille TAILLE_GRILLE.
// Un booléen signale la présence ou non d'un bateau déjà placé.
// Attention : TAILLE_GRILLE est la taille de la grille élargie y compris les légendes (A...J / 0...9)
tailleEffectGrille = TAILLE_GRILLE - 1; // Donc tailleEffectGrille = 10
vector<vector<bool> >deja_places;
deja_places.resize(tailleEffectGrille);
// Initialisation de chaque case de la grille de placement à faux.
// i : numéro de ligne
for (int i=0; i<tailleEffectGrille; i++) {
deja_places.resize(tailleEffectGrille);
// j : numéro de colonne
for (int j=0; j<tailleEffectGrille; j++) deja_places[j] = false;
}
// Pour chaque bateau à placer
for ( int index=0; (index<m_Effectif_Total) && ok; index++ ) {
// booléen qui signale que le bateau est correctement placé
bool correct = false;
cout << endl << "Placmt aleatoire de : " << m_Liste_Bateaux[index].get_Nom() << endl;
cpt = 0;
// tant que le bateau n'est pas placé
while (!correct) {
cpt++;
// Test si le nombre de tentatives est trop grand.
// Dans ce cas, on arrête.
if ( cpt > 1000 ) {
cout << "\tEssai placmt n° " << cpt << endl;
cout << "Placement impossible !" << endl;
ok = false;
break;
}
// Tirage aléatoire d'une coord. de placement
int lign = rand()%tailleEffectGrille; // 0 <= lign <= (tailleEffectGrille-1)
//cout << "ligne = " << lign << endl;
int col = rand()%tailleEffectGrille; // 0 <= col <= (tailleEffectGrille-1)
//cout << "colonne = " << col << endl;
// on vérifie que le bateau est bien dans la grille
if ( col + m_Liste_Bateaux[index].get_Taille() - 1 >= tailleEffectGrille ) {
// on dépasse à droite
// (lign, col) non valide => on saute la suite et on refait un nouveau tirage (lign, col)
continue;
}
// Maintenant on vérifie que toutes les positions du bateau sont sur des places libres
bool bien_place = true;
for (int i=0; i<m_Liste_Bateaux[index].get_Taille();i++) {
if (deja_places[lign]==true) { bien_place = false; }
}
if ( bien_place == false ) {
// Mauvais placement => on saute la suite et on refait un nouveau tirage (x, y)
continue;
}
// Arrivés ici, nous sommes certains que la position du bateau est acceptable
// On met à jour la grille qui renseigne la présence des bateaux déjà placés
for ( int j=0; j<m_Liste_Bateaux[index].get_Taille(); j++ ) { deja_places[lign][j] = true; }
cout << "\tligne ok = " << lign << endl;
cout << "\tcolonne ok = " << col << endl;
// Le bateau est bien placé
correct = true;
// On met à jour le point de départ de la position horizontale du bateau
m_Liste_Bateaux[index].set_Position ( lign , col );
}
}
return ok;
};
Je n'ai pas encore commencer a coder CGUI.Mais si qqun pouvait déja bien m'aider pour les deux classes précédentes, ça serai super simpa de sa part.
Merci d'avance
SimMaster
le 03 mars 2009 à 19h43
Bonsoir,
Tu as une question précise?
pierrealex56
le 04 mars 2009 à 08h40
Oui, en fait je ne sais pas quoi mettre dans les méthodes CArmada.cpp
J'ai bien le nom correctes des méthodes mais je ne sais quoi mettre dans ces méthodes. Si tu pouvais m'orienter ça serait simpa.