Mam taki kod i sie mecze nad rozwiazaniem tego zeby to wsadzic w klase.Chce sie pozbyc jak najwiecej rzeczy z main().Jak mozna sterowanie zrobic w funkcje?albo w klase?

#include <iostream>
#include <Windows.h>
#include <string>
 
using namespace std;
 
char Map[40][40] =  {"###################",
                     "#*................!",
                     "#............##.###",
                     "#*...........#..###",
                     "#########....#.####",
                     "#    #....#.#  #",
                     "#    #....#.#  #",
                     "#    #......#  #",
                     "#    #....###  #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "#    #....# #",
                     "# @  #....# #",
                     "#    #*..*# #",
                     "###################"};//19
 
 
int gamespeed = 500;
int licznik =0;
int net =4;
bool stop = true;
class ster
  {
    public:
      int up()
      {
        GetAsyncKeyState(VK_UP);
            {
                int y2 = (y-1);
                switch(Map[y2][x])
                {
                  case ' ':
                    {
                      Map[y][x]=' ';
                      y-=1;
                      Map[y2][x]='@';
                    }break;    
                }
            }
      }
 
 
  };
int main()
{
  ster ster;
  while(stop)
  {
    system("cls");
    for (int y =0; y < 20; y++)
    {
      cout <<Map[y]<<endl;
    }
    cout<<"Przejechane auta :"<<licznik;
    if(licznik <= net)
    {
      Map[3][1]='*';
      Map[18][10]='*';
    }
    if(GetAsyncKeyState(VK_F1)!=0)
    {
      Map[1][8]='#';
      Map[2][8]='#';
      Map[3][8]='#';
      Map[4][9]='.';
      Map[4][10]='.';
      Map[4][11]='.';
      Map[4][12]='.';
    }
    if(GetAsyncKeyState(VK_F2)!=0)
    {
      Map[1][8]='.';
      Map[2][8]='.';
      Map[3][8]='.';
      Map[4][9]='#';
      Map[4][10]='#';
      Map[4][11]='#';
      Map[4][12]='#';
    }
    if(GetAsyncKeyState(VK_F3)!=0)
    {
      Map[7][13]='#';
    }
    if(GetAsyncKeyState(VK_F4)!=0)
    {
      Map[7][13]='.';
    }
    for (int y=0;y<20;y++)
    {
      for (int x=0;x<20;x++)
      {
        switch (Map[y][x])
        {
          case '#':
            {
              //Map[y][x]=219;
              break;
            }
          case '*':
            {
              int y2 = (y - 1);
              switch(Map[y2][x])
                case '.':
                {
                  Map[y][x]='.';
                  y-=1;
                  Map[y2][x]='*';
                  //return [y2][x];
                  break;
                }
              int x2 = (x + 1);
                switch(Map[y][x2])
                {
                  case '.':
                    {
                      Map[y][x]='.';
                      x+=1;
                      Map[y][x2]='*';
                      //return Map[y][x2];
                    }break;
                  case '!':
                    {
                      Map[y][x]='.';
                      x+=1;
                      Map[y][x2]='!';
                      //return Map[y][x2];
                      //licznik++;
                    }break;
                }
            }
          case '@': //system sterowania dla @
            {
              ster.up();
              if(GetAsyncKeyState(VK_DOWN)!=0)
              {
                int y2 = (y+1);
                switch(Map[y2][x])
                {
                case ' ':
                  {
                    Map[y][x]=' ';
                    y+=1;
                    Map[y2][x]='@';
                  }break;
                }
              }
              if(GetAsyncKeyState(VK_LEFT)!=0)
              {
                int x2 = (x - 1);
                switch(Map[y][x2])
                {
                  case ' ':
                    {
                      Map[y][x]=' ';
                      x-=1;
                      Map[y][x2]='@';
                    }break;
                }
              }
              if(GetAsyncKeyState(VK_RIGHT)!=0)
              {
                int x2 = (x + 1);
                switch(Map[y][x2])
                {
                  case ' ':
                    {
                      Map[y][x]=' ';
                      x+=1;
                      Map[y][x2]='@';
                    }break;
                }
              }
            }
        }
      }
    }
 Sleep (gamespeed);
  }
 
  return 0;
}