void Game::execute(Command c) { // Mozgás if(c.GetMessageType()==1) { map->GetPlayer(c.GetPlayerId())->Move(c.GetMessage()%256); if(map->GetField(map->GetPlayer(c.GetPlayerId())->GetX(),map->GetPlayer(c.GetPlayerId())->GetY())->IsDeadly()) { map->PlayerDie(c.GetPlayerId(),map->GetField(map->GetPlayer(c.GetPlayerId())->GetX(),map->GetPlayer(c.GetPlayerId())->GetY())->GetOwner()); } if(map->GetPlayer(c.GetPlayerId())->GetSpeed()>1 && c.GetMessage()<256) { QTimer *qt=new QTimer(this); qt->setSingleShot(true); qt->start(100); connect(qt,SIGNAL(timeout()), this, SLOT(WaitingCommandExecute())); tempcommands.insert(qt,Command(c.GetPlayerId(),c.GetMessageType(),65536+256*map->GetPlayer(c.GetPlayerId())->GetSpeed()+c.GetMessage())); } if(c.GetMessage()>65536 && (c.GetMessage()/256)%256>0) { QTimer *qt=new QTimer(this); qt->setSingleShot(true); qt->start(100); connect(qt,SIGNAL(timeout()), this, SLOT(WaitingCommandExecute())); tempcommands.insert(qt,Command(c.GetPlayerId(),c.GetMessageType(),c.GetMessage()-256)); } map->GetField(map->GetPlayer(c.GetPlayerId())->GetX(),map->GetPlayer(c.GetPlayerId())->GetY())->Visit(map->GetPlayer(c.GetPlayerId())); } //Bomba lerakás: if(c.GetMessageType()==2 && map->GetPlayer(c.GetPlayerId())->CanDrop()) { uchar x=map->GetPlayer(c.GetPlayerId())->GetX(); uchar y=map->GetPlayer(c.GetPlayerId())->GetY(); map->GetField(x,y)->SetBomb(true); map->AddBomb(new Bomb(x,y,map->GetPlayer(c.GetPlayerId())->GetBombSize(),c.GetPlayerId(),bombtimeout,map->GetPlayer(c.GetPlayerId())->CanFail())); map->GetPlayer(c.GetPlayerId())->Plant(); } }
void Game::clientsync(Command c) { switch(c.GetMessageType()) { case 0: { emit PlayerPointChanged(c.GetPlayerId(),c.GetMessage()); break; } case 1://move { emit PlayerMoved(c.GetPlayerId(),c.GetMessage()); break; } case 2://plant { emit BombPlanted((c.GetMessage()/256)%256,c.GetMessage()%256,c.GetPlayerId()); break; } case 3://boom { if((c.GetMessage()/(256*256))%256==255)emit DeleteBomb((c.GetMessage()/256)%256,c.GetMessage()%256); emit FieldBlasted((c.GetMessage()/256)%256,c.GetMessage()%256,c.GetPlayerId(),(c.GetMessage()/(256*256))%256); break; } case 4://kioltas { emit FieldExcinted((c.GetMessage()/256)%256,c.GetMessage()%256); break; } case 5://die/blast { if(c.GetMessage()!=256){emit PlayerDied(c.GetPlayerId(),c.GetMessage());} else{emit PlayerBlasted(c.GetPlayerId());} break; } case 6://mezőváltozás { fields[(c.GetMessage()/256)%256][c.GetMessage()%256]=(c.GetMessage()/(256*256))%256; emit FieldChanged((c.GetMessage()/256)%256,c.GetMessage()%256,(c.GetMessage()/(256*256))%256); break; } case 7://bónuszok { switch(c.GetMessage()/(256*256*256)) { case 1: emit BonusTurnVisible((c.GetMessage()/256)%256,c.GetMessage()%256,(c.GetMessage()/(256*256))%256); break; case 2: emit BonusTurnInvisible((c.GetMessage()/256)%256,c.GetMessage()%256,(c.GetMessage()/(256*256))%256); break; case 3: emit PlayerTurnVisible(c.GetPlayerId()); break; case 4: emit PlayerTurnInvisible(c.GetPlayerId()); break; default: break; } break; } case 248: { emit Disconnected(); } case 249: { emit DeleteBomb((c.GetMessage()/256)%256,c.GetMessage()%256); break; } case 250://pályaszinkron { fields[(c.GetMessage()/256)%256][c.GetMessage()%256]=(c.GetMessage()/(256*256))%256; break; } case 251://játék kezdete { emit GameStarted(c.GetMessage()); if(clientconnection && cup->GetPlayerName(1)=="") { for(uchar i=0;i<clientconnection->GetPlayers().size();i++)cup->AddPlayer(clientconnection->GetPlayers().at(i)); } break; } case 252://játék vége { emit GameOver(); break; } case 253://a győztes { switch(c.GetMessage()) { case 0: emit PlayerWonTheCup(GetPlayers()[c.GetPlayerId()]); break; case 1: emit PlayerWonTheRound(GetPlayers()[c.GetPlayerId()]); if(map){destroymap->stop();QTimer::singleShot(2000,this,SLOT(StopTheGame()));} break; } break; } case 254://alaphelyzetbe állítás { emit SetPlayerStartPosition(c.GetPlayerId(),(c.GetMessage()/256)%256,c.GetMessage()%256); break; } case 255://azonosítás { playerid=c.GetPlayerId(); survive=c.GetMessage()==0?true:false; break; } default: { break; } } }
void Game::validate(Command c) { if( c.GetMessageType()!=1 && c.GetMessageType()!=2 ) { return; } if(map->GetPlayer(c.GetPlayerId())==0) { return; } if(!(map->GetPlayer(c.GetPlayerId())->IsAlive()) && c.GetMessageType()!=5) { return; } Player *player=map->GetPlayer(c.GetPlayerId()); //Move parancsok: if(c.GetMessageType()==1) { if(!map->GetPlayer(c.GetPlayerId())->CanControll()) { switch(c.GetMessage()%256) { case 0: c=Command(c.GetPlayerId(),c.GetMessageType(),c.GetMessage()+3); break; case 1: c=Command(c.GetPlayerId(),c.GetMessageType(),c.GetMessage()+1); break; case 2: c=Command(c.GetPlayerId(),c.GetMessageType(),c.GetMessage()-1); break; case 3: c=Command(c.GetPlayerId(),c.GetMessageType(),c.GetMessage()-3); break; default: break; } } uchar x=player->GetX(); uchar y=player->GetY(); Field *field=map->GetField(x,y); if(c.GetMessage()%256==0 && (field->GetLeftNeighbour()==0 || !field->GetLeftNeighbour()->IsPermeable())) { return; } if(c.GetMessage()%256==1 && (field->GetTopNeighbour()==0 || !field->GetTopNeighbour()->IsPermeable())) { return; } if(c.GetMessage()%256==2 && (field->GetBottomNeighbour()==0 || !field->GetBottomNeighbour()->IsPermeable())) { return; } if(c.GetMessage()%256==3 && (field->GetRightNeighbour()==0 || !field->GetRightNeighbour()->IsPermeable())) { return; } } if(c.GetMessageType()==2) { c=Command(c.GetPlayerId(),c.GetMessageType(),map->GetPlayer(c.GetPlayerId())->GetX()*256+map->GetPlayer(c.GetPlayerId())->GetY()); } //Bomba lerakás: if(c.GetMessageType()==2 && !map->GetPlayer(c.GetPlayerId())->CanDrop()) { return; } emit ServerValidate(c); execute(c); }