Program Histori_of_Helic;
uses crt;
Type Heroes=record// Тип "Герой"в якому будуть зберігатися дані про героя.
     Name:string[30];//Ім'я героя 
     X:integer;// Положення героя по X
     Y:integer;//Положення героя по Y
     HP:integer; //Життя героя
     end;
Const
Size_map=50;//Розмір карти
Oll_map=1;//Кількість карт
Var                            //!!!!В різих локаціях, по ідеї різний  ромір карт, якщо можна реалізувати різні значення розміру карт - це економить пам'ять
Map:array[1..Size_map,1..Size_map,1..Oll_map] of string;// Масив, в якому зерігаються дані про структуру різних карт
NPS:array[1..100] of string; //Масив в якому зберігаються персонажі
Hero:Heroes;
//i:integer;//Для циклу
//j:integer;//Для циклу
chek:integer;//Вибір пункту меню
Type Interfac=class
     public
     class procedure Watch_y_s;//Виводить повідомлення про те, що лежить пыд ногами героя
     Begin
      if Map[Hero.Y,Hero.X,1]='Трава' then writeln('Під вами зелена трава');
      if Map[Hero.Y,Hero.X,1]='Камiнь' then writeln('Під скалисте каміння');
     end; 
     class procedure Menu_Map;
     begin
     Writeln('z-подивитись пiд ноги;i-відкрити iнвертар;g-переглянути склад вашої групу');
     end;
     end;
Procedure Random_map;//Процедура для створення карти
var
i:integer;//Для циклу
j:integer;//Для циклу
begin
 for i:=1 to Size_map do 
                        for j:=1 to Size_map do Map[i,j,1]:='Трава';// Цикл заповняє основну карту травою(нехай покищо трава буде по українськи)
 Map[30,30,1]:='Камiнь';                      
 end;
Procedure Show_map;//Процедура виводить карту
var
x,y:integer;//Для циклу
begin
 if (Hero.X<1)then Hero.X:=1;                  //
 if (Hero.X>Size_map-1)then Hero.X:=Size_map-1;//Перевірка, чи не вийшов герой за карту
 if (Hero.Y<1)then Hero.Y:=1;                  //
 if (Hero.Y>Size_map-1)then Hero.Y:=Size_map-1;//
 for y:=Hero.Y-10 to Hero.Y+10 do begin                          //Цикл виводит на основну карту елементи
                         for x:=Hero.X-10 to Hero.X+10 do begin
if (x<=0) then  write('    ');// Відступ від лівого краю
                         
if ((y<=Size_map) and (x<=Size_map) and(y>=0) and (x>=0) ) then 
                                                                 if ((y=Hero.Y)and(x=Hero.X)) then begin 
                                                                  textcolor(red);
                                                                  Write('<HH>')//Перевірка, чи на клітинці стоїть герой
                                                                  end 
else  if ((y=Size_map) or (x=Size_map)or (y=0) or (x=0)) then begin 
                                                                  textcolor(White);//окреслення кінця карти
                                                                  Write('{EN}');
                                                                 end
else  begin
                                                                 if Map[y,x,1]='Трава' then begin
                                                                  textcolor(green);
                                                                  Write('{TR}');// Перевірка, чи знаходиться на даній клітинці трава
                                                                 end; 
                                                                 if Map[y,x,1]='Камiнь' then begin
                                                                  textcolor(LightGray);
                                                                  Write('{RR}');// Перевірка, чи знаходиться на даній клітинці каміня
                                                                 end; 
                                                                 end;
                                                                 end;
                                                  
                                              writeln();
                         end;                         
textcolor(white);                                              
end;
Procedure New_game;//Процедура запускаэ нову гру
begin
 Hero.HP:=100;
 Hero.X:=50;
 Hero.Y:=50;
 Random_map;//Створується карта
 //Show_map;//Карта виводиться на екран
end;
procedure KeyDown();//Процедура для обробки нажимання клавіш 
label 01;
begin
01:
case ReadKey of             //Опрацювання натисту клавіші в перемикаці
  #37 : Hero.X:=Hero.X-1;                //Натиснута клавіша "Вліво" 
  #39 : Hero.X:=Hero.X+1;                //Натиснута клавіша "Вправо"
  #38 : Hero.Y:=Hero.Y-1;                //Натиснута клавіша "Вверх"
  #40 : Hero.Y:=Hero.Y+1;                //Натиснута клавіша "Вниз" 
  #255,#122,#233,#90: begin              //Натиснута клавіша "Я","Z"
                      Interfac.Watch_y_s;
                      goto 01;
                      end; 
end;
 //vk_Space: if kSpaceKey=2 then kSpaceKey := 1;  
end; 
Procedure Game_run;//Опрацювання запущеноъ гри
Label
01;
begin
01:clrscr;
 Show_map;//Показати карту
 Interfac.Menu_Map;
 Writeln('x=',Hero.X,'y=',Hero.Y);
 KeyDown();//Ввести команду
 goto 01;
end;
Begin
 textcolor(white);
 writeln('Головне меню');
 writeln('1.Нова гра');
 writeln('2.Вихiд');
 readln(chek);
 case chek of
 1: begin
    New_game;
    Game_Run;
    end;
 2:exit;
 end;
end. 

Rewrite this code in Python.