import random as r
import os
import time as t
SCORE=0
score=0
def choose_piece(n,board):
    if n==1:
        choose1=input('请玩家一选择移动哪颗棋子(注意大小写!!!)')
        if choose1 in board and len(choose1)==1:
            if ord(choose1)>=65 and ord(choose1)<=73:
                return choose1
            else:
                print('输入错误,请重新选择')
                return choose_piece(n,board)
        else:
            print('输入错误,请重新选择')
            return choose_piece(n,board)
    else:
        choose2=input('请玩家二选择移动哪颗棋子(注意大小写!!!)')
        if choose2 in board and len(choose2)==1:
            if ord(choose2)>=97 and ord(choose2)<=105:
                return choose2
            else:
                print('输入错误,请重新选择')
                return choose_piece(n,board)
        else:
            print('输入错误,请重新选择')
            return choose_piece(n,board)
def direction(n,choose,board):
    if n==1:
        direction1=input('请玩家一选择移动方向(1=向左,2=向右,3=向下,输入r重新选择棋子)')
        if direction1=='1':
            if board[board.index(choose)-1]=='#' or (ord(board[board.index(choose)-1])>=65 and ord(board[board.index(choose)-1])<=73) or board.index(choose)%10==0:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'left'
        elif direction1=='2':
            if board[board.index(choose)+1]=='#' or (ord(board[board.index(choose)+1])>=65 and ord(board[board.index(choose)+1])<=73) or board.index(choose)%10==9:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'right'
        elif direction1=='3':
            if board[board.index(choose)+10]=='#' or (ord(board[board.index(choose)+10])>=65 and ord(board[board.index(choose)+10])<=73) or board.index(choose)+10>99:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'down'
        elif direction1=='r':
            choose=choose_piece(n,board)
            return direction(n,choose,board)
        else:
            print('输入错误,请重新选择')
            return direction(n,choose,board)
    else:
        direction1=input('请玩家二选择移动方向(1=向上,2=向下,3=向右,输入r重新选择棋子)')
        if direction1=='1':
            if board[board.index(choose)-10]=='#' or (ord(board[board.index(choose)-10])>=97 and ord(board[board.index(choose)-10])<=105) or board.index(choose)-10<0:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'up'
        elif direction1=='2':
            if board[board.index(choose)+10]=='#' or (ord(board[board.index(choose)+10])>=97 and ord(board[board.index(choose)+10])<=105) or board.index(choose)+10>99:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'down'
        elif direction1=='3':
            if board[board.index(choose)+1]=='#' or (ord(board[board.index(choose)+1])>=97 and ord(board[board.index(choose)+1])<=105) or board.index(choose)%10==9:
                print('无法向该方向移动,请重新选择')
                return direction(n,choose,board)
            return choose,'right'
        elif direction1=='r':
            choose=choose_piece(n,board)
            return direction(n,choose,board)
        else:
            print('输入错误,请重新选择')
            return direction(n,choose,board)
def move(choose,direction,board):
    global SCORE,score
    l=['up','down','left','right']
    n=l.index(direction)
    del l
    l=[-10,10,-1,1]
    n=l[n]
    place=board.index(choose)
    if ord(choose)>=65 and ord(choose)<=73 and place+n>=90:
        SCORE+=1
        board[place]='*'
        print('玩家一的棋子'+choose+'已成功逃脱!')
        t.sleep(3)
    elif ord(choose)>=97 and ord(choose)<=105 and (place+n)%10==9:
        score+=1
        board[place]='*'
        print('玩家二的棋子'+choose+'已成功逃脱!')
        t.sleep(3)
    elif board[place+n]=='&':
        print('地雷被引爆了!')
        board[place+n]='*'
        if place+n==99:
            x=(-11,-10,-1)
        elif place+n>=90:
            x=(-11,-10,-9,-1,1)
        elif (place+n)%10==9:
            x=(-11,-10,-1,9,10)
        else:
            x=(-11,-10,-9,-1,1,9,10,11)
        for i in x:
            if board[place+n+i]!='#' and board[place+n+i]!='@' and board[place+n+i]!='&':
                board[place+n+i]='*'
    elif board[place+n]=='@':
        board=wormhole(choose,place,n,board)
    else:
        board[place+n]=choose
        board[place]='*'
    return board
def print_(board_):
    for i in range(10):
        print(board_[i*10:i*10+10])
def change(board):
    board_=''
    for i in range(100):
        board_=board_+board[i]
    return board_
def wormhole(choose,place,n,board):
    print('虫洞被使用了!')
    x=('1','2','3','4','5','6','7','8')
    way=input('请选择被传送到另一个虫洞哪个方位(1=左上,2=上,3=右上,4=左,5=右,6=左下,7=下,8=右下)')
    if way not in x:
        print('输入错误,请重新输入')
        return wormhole(place,n,board)
    x=(-11,-10,-9,-1,1,9,10,11)
    way=int(way)
    way-=1
    if place+n==33:
        if board[77+x[way]]=='#':
            print('无法向该方向移动,请重新选择')
            return wormhole(choose,place,n,board)
        elif board[77+x[way]]=='&':
            board[77+x[way]]='*'
            for i in x:
                if board[77+x[way]+i]!='#' and board[77+x[way]+i]!='@' and board[77+x[way]+i]!='&':
                    board[77+x[way]+i]='*'
        else:
            board[77+x[way]]=choose
            board[place]='*'
    else:
        if board[33+x[way]]=='#':
            print('无法向该方向移动,请重新选择')
            return wormhole(choose,place,n,board)
        elif board[33+x[way]]=='&':
            board[33+x[way]]='*'
            for i in x:
                if board[33+x[way]+i]!='#' and board[33+x[way]+i]!='@' and board[33+x[way]+i]!='&':
                    board[33+x[way]+i]='*'
        else:
            board[33+x[way]]=choose
            board[place]='*'
    return board
def check_end(board):
    p1=True
    p2=True
    for i in board:
        if ord(i)>=65 and ord(i)<=73:
            p1=False
        elif ord(i)>=97 and ord(i)<=105:
            p2=False
    return p1,p2
print('欢迎来玩逃脱游戏,该游戏为双人游戏,规则如下:')
print('1、在棋盘中字母表示双方的棋子,大写字母(A~I)是玩家一的,小写字母(a~i)是玩家二的,两人轮流走棋')
print('2、每人九颗棋,每一回合挑一颗棋走,大写的每颗棋每步可以向下、向左或向右,小写的每颗棋每步可以向右、向上或向下')
print('3、若大写的一颗棋走到了最下面一行的其中一格,或小写的一颗棋走到了最右面一列的其中一格,则它算是逃脱了,应从棋盘上拿走')
print('4、若在玩家二走完以后(即一个回合结束后),双方或其中一方的棋子全部被从棋盘上拿走(不一定是逃脱了,也可能是被吃了)后,游戏结束,逃脱棋子数量多的一方赢')
print('5、若游戏结束时一方在棋盘上还剩有棋子,且对方有超过一半的棋子已逃脱,则均判定为未逃脱,否则均判定为已逃脱')
print('每个格子要么是棋子,要么是空白或是其他道具,介绍如下:')
print('空白(用*表示),棋子可以正常到达的格子')
print('路障(用#表示),任何棋子都不可以走到这一格')
print('地雷(用&表示),当任意一颗棋走到这一格后地雷将立刻被触发,周围3×3范围内的所有棋子死亡')
print('虫洞(用@表示),当棋子走到这一格旁边后,下一步可以走进虫洞,并立刻被传送到另一个虫洞旁边的8个位置中任意位置(自选)')
print('\n\n\n')
t.sleep(5)
input('若已阅读完规则,请按下回车键')
os.system('cls')
board_=[]
for i in range(5):
    board_.append('#')
    board_.append('&')
    board_.append('&')
for i in range(64):
    board_.append('*')
r.shuffle(board_)
board_.insert(20,'@')
board_.insert(60,'@')
for i in range(9):
    board_.insert(0,chr(73-i))
board_.insert(0,'*')
for i in range(9):
    board_.insert(i*10+10,chr(97+i))
board=board_[:]
board_=change(board)
while True:
    print_(board_)
    p1,p2=check_end(board)
    if p1 or p2:
        print('游戏已结束!')
        break
    print('\n')
    choose1=choose_piece(1,board)
    print('\n')
    choose1,direction1=direction(1,choose1,board)
    print('\n')
    board=move(choose1,direction1,board)
    print('\n')
    board_=change(board)
    os.system('cls')
    print_(board_)
    p1,p2=check_end(board)
    if p2:
        print('游戏已结束!')
        break
    print('\n')
    choose2=choose_piece(2,board)
    print('\n')
    choose2,direction2=direction(2,choose2,board)
    print('\n')
    board=move(choose2,direction2,board)
    print('\n')
    board_=change(board)
    os.system('cls')
if p1:
    if SCORE<5:
        for i in board:
            if ord(i)>=97 and ord(i)<=105:
                score+=1
else:
    if score<5:
        for i in board:
            if ord(i)>=65 and ord(i)<=73:
                SCORE+=1
print('玩家一的棋子有'+str(SCORE)+'颗成功逃脱')
print('玩家二的棋子有'+str(score)+'颗成功逃脱')
if SCORE>score:
    print('恭喜玩家一胜利!')
elif  SCORE<score:
    print('恭喜玩家二胜利!')
else:
    print('恭喜两位玩家,这次是平局!')
t.sleep(5)