Instantly share code, notes, and snippets.
Created
December 25, 2011 13:54
-
Star
0
(0)
You must be signed in to star a gist -
Fork
1
(1)
You must be signed in to fork a gist
-
Save NightBrownie/1519280 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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) | |
{ | |
} | |
//------------------------------------------------------------------------------------------------------------------------- | |
//------------------------------------------------------------------------------------------------------------------------- |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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