コード例 #1
0
ファイル: GameLogic.cpp プロジェクト: matheuscamargo/Mjollnir
void GameLogic::updateMoveList_() {
  Command command;
  for (int idx = 0; idx <= 1; idx++) {
    moveList_[idx].clear();
    Coordinate currentHeadCoord = worldModel_.players[idx].body.back();
    Coordinate nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::UP);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::UP;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::DOWN);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::DOWN;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::LEFT);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::LEFT;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::RIGHT);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::RIGHT;
      moveList_[idx].push_back(command);
    }
  }
}
コード例 #2
0
std::vector<Node *> Path::loadKernel()
{

	std::vector<Node *> candidates;
	
	if(currentNode == NULL)
		return candidates;
	int x = currentNode->x;
	int y = currentNode->y;
	int r,g,b;
	int offset = kernelSize / 2;
	int ki,kj;
	ki = kj = 0;
	for(int i=y-offset, ki=0; i<y+offset+1; ++i, ki++)
	{
		for(int j=x-offset, kj=0; j<x+offset+1; ++j, kj++)
		{
			kernel->setPixel(ki,kj,0,0,0);
			if(isValidCoordinate(img, i,j))
			{
				img->getPixel(i,j,r,g,b);
				if(getNode(i,j) != NULL && !getNode(i,j)->visited)
				{
					candidates.push_back(getNode(i,j));
				}

			}

		}
	}
	return candidates;

	
}
コード例 #3
0
ファイル: GameLogic.cpp プロジェクト: marcoprado17/Mjollnir
bool GameLogic::update(Command command, int32_t playerId) {
  size_t idx = 0;
  if(playerId == player1_){
    idx = 0;
  }
  else if(playerId == player2_){
    idx = 1;
  }
  else {
    return false;
  }

  Coordinate nextHeadPosition = getUpdatedHeadPosition(
    worldModel_.players[idx].body.back(), command.direction);
  worldModel_.players[idx].body.push_back(nextHeadPosition);
  
  if (isValidCoordinate(nextHeadPosition) &&
      field_[nextHeadPosition.x][nextHeadPosition.y] == kEmpty) {
    field_[nextHeadPosition.x][nextHeadPosition.y] = playerId;
  }
  else {
    if (winner_ == std::to_string(kNoWinner)) {
      winner_ = (player1_ == playerId) ? std::to_string(player2_) : std::to_string(player1_);
    }
    else {
      winner_ = std::to_string(kNoWinner);  // tie
    }
    hasFinished_ = true;
  }
  return true;
}
コード例 #4
0
void Grid::drawVerticalLines(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) const {
  QVector<QLineF> lines;
  for (int x = minimalXCoordinate(); x <= maximalXCoordinate(); x++) {
    bool started = false;
    int startY;
    for (int y = minimalYCoordinate(x); y <= maximalYCoordinate(x); y++) {
      if (!started && isValidCoordinate(x, y)) {
        started = true;
        startY = y;
      }
      if (started && !isValidCoordinate(x, y + 1)) {
        started = false;
        lines.push_back(QLineF(getFieldPosition(x, startY), getFieldPosition(x, y)));
      }
    }
  }
  painter->drawLines(lines);
}
コード例 #5
0
void Grid::drawRightDiagonalLines(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) const {
  QVector<QLineF> lines;
  for (int sum = minimalXCoordinate() + minimalYCoordinate(); sum < maximalXCoordinate() + maximalYCoordinate(); sum++) {
    bool started = false;
    int startX;
    for (int x = minimalXCoordinate(); x <= maximalXCoordinate(); x++) {
      if (!started && isValidCoordinate(x, sum -x)) {
        started = true;
        startX = x;
      }
      if (started && !isValidCoordinate(x + 1, sum - x - 1)) {
        started = false;
        QPointF startPoint = getFieldPosition(startX, sum - startX);
        QPointF endPoint = getFieldPosition(x, sum - x);
        lines.push_back(QLineF(startPoint, endPoint));
      }
    }
  }
  painter->drawLines(lines);
}
コード例 #6
0
void Grid::drawHandicapSpots(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) const {
  painter->setBrush(Qt::black);
  QList<QPair<int,int> > points = getHandicapCoordinates();

  QPair<int, int> point;
  foreach(point, points)
    {
      if (isValidCoordinate(point.first, point.second))
      painter->drawEllipse(getFieldPosition(point.first, point.second),
          s_handicapSpotRadius , s_handicapSpotRadius);
    }
}
コード例 #7
0
void Grid::drawFieldsShape(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) const {
  QTransform transform = painter->transform();
  for (int x = minimalXCoordinate(); x <= maximalXCoordinate(); x++) {
    for (int y = minimalYCoordinate(x); y <= maximalYCoordinate(x); y++) {
      if (isValidCoordinate(x, y)) {
        painter->setTransform(transform);
        painter->translate(getFieldPosition(x, y));
        painter->drawPath(getPath());
      }
    }
  }
}
コード例 #8
0
ファイル: Bot.cpp プロジェクト: marcionicolau/battleship
int Bot::evaluateCell(const Point& p) const {
    int mark = 1;
    Point p2 = neighboringBurningCell(p);
    Point next = getCellOfLine(p, p2);
    Point saver = p;
    while (isValidCoordinate(next, desk_)) {
        if (visibleOrSunksNeighbor(next)) {
            break;
        }
        p2 = saver;
        saver = next;
        next = getCellOfLine(saver, p2);
        mark++;
    }
    return mark;
}
コード例 #9
0
bool allNeighborsWhite(ENapi::Image *img, int y, int x, int area)
{
	int r,g,b;
	int offset = area / 2;
	for(int i=y-offset; i<y+offset+1; ++i)
	{
		for(int j=x-offset; j<x+offset+1; ++j)
		{
			if(isValidCoordinate(img, i,j))
			{
				img->getPixel(i,j,r,g,b);
				if(r != 255)
					return false;
			}

		}
	}
	return true;
}
コード例 #10
0
void COMMAND_INFO() {
	int x, y;
	do {
		printf("Enter the coordinate of the cell: ");
		scanf("%d %d", &x, &y);
	} while (!isValidCoordinate(x, y));
	
	Grid *grid = GetGrid(MakePOINT(x, y));
	Type type = GetType(*grid);
	Player *gridOwner = GetOwner(*grid);
	Unit *unit = GetUnit(*grid);

	printf("== Cell Info ==\n");
	if (type == Normal) {
		printf("Normal\n");
	} else if (type == Tower) {
		printf("Tower\n");
	} else if (type == Castle) {
		printf("Castle\n");
	} else if (type == Village) {
		printf("Village\n");
	}

	printf("Owned by Player %d\n", GetPlayerIndex(*gridOwner));

	if (unit) {
		Player *unitOwner = GetPlayerFromColor(GetUnitColor(*unit));
		char unitClassName[11];
		UnitClassName(GetUnitClass(*unit), unitClassName);

		printf("== Unit Info ==\n");
		printf("%s\n", unitClassName);
		printf("Owned by Player %d\n", GetPlayerIndex(*unitOwner));
		printf("Health %d/%d | ATK %d\n", 
			GetHealth(*unit), 
			GetMaximumHealth(*unit), 
			GetAttack(*unit)
		);
	}

	printf("\n");
}