Ошибка отрисовки перемещения в консольной игре

Пишу консольную игру и возникла проблема.
Создал метод который записывает в новые координаты двумерного массива символ персонажа и превращает в '.' - пустое поле место где он был (функция ChangePositiont), персонаж двигается правильно в 3 направлениях, но при движении в лево оставляет за собой след, в чем может быть ошибка?

#include<iostream>
#include<conio.h>

using namespace std;
const int size_x=15;
const int size_y=30;
char world[size_x][size_y];

class Player
{
public:
    int point_x;
    int point_y;
    int HP;
    Player()
    {
        point_x = 0;
        point_y = 0;
        HP = 100;
    };
    Player(int x, int y, char skin) 
    {

        this->point_x = x;
        this->point_y = y;
        this->HP = 100;
        for (int i = 0; i < size_x; i++) 
        {
            for (int k = 0; k < size_y; k++) 
            {
                if (i == this->point_x && k == this->point_y) 
                {
                    world[i][k] = skin;
                    break;
                }
            }
        }
    };

    void ChangePositiont(char skin) 
    {
        for (int i = 0; i < size_x; i++)
        {
            for (int k = 0; k < size_y; k++)
            {
                if (i == this->point_x && k == this->point_y)
                {
                    world[i][k] = skin;
                    break;
                }
                else
                {
                    world[i][k] = '.';
                }
            }
        }
    }
   

};

class Enemy :public Player 
{
public:
    Enemy(int x, int y, char skin)
    {

        this->point_x = x;
        this->point_y = y;
        this->HP = 100;
        for (int i = 0; i < size_x; i++)
        {
            for (int k = 0; k < size_y; k++)
            {
                if (i == this->point_x && k == this->point_y)
                {
                    world[i][k] = skin;
                    break;
                }
            }
        }
    };
};

/*class Sqare : public Player
{
public:
    Sqare(int x1, int x2, int y1, int y2)
    {
        for (int k = 0; k < y2-y1; k++) 
        {
            for (int i = 0; i < x2-x1; i++)
            {
                world[y1 + k][x1 + i] = '1';
            }
        }
    }
};*/

void ArrFill(char a)
{
    for (int i = 0; i < size_x; i++)
    {

        for (int j = 0; j < size_y; j++)
        {
            world[i][j] = a;
        }
    }
};

void ShowScene() 
{
    
    for (int i = 0; i < size_x; i++)
    {
        for (int k=0; k < size_y; k++)
        {
            cout << world[i][k];
        }
        cout << endl;
    }
    
}

void Move(Player &pl) 
{
    int a = _getche();
    switch (a)
    {
        case 'a':
            pl.point_y=pl.point_y-1;
            pl.ChangePositiont('$');
            break;
        case 'd':
            pl.point_y = pl.point_y + 1;
            pl.ChangePositiont('$');
            break;
        case 's':
            pl.point_x = pl.point_x + 1;
            pl.ChangePositiont('$');
            break;
        case 'w':
            pl.point_x = pl.point_x - 1;
            pl.ChangePositiont('$');
            break;
    }
}







int main()
{
    setlocale(LC_ALL, "ru");

    ArrFill('.');
    Player player(size_x/2, size_y/2, '$');
    Enemy DrowRanger(5, 5, '%');


    while (1) 
    {
        cout << "Здоровье: " << player.HP << endl;
        ShowScene();
        Move(player);
        system("cls");
    }


    return 0;
}

Ответы (1 шт):

Автор решения: Igor
            if (i == this->point_x && k == this->point_y)
            {
                world[i][k] = skin;
                // break;                     <--
            }
            else
            {
                world[i][k] = '.';
            }
→ Ссылка