Exemple #1
0
std::string Game::receive()
{
    std::string message = conn.rec_string();
    if(verbosity == 2)
    {
        std::cout<<"Recieved: "<<message<<std::endl;
    }
    Json::Value root;
    Json::Reader reader;
    reader.parse(message,root,false);
    if(root["type"].asString() == "changes")
    {
        update_game(message);
    }
    else if(root["type"].asString() == "player_id")
    {
        ai.my_player_id = root["args"]["id"].asInt();
    }
    else if(root["type"].asString() == "game_over")
    {
        throw GameOverException(root["args"]["winner"].asInt(),
                                root["args"]["reason"].asString());
    }
    return message;
}
Exemple #2
0
//após inicializar tudo, executa a fase até seu fim
void Fase::execHorda(int i) throw(GameOverException)
{
	this->hordas->at(i)->exec();
	while(this->hordas->at(i)->getInimigosSobrando() > 0)
	{
		this->life -= this->hordas->at(i)->verificaEstadoInimigos();
		//verifica se deu game over
		if(this->life <= 0)
			throw GameOverException("");
		//executa a horda
		this->hordas->at(i)->exec1();
	}
}
Exemple #3
0
void DeathEvent::execute()
{
    player->alive=false;
    if(game->curTurn->player==player) game->curTurn->end();
    //TODO: no longer any card's target
    onTiming(beforeRevealRole);
    for(int i=0;i<game->nPlayer;i++)
    {
        Player *p=game->players[i];
        ostringstream s;
        s<<"death_role:"<<player->toString()<<":"<<player->role;
        p->inform(s.str());
    }
    if(player->role==Lord)
    {
        bool t=false;
        for(int i=0;i<game->nPlayer;i++)
        {
            Player *p=game->players[i];
            if(p->alive)
            {
                if(p->role!=Renegade||t) throw GameOverException(rebelWin);
                t=true;
            }
        }
        throw GameOverException(renegadeWin);
    }
    else if(player->role==Rebel||player->role==Renegade)
    {
        int i;
        for(i=0;i<game->nPlayer;i++)
        {
            Player *p=game->players[i];
            if(p->alive&&(p->role==Rebel||p->role==Renegade)) break;
        }
        if(i==game->nPlayer) throw GameOverException(lordWin);
    }
    onTiming(onDeath);
    //TODO: remove all skills
    vector<Card*> cards;
    Card* c;
    for(c=player->hand.next;c!=&player->hand;c=c->next) cards.push_back(c);
    for(c=player->equipArea.next;c!=&player->equipArea;c=c->next) cards.push_back(c);
    for(c=player->judgeArea.next;c!=&player->judgeArea;c=c->next) cards.push_back(c);
    (new DiscardEvent(NULL,cards))->happen();
    vector<MoveStruct*> data;
    for(c=player->onGeneral.next;c!=&player->onGeneral;c=c->next)
        data.push_back(new MoveStruct(c,&game->discardPile));
    for(c=player->byGeneral.next;c!=&player->byGeneral;c=c->next)
        data.push_back(new MoveStruct(c,&game->discardPile));
    (new MoveEvent(data))->happen();
    //TODO: general card
    if(Player *killer=getKiller())
    {
        if(player->role==Rebel) killer->draw(3);
        else if(player->role==Loyalist&&killer->role==Lord)
        {
            cards.clear();
            for(c=killer->hand.next;c!=&killer->hand;c=c->next) cards.push_back(c);
            for(c=killer->equipArea.next;c!=&killer->equipArea;c=c->next) cards.push_back(c);
            killer->discard(cards);
        }
    }
    onTiming(afterDeath);
}