int shark_rule1 (wator_t* pw, int x, int y, int *k, int* l){
	cell_set cs /* per gestire return di array */;
	int i = x;
	int j = y;
	int *move = NULL; /* sarà occupato da un array di due elementi i e j */
	int ret = STOP; /* valore di return */
	if ( ! pw ) { 
		errno = EFAULT;
		return -1;
	}
	/* ottine un array di celle che contengono pesci */ 
	if ( ( cs = closeCells( i, j, pw->plan, pred_is_fish ) ).n != 0 ) { 
		/*  viene prediletto mangiare */
		/* scelta random di quale mangiare */
		move = cs.cells[ RAND( cs.n ) ];
		/* rimuovo il pesce dal contatore */
		#ifdef _ONLY_ONE_ 
		pw->nf --; 
		#endif
		ret = EAT;
		pw->plan->dtime[i][j] = 0;  /* NON è scritto nel testo, ma dovrebbe ???  */
	}else
		/* Non sono stati trovati pesci, si cercano celle libere */ 
		if ( ( cs = closeCells ( i, j, pw->plan, pred_is_water ) ).n != 0 ){
			move = cs.cells[ RAND (cs.n) ];
			ret = MOVE;
		}
	/* assegnamento risultato ( se move == NULL ) allora la mossa è stop */
	*k = move ? move[0] : i;
	*l = move ? move[1] : j;
	/* aggioramento distruttivo : */
	if ( move ) moveFromTo( pw->plan , i, j, *k, *l );
	return ret;
}
Ejemplo n.º 2
0
void CFBMatch::teamPositionAck(int side, const vector<float>& p, int ballPlayerId, unsigned int timeStamp)
{
    auto team = m_teams[side];
    
    int size = team->getPlayerNumber();
    
    if (timeStamp == 0)     // timeStamp为0表示暂停时候的强制同步
    {
        for (int i = 0; i < size; ++i)
        {
            Point pos(p[i * 4], p[i * 4 + 1]);
            Point vec(p[i * 4 + 2], p[i * 4 + 3]);
            auto player = team->getPlayer(i);
            
            player->loseBall();
            player->setPosition(pos);
            player->setMovingVector(vec);
        }
        
        if (ballPlayerId != -1)
        {
            team->getPlayer(ballPlayerId)->gainBall();
        }
    }
    else
    {
        float dt = m_proxy->getDeltaTime(timeStamp);
        
        for (int i = 0; i < size; ++i)
        {
            Point pos(p[i * 4], p[i * 4 + 1]);
            Point vec(p[i * 4 + 2], p[i * 4 + 3]);
            auto player = team->getPlayer(i);

            player->moveFromTo(pos, vec, dt, m_SYNC_TIME);
        }
        
        CC_ASSERT(team == m_teamsInMatch[(int)SIDE::OPP]);
        m_syncTime[(int)SIDE::OPP] = m_SYNC_TIME;
    }
}
/* simile a rule 1*/
int fish_rule3 (wator_t* pw, int x, int y, int *k, int* l){
	cell_set cs /* per gestire return di array */;
	int i = x; 
	int j = y;
	int *move = NULL; /* sarà occupato da un array di due elementi i e j */
	int ret = STOP; /* valore di return */
	if ( ! pw ) { 
		errno = EFAULT;
		return -1;
	}
	/* prelevo una casella libera a caso */ 
	if ( ( cs = closeCells ( i, j, pw->plan, pred_is_water ) ).n != 0 ){
		move = cs.cells[ RAND (cs.n) ];
		ret = MOVE;
	}
	/* assegnamento risultato ( se move == NULL ) allora la mossa è stop */
	*k = move ? move[0] : i;
	*l = move ? move[1] : j;
	/* aggioramento distruttivo (se è stata selezionata move): */
	if ( move ) moveFromTo( pw->plan , i, j, *k, *l );
	return ret;	
}
void ViewSphereRender::moveViewpoint()
{
	moveFromTo(m_startPos, m_targetPos);
}