예제 #1
0
    void Resource<Dim, Type, Data>::move(Direction<Dim> _dir, double _time)
    { 
    	if(_time < 0.)
    	{
			logger(Logger::WARNING) << "Negative time, fix to 0";
			_time = 0.;
    	}
	    Coordonate<Dim, Type> tcoord = Object<Dim, Type>::coord;
	    // New position on the specified direction 
	    tcoord[_dir.getValue().first] += _dir.getValue().second*(velocity*_time); 
	    if(true) // TEST IN SPACE + NOT COLLIDING
	        Object<Dim, Type>::coord = tcoord;
    }
예제 #2
0
/**
  * Eine Figur verschieben. Dabei werden die Zellenrahmen beachtet.
  * @param figure Die zu verschiebende Figur.
  * @param direction Richtung, in die die Figur verschoben werden soll.
  */
void GameController::move(Figure* figure, Direction& direction) {
	unsigned int x = figure->getX();
	unsigned int y = figure->getY();
	if (field->allowsBorderMovement(x, y, direction)) {
		switch (direction.getValue()) {
			case Direction::UP:    y--; break;
			case Direction::LEFT:  x--; break;
			case Direction::DOWN:  y++; break;
			case Direction::RIGHT: x++; break;
		}
	}
	// Durch einen Tunnel verlassen -> auf dem anderen Ende wieder einsetzen
	x = (x + Field::FIELD_WIDTH)  % Field::FIELD_WIDTH;
	y = (y + Field::FIELD_HEIGHT) % Field::FIELD_HEIGHT;

	figure->setX(x);
	figure->setY(y);
	figure->setDirection(direction);

	// Wenn Pacman bewegt wurde: Nachsehen, ob sich auf dem neuen
	// Feld Essen befindet.
	if (figure == pacman) {
		if (field->getCell(pacman->getX(), pacman->getY())->isFood()) {
			points += DOT_POINTS;
			foodCount--;
		}
		field->getCell(pacman->getX(), pacman->getY())->setFood(false);
	}
}