import keyboard
import time
import copy
import os
def R(H,W,x,y,level):
    print("\n↑,↓,←,→\nPgUp:上一步 PgDn:下一步\n")
    global Map
    global All
    global page
    if(level==1):
        Map=[['#','#','#','#','#','#'],
             ['#',' ',' ',' ',' ','#'],
             ['#',' ','#','#','#','#'],
             ['#',' ','#','#','#','#'],
             ['#','•','#','#','#','#'],
             ['#','#','#','#','#','#']
             ]
    elif(level==2):
        Map=[['#','#','#','#','#','#'],
             ['#',' ',' ',' ',' ','#'],
             ['#',' ',' ',' ','•','#'],
             ['#',' ','•',' ',' ','#'],
             ['#','#','#','#','#','#'],
             ]
    elif(level==3):
        Map=[['#','#','#','#','#','#'],
             ['#',' ',' ',' ','#','#'],
             ['#','•',' ','•',' ','#'],
             ['#',' ',' ','#',' ','#'],
             ['#',' ',' ',' ',' ','#'],
             ['#','#','#','#','#','#'],
            ]
    elif(level==4):
        Map=[['#','#','#','#','#','#','#'],
             ['#',' ',' ',' ',' ','#','#'],
             ['#',' ',' ',' ',' ',' ','#'],
             ['#',' ','#','•',' ','•','#'],
             ['#',' ',' ',' ',' ',' ','#'],
             ['#','#','#','#','#','#','#'],
             ]
    elif(level==5):
        Map=[['#','#','#','#','#','#','#'],
             ['#','#','#',' ',' ','#','#'],
             ['#',' ',' ','•',' ','#','#'],
             ['#',' ',' ',' ',' ',' ','#'],
             ['#',' ','#','•',' ',' ','#'],
             ['#',' ',' ',' ',' ',' ','#'],
             ['#','#','#','#','#','#','#']
             ]
    elif(level==6):
        Map=[['#','#','#','#','#','#','#'],
             ['#','#',' ',' ',' ','#','#'],
             ['#',' ',' ','#',' ',' ','#'],
             ['#',' ',' ','•',' ',' ','#'],
             ['#',' ',' ','•',' ',' ','#'],
             ['#','#',' ','•',' ','#','#'],
             ['#','#','#','#','#','#','#']
             ]
    elif(level==7):
        Map=[['#','#','#','#','#','#','#','#'],
             ['#',' ',' ',' ',' ','#','#','#'],
             ['#',' ',' ',' ','•','•',' ','#'],
             ['#',' ',' ',' ',' ',' ',' ','#'],
             ['#',' ',' ','#',' ','•',' ','#'],
             ['#','#','#','#','#','#','#','#']
             ]
    elif(level==8):
        Map=[['#','#','#','#','#','#','#','#'],
             ['#','#','•',' ',' ','#','#','#'],
             ['#',' ',' ','#',' ',' ',' ','#'],
             ['#',' ',' ','#',' ','#',' ','#'],
             ['#',' ','•',' ',' ',' ','•','#'],
             ['#',' ',' ',' ',' ','#','#','#'],
             ['#','#','#','#','#','#','#','#']
             ]
    elif(level==9):
        Map=[['#','#','#','#','#','#','#'],
             ['#',' ','•',' ',' ','#','#'],
             ['#',' ',' ','#',' ',' ','#'],
             ['#',' ',' ',' ','•',' ','#'],
             ['#','•',' ',' ',' ','#','#'],
             ['#','#','#','#','#','#','#']
             ]
    elif(level==10):
        Map=[['#','#','#','#','#','#','#','#'],
             ['#','#',' ',' ',' ',' ','#','#'],
             ['#',' ','•','•',' ',' ',' ','#'],
             ['#',' ','#',' ',' ',' ',' ','#'],
             ['#',' ',' ',' ','#',' ','•','#'],
             ['#','#','#','#','#','#','#','#']
             ]

    for a in range (len(n)):
        if(Map[(n[a][1])][(n[a][0])]==' '):
            Map[(n[a][1])][(n[a][0])]='n'
        else:
            Map[(n[a][1])][(n[a][0])]='N'
    Map[y-1][x-1]='I'
    if(len(All)>0):
        if([[copy.deepcopy(n),y,x]]!=[All[page]]):
            All+=[[copy.deepcopy(n),y,x]]
            page+=1
            Apg=page+1
            while(Apg+2==len(All)):
                del All[-1]
                Apg-=1
    else:
        All+=[[copy.deepcopy(n),y,x]]
        page+=1
    for a in range (H):
        B=""
        for b in range(W):
            B+=Map[a][b]
        print(B)

def SC(H,W,x,y,level):
    print(f"关卡:{level}")
    global page
    global All
    global n
    page=-1
    All=[]
    R(H,W,x,y,level)
    while(1):
        if keyboard.is_pressed("up"):
            os.system("cls")
            if (y!=1)and(Map[y-2][x-1]!='#'):
                if(Map[y-2][x-1]=='n'or Map[y-2][x-1]=='N'):
                    if(Map[y-3][x-1]==' 'or Map[y-3][x-1]=='•'):
                        for a in range (len(n)):
                            if(n[a]==[(x-1),(y-2)]):
                                n[a][1]-=1
                        y-=1
                        print(f"\n关卡:{level}\n↑({y},{x})")
                    else:
                        print(f"关卡:{level}↑:")
                else:
                    y-=1
                    print(f"\n关卡:{level}\n↑({y},{x})")
            else:
                print(f"关卡:{level}↑:")
            R(H,W,x,y,level)
        elif keyboard.is_pressed("down"):
            os.system("cls")
            if (y!=H)and(Map[y][x-1]!='#'):
                if(Map[y][x-1]=='n'or Map[y][x-1]=='N'):
                    if(Map[y+1][x-1]==' 'or Map[y+1][x-1]=='•'):
                        for a in range (len(n)):
                            if(n[a]==[(x-1),(y)]):
                                n[a][1]+=1
                        y+=1
                        print(f"\n关卡:{level}\n↓({y},{x})")
                    else:
                        print(f"关卡:{level}↓:")
                else:
                    y+=1
                    print(f"\n关卡:{level}\n↓({y},{x})")
            else:
                print(f"关卡:{level}↓:")
            R(H,W,x,y,level)
        elif keyboard.is_pressed("left"):
            os.system("cls")
            if (x!=1)and(Map[y-1][x-2]!='#'):
                if(Map[y-1][x-2]=='n'or Map[y-1][x-2]=='N'):
                    if(Map[y-1][x-3]==' 'or Map[y-1][x-3]=='•'):
                        for a in range (len(n)):
                            if(n[a]==[(x-2),(y-1)]):
                                n[a][0]-=1
                        x-=1
                        print(f"\n关卡:{level}\n←({y},{x})")
                    else:
                        print(f"关卡:{level}←:")
                else:
                    x-=1
                    print(f"\n关卡:{level}\n←({y},{x})")
            else:
                print(f"关卡:{level}←:")
            R(H,W,x,y,level)
        elif keyboard.is_pressed("right"):
            os.system("cls")
            if (x!=W)and(Map[y-1][x]!='#'):
                if(Map[y-1][x]=='n'or Map[y-1][x]=='N'):
                    if(Map[y-1][x+1]==' 'or Map[y-1][x+1]=='•'):
                        for a in range (len(n)):
                            if(n[a]==[(x),(y-1)]):
                                n[a][0]+=1
                        x+=1
                        print(f"\n关卡:{level}\n→({y},{x})")
                    else:
                        print(f"关卡:{level}→:")
                else:
                    x+=1
                    print(f"\n关卡:{level}\n→({y},{x})")
            else:
                print(f"关卡:{level}→:")
            R(H,W,x,y,level)
        elif keyboard.is_pressed("page up"):
            os.system("cls")
            if(page!=0):
                page-=1
                n=copy.deepcopy(All[page][0])
                y=All[page][1]
                x=All[page][2]
                print(f"\n关卡:{level}\n上一步:{page+1}")
            else:
                print(f"关卡:{level}上一步:")
            R(H,W,x,y,level)
        elif keyboard.is_pressed("page down"):
            os.system("cls")
            if(page!=len(All)-1):
                page+=1
                n=copy.deepcopy(All[page][0])
                y=All[page][1]
                x=All[page][2]
                print(f"\n关卡:{level}\n下一步:{page+1}")
            else:
                print(f"关卡:{level}下一步:")
            R(H,W,x,y,level)
        sdn = sorted(n)
        sdp = sorted(P)
        if sdn == sdp:
            print("\n\n\n你赢了!\n\n\n")
            time.sleep(2)
            os.system("cls")
            break
        time.sleep(0.1)
global P#new:•
global page

n=[[1,2]]
P=[[1,4]]
SC(6,6,4,2,1)

n=[[3,2],[3,3]]
P=[[4,2],[2,3]]
SC(5,6,2,2,2)

n=[[2,2],[3,2]]
P=[[1,2],[3,2]]
SC(6,6,2,2,3)

n=[[2,2],[3,2]]
P=[[3,3],[5,3]]
SC(6,7,2,2,4)

n=[[4,2],[4,3]]
P=[[3,2],[3,4]]
SC(7,7,2,3,5)

n=[[2,3],[3,3],[4,3]]
P=[[3,3],[3,4],[3,5]]
SC(7,7,3,2,6)

n=[[2,3],[3,3],[4,3]]
P=[[4,2],[5,2],[5,4]]
SC(6,8,6,4,7)

n=[[5,2],[2,4],[5,4]]
P=[[1,2],[2,4],[6,4]]
SC(7,8,7,3,8)

n=[[2,1],[2,2],[2,3]]
P=[[2,1],[4,3],[1,4]]
SC(6,7,2,2,9)

n=[[4,3],[5,3],[6,3]]
P=[[2,2],[2,3],[6,4]]
SC(6,8,6,5,10)

time.sleep(1)
print('\n\n感谢游玩')
time.sleep(1)
