Untitled
unknown
c_cpp
a year ago
2.4 kB
15
Indexable
void Player::ExecuteCommand(Command* command, int commandCount, Grid* pGrid)
{
Input* pIn = pGrid->GetInput();
Output* pOut = pGrid->GetOutput();
CellPosition currentPos = pCell->GetCellPosition();
CellPosition newPos = currentPos;
int x, y;
for (int i = 0; i < commandCount; i++)
{
switch (command[i])
{
case MOVE_FORWARD_ONE_STEP:
stepCount = 1;
break;
case MOVE_BACKWARD_ONE_STEP:
stepCount = -1;
break;
case MOVE_FORWARD_TWO_STEPS:
stepCount = 2;
break;
case MOVE_BACKWARD_TWO_STEPS:
stepCount = -2;
break;
case MOVE_FORWARD_THREE_STEPS:
stepCount = 3;
break;
case MOVE_BACKWARD_THREE_STEPS:
stepCount = -3;
break;
case ROTATE_CLOCKWISE:
RotateClockwise(pGrid);
continue;
case ROTATE_COUNTERCLOCKWISE:
RotateCounterClockwise(pGrid);
continue;
case NO_COMMAND:
default:
return;
}
}
for (int i = 0; i < abs(stepCount); i++)
{
switch (currDirection)
{
case RIGHT:
newPos.SetHCell(newPos.HCell() + (stepCount>0 ? 1: -1 ));
break;
case LEFT:
newPos.SetHCell(newPos.HCell() - (stepCount > 0 ? 1 : -1));
break;
case DOWN:
newPos.SetVCell(newPos.VCell() + (stepCount > 0 ? 1 : -1));
break;
case UP:
newPos.SetVCell(newPos.VCell() - (stepCount > 0 ? 1 : -1)); //dec count of VCELL
break;
}
if (!newPos.IsValidCell())
{
pOut->PrintMessage("you're out of bound, movement is stopped");
return;
}
if (i < abs(stepCount) - 1) {
pOut->PrintMessage("Click anywhere to execute the next step.");
pIn->GetPointClicked(x, y);
}
pGrid->UpdatePlayerCell(this, newPos);
}
pGrid->DisPlayerInfo();
Cell* finalCell = pCell;
if (finalCell->GetGameObject() != nullptr) {
finalCell->GetGameObject()->Apply(pGrid, this);
}
// Handle game-ending or special object conditions
if (finalCell->HasFlag() != nullptr) {
pOut->PrintMessage("Player " + to_string(playerNum) + " wins!");
}
else if (finalCell->HasWaterPit() != nullptr) {
pOut->PrintMessage("You fell into a water pit! Game over for Player " + to_string(playerNum));
return;
}
else if (finalCell->HasDangerZone() != nullptr) {
health -= 1; // Reduce health for entering the danger zone
if (health <= 0) {
pOut->PrintMessage("Player " + to_string(playerNum) + " has died in the danger zone.");
return;
}
}
}Editor is loading...
Leave a Comment