home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 17
/
Freelog017.iso
/
BeOS
/
ababelone
/
Sources
/
FenetreChangementDePartie.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2000-11-12
|
8KB
|
212 lines
/*
Copyright (C) 2000 by Hervé PHILIPPE <rv@bemail.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "FenetreChangementDePartie.h"
/////////////////////////////////////////////////
// CONSTRUCTEUR de "FenetreChangementDePartie" //
/////////////////////////////////////////////////-----------------------------------------
// Affiche la fenêtre permettant de choisir le type des joueurs (humain, ordinateur...) --
//----------------------------------------------------------------------------------------
FenetreChangementDePartie::FenetreChangementDePartie(BWindow* fenetre_abalone, uint8* tableau_joueurs, uint8* ptr_nombre_joueurs, TextesDuLogiciel* textes, bool nouvelle_partie)
// 5 PARAMETRES : ENTREE/SORTIE (envoie message) ENTREE/SORTIE ENTREE/SORTIE ENTREE ENTREE
: BWindow(POSITION_FENETRE_NOUVELLE_PARTIE, LABEL_FENETRE_NOUVELLE_PARTIE, B_MODAL_WINDOW, B_NOT_CLOSABLE | B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
{
BRect rect;
BRadioButton* radio_bouton;
char chaine[100];
int niveau;
int i;
m_FenetreAbalone = fenetre_abalone;
m_TableauJoueurs = tableau_joueurs;
m_ptrNombreJoueurs = ptr_nombre_joueurs;
m_NombreJoueursSauvegarde = *m_ptrNombreJoueurs;
m_NouvellePartie = nouvelle_partie;
m_TableauJoueursSauvegarde = new uint8[NOMBRE_JOUEURS_MAXI];
for (i=0; i < NOMBRE_JOUEURS_MAXI; i++)
m_TableauJoueursSauvegarde[i] = m_TableauJoueurs[i];
m_TableauGroupeJoueurs = new (BBox*)[NOMBRE_JOUEURS_MAXI];
if (NOMBRE_JOUEURS_MAXI == 2)
ResizeBy(150*NOMBRE_JOUEURS_MAXI, 20 * NIVEAU_MAXIMUM_ORDINATEUR - 30);
else
ResizeBy(150*NOMBRE_JOUEURS_MAXI, 20 * NIVEAU_MAXIMUM_ORDINATEUR);
rect = POSITION_GROUPE_JOUEURS;
rect.right += 150*NOMBRE_JOUEURS_MAXI;
rect.bottom += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
if (NOMBRE_JOUEURS_MAXI == 2)
rect.bottom -= 30;
m_GroupeJoueurs = new BBox(rect,textes->Texte(31));
m_GroupeJoueurs->SetLabel(textes->Texte(31));
rect = POSITION_BOUTON_COMMENCER_PARTIE;
rect.top += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
rect.bottom += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
if (NOMBRE_JOUEURS_MAXI == 2) {
rect.top -= 30;
rect.bottom -= 30;
}
m_BoutonCommencer = new BButton(rect, textes->Texte(33), textes->Texte(33),
new BMessage(MSG_COMMENCER_PARTIE), B_FOLLOW_ALL);
m_BoutonCommencer->MakeDefault(true);
rect.right = POSITION_BOUTON_ANNULER.right;
rect.left = POSITION_BOUTON_ANNULER.left;
m_BoutonAnnuler = new BButton(rect, textes->Texte(28), textes->Texte(28),
new BMessage(MSG_ANNULER), B_FOLLOW_ALL);
m_Fond = new BView(Bounds(), "Fond", B_FOLLOW_ALL, B_WILL_DRAW);
m_TableauBoutonsRadio = new (BRadioButton**)[NOMBRE_JOUEURS_MAXI];
for (i=0; i < NOMBRE_JOUEURS_MAXI; i++) {
m_TableauBoutonsRadio[i] = new (BRadioButton*)[NIVEAU_MAXIMUM_ORDINATEUR+1]; // +1 = HUMAIN
sprintf(chaine, "%s%d", textes->Texte(32), i+1);
rect = POSITION_GROUPE_JOUEUR1;
rect.left += 150 * i;
rect.right += 150 * i;
rect.bottom += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
m_TableauGroupeJoueurs[i] = new BBox(rect,chaine);
m_TableauGroupeJoueurs[i]->SetLabel(chaine);
niveau = 0;
rect = POSITION_HUMAIN;
m_TableauBoutonsRadio[i][0] = new BRadioButton(rect, textes->Texte(24), textes->Texte(24), new BMessage(MSG_HUMAIN_JOUEUR1+256*i+niveau));
if (m_TableauJoueurs[i] == 0)
m_TableauBoutonsRadio[i][0]->SetValue(1);
m_TableauGroupeJoueurs[i]->AddChild(m_TableauBoutonsRadio[i][0]);
for (niveau=1; niveau <= NIVEAU_MAXIMUM_ORDINATEUR; niveau++) {
rect.top += 20;
rect.bottom += 20;
sprintf(chaine, "%s %s %d", textes->Texte(25), textes->Texte(29), niveau);
m_TableauBoutonsRadio[i][niveau] = new BRadioButton(rect, chaine, chaine, new BMessage(MSG_HUMAIN_JOUEUR1+256*i+niveau));
if (m_TableauJoueurs[i] == niveau)
m_TableauBoutonsRadio[i][niveau]->SetValue(1);
m_TableauGroupeJoueurs[i]->AddChild(m_TableauBoutonsRadio[i][niveau]);
}
m_GroupeJoueurs->AddChild(m_TableauGroupeJoueurs[i]);
}
if (NOMBRE_JOUEURS_MAXI > 2)
for (i=0; i < NOMBRE_JOUEURS_MAXI-1; i++) {
rect = POSITION_RADIO_2JOUEURS;
rect.top += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
rect.bottom += 20 * NIVEAU_MAXIMUM_ORDINATEUR;
rect.left += 70 * i;
rect.right += 70 * i;
sprintf(chaine, "%d %s", i+2, textes->Texte(30));
radio_bouton = new BRadioButton(rect, chaine, chaine, new BMessage(MSG_2JOUEURS+i));
m_GroupeJoueurs->AddChild(radio_bouton);
if (*m_ptrNombreJoueurs == 2 + i)
radio_bouton->SetValue(1);
if (nouvelle_partie == false)
radio_bouton->SetEnabled(false);
}
GriserJoueurs();
m_Fond->AddChild(m_GroupeJoueurs);
m_Fond->AddChild(m_BoutonCommencer);
m_Fond->AddChild(m_BoutonAnnuler);
m_Fond->SetViewColor(216,216,216);
AddChild(m_Fond);
Show();
}
////////////////////////////////////////////////
// DESTRUCTEUR de "FenetreChangementDePartie" //
////////////////////////////////////////////////-------
// Détruit les tableaux alloués dans le constructeur --
//-----------------------------------------------------
FenetreChangementDePartie::~FenetreChangementDePartie()
// AUCUN PARAMETRE
{
delete m_TableauGroupeJoueurs;
delete m_TableauJoueursSauvegarde;
}
////////////////////////////////
// FONCTION "MessageReceived" //
////////////////////////////////--------------------------------------
// Reçoit et traite tous les messages pour la gestion de la fenêtre --
//--------------------------------------------------------------------
void // AUCUNE VALEUR DE RETOUR
FenetreChangementDePartie::MessageReceived(BMessage* message)
// 1 PARAMETRE : ENTREE
{
int i;
switch(message->what)
{
case MSG_COMMENCER_PARTIE:
if (m_FenetreAbalone->Lock()) {
if (m_NouvellePartie == true)
m_FenetreAbalone->PostMessage(MSG_COMMENCER_NOUVELLE_PARTIE);
else
m_FenetreAbalone->PostMessage(MSG_COMMENCER_PARTIE);
m_FenetreAbalone->Unlock();
}
break;
case MSG_ANNULER:
for (i=0; i < NOMBRE_JOUEURS_MAXI; i++)
m_TableauJoueurs[i] = m_TableauJoueursSauvegarde[i];
*m_ptrNombreJoueurs = m_NombreJoueursSauvegarde;
PostMessage(B_QUIT_REQUESTED);
break;
default:
for (i=0; i < NOMBRE_JOUEURS_MAXI; i++) {
if (message->what >= uint32(MSG_HUMAIN_JOUEUR1+256*i) && message->what <= uint32(MSG_HUMAIN_JOUEUR1+256*i+NIVEAU_MAXIMUM_ORDINATEUR))
m_TableauJoueurs[i] = message->what - MSG_HUMAIN_JOUEUR1-256*i;
if (message->what == uint32(MSG_2JOUEURS+i)) {
*m_ptrNombreJoueurs = 2 + i;
GriserJoueurs();
}
}
break;
}
}
/////////////////////
// FONCTION "Quit" //
/////////////////////-
// Ferme la fenêtre --
//--------------------
void // AUCUNE VALEUR DE RETOUR
FenetreChangementDePartie::Quit()
// AUCUN PARAMETRE
{
BWindow::Quit();
}
//////////////////////////////
// FONCTION "GriserJoueurs" //
//////////////////////////////-----------
// Grise les joueurs qui ne jouent pas --
//---------------------------------------
void // AUCUNE VALEUR DE RETOUR
FenetreChangementDePartie::GriserJoueurs()
// AUCUN PARAMETRE
{
int i, niveau;
bool grise;
for (i=0; i < NOMBRE_JOUEURS_MAXI; i++) {
grise = i < *m_ptrNombreJoueurs;
for (niveau=0; niveau <= NIVEAU_MAXIMUM_ORDINATEUR; niveau++)
m_TableauBoutonsRadio[i][niveau]->SetEnabled(grise);
}
//m_ptrNombreJoueurs;
}