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)
→ Ссылка