Exemple #1
0
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();
	}
}
Exemple #2
0
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;
		}
	}
}
Exemple #3
0
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);
}