c++ не сохраняется изменение в поле объекта
Отрисовываются два объекта, которые должны двигаться навстречу друг-другу Во время второй проверки значения их координат значения возвращаются к стандартным, как можно исправить?
#include <iostream>
#include <windows.h>
bool gameOver;
const int WIDTH = 5;
const int HEIGHT = 5;
class Unit
{
private:
int hp;
int attack;
int positionX;
int positionY;
public:
Unit(int hp, int attack, int x, int y)
{
this->hp = hp;
this->attack = attack;
this->positionX = x;
this->positionY = y;
}
int GetX()
{
return positionX;
}
int GetY()
{
return positionY;
}
void Moove(int i)
{
if (i == 1)
this->positionY++;
else
this->positionY--;
}
};
void CheckPosition(Unit unit1, Unit unit2,int &unit1X, int &unit1Y, int &unit2X, int &unit2Y)
{
unit1X = unit1.GetX();
unit1Y = unit1.GetY();
unit2X = unit2.GetX();
unit2Y = unit2.GetY();
}
void Draw(int& unit1X, int& unit1Y, int& unit2X, int& unit2Y)
{
system("cls");
for (int i = 0; i < WIDTH; i++)
{
for (int j = 0; j < HEIGHT; j++)
{
if (i == unit1Y && j == unit1X)
{
std::cout << "P";
j++;
}
if (i == unit2Y && j == unit2X)
std::cout << "O";
else
{
std::cout << "#";
}
}
std::cout << std::endl;
}
}
void Moove(Unit unit1, Unit unit2, int& unit1X, int& unit1Y, int& unit2X, int& unit2Y)
{
if (unit1Y < (unit2Y + 1))
unit1.Moove(1);
if (unit2Y > (unit1Y - 1))
unit2.Moove(0);
}
int main()
{
int unit1X, unit1Y, unit2X, unit2Y;
gameOver = false;
Unit unit1(100, 25, 2, 0);
Unit unit2(105, 20, 2, 4);
while (!gameOver)
{
CheckPosition(unit1, unit2, unit1X, unit1Y, unit2X, unit2Y);
Draw(unit1X, unit1Y, unit2X, unit2Y);
Sleep(500);
Moove(unit1, unit2, unit1X, unit1Y, unit2X, unit2Y);
CheckPosition(unit1, unit2, unit1X, unit1Y, unit2X, unit2Y); //<- когда выполнение доходит до сюда
Draw(unit1X, unit1Y, unit2X, unit2Y); //значения x и y обоих объектов снова
//принимают стандартные значения
Sleep(500);
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Не хотите вместо
void Moove(Unit unit1, Unit unit2, int& unit1X, int& unit1Y, int& unit2X, int& unit2Y)
попробовать
void Moove(Unit& unit1, Unit& unit2, int& unit1X, int& unit1Y, int& unit2X, int& unit2Y)