#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int n, m, x, y;
    bool L_pressed = false, R_pressed = false;
    bool U_pressed = false, D_pressed = false;
    cout << "Please input your map size (n, m): ";
    cin >> n >> m;
    cout << "Please input robot place (x, y): ";
    cin >> x >> y;
    while (true) {
        // A boolean to record there's any key be pressed.
        bool changed = false;

        // Left Key
        int L_key = GetKeyState(VK_LEFT);
        // if L_key >= 0 (More specifically, 0 or 1), means 
        // L_key now is not being pressed. Let L_pressed be false.
        // else, let L_pressed be true, and also set changed to be true.
        if (L_key >= 0)
            L_pressed = false;
        else if (!L_pressed) {
            changed = true, L_pressed = true;
            // if the robot's position can still go left, we let it go.
            if (y != 0)
                y--;
        }

        // RIGHT Key
        int R_key = GetKeyState(VK_RIGHT);
        if (R_key >= 0)
            R_pressed = false;
        else if (!R_pressed) {
            changed = true, R_pressed = true;
            if (y != m-1)
                y++;
        }
        // UP Key
        int U_key = GetKeyState(VK_UP);
        if (U_key >= 0)
            U_pressed = false;
        else if (!U_pressed) {
            changed = true, U_pressed = true;
            if (x != 0)
                x--;
        }
        // DOWN Key
        int D_key = GetKeyState(VK_DOWN);
        if (D_key >= 0)
            D_pressed = false;
        else if (!D_pressed) {
            changed = true, D_pressed = true;
            if (x != n-1) {
                x++;
            }
        }
        // If there's any key be pressed, print the map. 
        if (changed) {
            /*
            // Use "====" to seperate two printed map.
            for (int j = 0; j < m; j++) {
                cout << "=";
            }
            cout << endl;
            */
            // Use cls command to clean the input.
            system("cls");
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if (i == x && j == y)
                        cout << '@';
                    else
                        cout << '.';
                }
                cout << endl;
            }
        }
    }
    return 0;
}