Skip to content

Instantly share code, notes, and snippets.

@NightBrownie
Created December 25, 2011 13:54
Show Gist options
  • Save NightBrownie/1519280 to your computer and use it in GitHub Desktop.
Save NightBrownie/1519280 to your computer and use it in GitHub Desktop.
#include "MultiPlayerMenu.h"
MultiPlayerMenu::MultiPlayerMenu(void):MenuClass()
{
_players = NULL;
_currentPlayer = NULL;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
MultiPlayerMenu::MultiPlayerMenu(vector<Player*>* players, Player* currentPlayer, ITexture* fonImage,
IMusic* fonMusic,Position pos, Size size,State state):MenuClass(fonImage, fonMusic, pos, size, state)
{
_isPlayerShootedYet = false;
_players = players;
_currentPlayer = currentPlayer;
_isServer = false;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::Initialize(bool IsServer)
{
_isServer = IsServer;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::Shoot(void)
{
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::Draw(void)
{
MenuClass::Draw();
_currentPlayer->Draw();
for (int i = 0; i < _players->size(); i++)
{
_players->operator[](i)->Draw();
}
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::Process(Position mousePos,bool isClicked,bool isPressed,char* _char)
{
//-------------------------------------------------------------------------------------------------------------------------
//Пересылка процесса всем элементам на экране из списка _objectList
MenuClass::Process(mousePos, isClicked, isPressed, _char);
//-------------------------------------------------------------------------------------------------------------------------
//Вызов у игрока Procees, зачем? оО
_currentPlayer->Process(mousePos,isClicked,isPressed,_char);
//-------------------------------------------------------------------------------------------------------------------------
//проверка, на то, что игрок не выстрелил или не так? распиши плз что делается внутри
if(!_isPlayerShootedYet)
{
for (int i = 0; i < _players->size(); i++)
{
_players->operator[](i)->ResetAttacked();
}
for (int i = 0; i < _players->size(); i++)
{
_players->operator[](i)->Process(mousePos,isClicked,isPressed,_char);
if(((*_players)[i]->_isWasAttacked)&&(!(*_players)[i]->_isShipWasAttacked))
{
_isPlayerShootedYet = true;
}
}
}
else
{
if(_objectList[0]->GetState() == PRESSED)
{
_isPlayerShootedYet = false;
_players->push_back(_currentPlayer);
for (int i = 0; i < _players->size()-1; i++)
{
if(!(*_players)[i]->_isDied)
_players->operator[](i)->MakeShot(_players);
}
_players->pop_back();
for (int i = 0; i < _players->size(); i++)
{
_players->operator[](i)->Process(mousePos,false,false,_char);
}
return;
}
for (int i = 0; i < _players->size(); i++)
{
//-------------------------------------------------------------------------------------------------------------------------
//вызов proceess у компов, но зачем? оО
_players->operator[](i)->Process(mousePos,false,false,_char);
}
}
//-------------------------------------------------------------------------------------------------------------------------
//Подсчет кол-ва оставшихся кораблей у противника
int countOfEnemy = 0;
for(int i = 0; i<_players->size();i++)
{
if((!(*_players)[i]->_isDied)&&(!(*_players)[i]->_isFriend))
countOfEnemy++;
}
//-------------------------------------------------------------------------------------------------------------------------
//Проверка, сколько осталось противника кораблей, если ноль, то конец игры
if(countOfEnemy == 0)
{
_currentPlayer->_matrix->SetPosition(Position(100,100,0));
}
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
Player* MultiPlayerMenu::GetCurrentPlayer(void)
{
return _currentPlayer;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
vector<Player*>* MultiPlayerMenu::GetPlayers(void)
{
return _players;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
Player* MultiPlayerMenu::GetPlayer(int index)
{
Player* res = NULL;
if ((index < 0) && (index >= _players->size()))
{
res = (*_players)[index];
}
return res;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::AddPlayer(Player* newPlayer)
{
if (newPlayer != NULL)
_players->push_back(newPlayer);
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::SetCurrentPlayer(Player* player)
{
_currentPlayer = player;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
void MultiPlayerMenu::SetPlayers(vector<Player*>* players)
{
_players = players;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
MultiPlayerMenu::~MultiPlayerMenu(void)
{
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
#include "PreClientMultiplayerMenu.h"
#include "MainClass.h"
PreClientMultiplayerMenu::PreClientMultiplayerMenu(void)
{
}
PreClientMultiplayerMenu::PreClientMultiplayerMenu(ITexture* fonImage, IMusic* fonMusic,Position pos, Size size,State state,MainClass* owner):
MenuClass(fonImage,fonMusic,pos,size,state)
{
_owner = owner;
_server = NULL;
_client = NULL;
players = new vector<Player*>();
playerNames = new vector<char*>();
isReady = false;
}
void PreClientMultiplayerMenu::Draw()
{
MenuClass::Draw();
}
void PreClientMultiplayerMenu::InitializeClient(int port, char* addr, char* nameServer)
{
((MenuLabel*)_objectList[5])->SetCaption(nameServer);
_client = new Client(addr, port, this);
_objectList[0]->SetState(NORMALSTATE);
_objectList[1]->SetState(NORMALSTATE);
_objectList[7]->SetState(NORMALSTATE);
isReady = false;
}
void PreClientMultiplayerMenu::Process(Position mousePos,bool isClicked,bool isPressed,char* _char)
{
vector<Ship*>* ships = new vector<Ship*>(0);
int common = 0;
MenuClass::Process(mousePos,isClicked,isPressed, _char);
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
//check - if we can to allow to press button START
//проверка, можем ли мы нажать кнопку старт
try
{
PlacementMatrix* t = (PlacementMatrix*)_objectList[2];
if(t->_isRightFilled && !isReady)
{
if(_objectList[1]->GetState() == DEACTIVE) //"включаем" кнопку старт
_objectList[1]->SetState(NORMALSTATE);
}
else
_objectList[1]->SetState(DEACTIVE);
}
catch(int ex)
{
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
//авторасстановка кораблей ++
if(_objectList[7]->GetState() == PRESSED)
{
//[1]->SetState(NORMALSTATE);
PlacementMatrix* mat = (PlacementMatrix*)_objectList[2];
matrix* player_mat = mat->GenretateMatrix(mat->_4PShip,mat->_3PShip,mat->_2PShip,mat->_1PShip,mat->_textureExplo,&ships);
mat->_listOfShip = ships;
player_mat->_cellSize = mat->_cellSize;
player_mat->SetPosition(mat->GetPosition());//make lines beetwen cells
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
mat->_cellMatrix[i][j]=player_mat->_cellMatrix[i][j];
mat->_countOf1PSh = 0;
mat->_countOf2PSh = 0;
mat->_countOf3PSh = 0;
mat->_countOf4PSh = 0;
mat->_isRightFilled = true;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
//проверка нажатия клавиши "старт"
if(_objectList[1]->GetState() == PRESSED)
{
/*
//-------------------------------------------------------------------------------------------------------------------------
//настройка рандома непонятно зачем
time_t rawtime;
time ( &rawtime );
srand((int)rawtime);
//-------------------------------------------------------------------------------------------------------------------------
//заводим переменные для настроек игроков и компа, а также для вектора игроков
MenuDropList* s1;
MenuDropList* s2;
Position matrixPos;
vector<Player*>* players = new vector<Player*>(0);
bool isFriendly;
bool isCanShot = true;
int stage;
//-------------------------------------------------------------------------------------------------------------------------
//настройка матрицы игрока и создание самого игрока
PlacementMatrix* mat = (PlacementMatrix*)_objectList[2];//our Placement matrix
common+=1;//count of players
mat->edgeHor = 3;
mat->edgeVert = 3;
Size cellSize(15,15);
mat->_cellSize = cellSize;
mat->SetPosition(Position(10,10,0));//position of our player
MenuDropList* team = (MenuDropList*)_objectList[16];//team of player
matrix* player_mat = new matrix(*mat);//player matrix
player_mat->_cellSize = cellSize;
player_mat->SetPosition(mat->GetPosition());//make lines beetwen cells
player_mat->_isFriend = true;
player_mat->_isCanShot = false;
Player* you = new Player(atoi(team->GetChoisedElement()->GetCaption()),player_mat,((MenuEdit*)_objectList[4])->Get_Text(),mat->_listOfShip,mat->GetPosition(),
mat->GetSize(),mat->GetState(),0,0,0,0,true,true);
//-------------------------------------------------------------------------------------------------------------------------
//Генерироание матриц противников и их расстановка
for(int i = 11; i<16;i++)
{
s1 = (MenuDropList*)_objectList[i];//team of computer
s2 = (MenuDropList*)_objectList[i-6];//stage of computer
if(s2->GetChoisedElement()->GetCaption() != "Close")
{
//Генерация матрицы для компа
ships = new vector<Ship*>(0);
matrix* m =new matrix();
m = mat->GenretateMatrix(mat->_4PShip,mat->_3PShip,mat->_2PShip,mat->_1PShip,mat->_textureExplo,&ships);
//Расстановка матриц на поле
if(i-10<=2)
{
matrixPos = Position(250*(i-10)+10,10,0);
}
else
{
matrixPos = Position(250*(i-13)+10,310,0);
}
//нечто
m->edgeHor = mat->edgeHor;
m->edgeVert = mat->edgeVert;
m->_cellSize = cellSize;
m->SetPosition(matrixPos);
//-------------------------------------------------------------------------------------------------------------------------
//выбор команды игрока и, соотв-но, его предрасположенности к нам
if(s1->GetChoisedElement()->GetCaption() == team->GetChoisedElement()->GetCaption())
{
isFriendly = true;
m->_isFriend = true;
m->_isCanShot = false;
}
else
{
isFriendly = false;
m->_isFriend = false;
m->_isCanShot = true;
}
//-------------------------------------------------------------------------------------------------------------------------
//выбор сложности компа
if(s2->GetChoisedElement()->GetCaption() =="Comp(Easy)")
stage = 1;
else
stage = 2;
//создание компа и добавление его в список игроков
Player* player = new Player(atoi(((MenuDropList*)_objectList[i])->GetChoisedElement()->GetCaption()),m,new string(s2->GetChoisedElement()->GetCaption()),
ships,matrixPos,Size(300,300),NORMALSTATE,0,0,stage,0,isCanShot,isFriendly);
players->push_back(player);
}
}
//-------------------------------------------------------------------------------------------------------------------------
//переход в синглплэер и настройка текущего игрока и остальных игроков
//_owner->SPMenu->SetCurrentPlayer(you);
//_owner->SPMenu->SetPlayers(players);
//_owner->_gameState = SINGLEPLAYER;
*/
_objectList[0]->SetState(DEACTIVE);
_objectList[1]->SetState(DEACTIVE);
_objectList[7]->SetState(DEACTIVE);
isReady = true;
}
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
//проверка нажатия клавиши "Back"
if(_objectList[0]->GetState() == PRESSED)
{
_owner->_gameState = CHANGING_SERVER;
}
}
PreClientMultiplayerMenu::~PreClientMultiplayerMenu(void)
{
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment