Pythonでオセロ作成

塾でバイトしているのですが、夏期講習期間の鬼シフトからようやく解放されました。８月はお盆もあったのに、それでも２０万稼いだ。すごい。
久しぶりにパソコンに触れたので、夏の間こっそり勉強してたPythonでオセロを作りました。今時点ではかつてないほど見にくいです。
明日以降Tkinterでアプリにして、あわよくばAIも、、、と考えています。

きっともっと上手な書き方があるんだろうなあ、と思います。精進します。

```Python:オセロ
#空きマス→0，白石→2，黒石→1

class player:
    def __init__(self):
        self.name="name"
        self.disc=0
                
player1=player()
player2=player()
player1.name=input("先攻のプレイヤーの名前を入力してください。")
player1.disc=1
player2.name=input("後攻のプレイヤーの名前を入力してください。")
player2.disc=2

def reverse(place,board,player):#裏返す関数、戻り値→裏返せる枚数
    dir=(-11,-10,-9,-1,1,9,10,11)#方向ベクトル
    sum_cnt_rev=0#そこに置いたときに裏返せる枚数
    for i in dir:
        tmp_place=place#placeの初期化
        cnt_rev=0#その方向においての裏返せる枚数
        while board[tmp_place+i]!=player.disc:
            if board[tmp_place+i]==(int(player.disc)-1.5)*-1+1.5:#ディスクが１なら２，２なら１（相手のディスクがある）
                tmp_place+=i
                cnt_rev+=1
            else:#0（空きマス）か5（壁）
                cnt_rev=0
                break
        for j in range(1,cnt_rev+1):
            board[place+j*i]=player.disc
        sum_cnt_rev+=cnt_rev
    return sum_cnt_rev

def check(player,board,Re_board):#まだ置ける場所があるかチェックする関数,戻り値→置ける場所の数、座標
    dir=(-11,-10,-9,-1,1,9,10,11)#方向ベクトル
    cnt_can=0#置ける場所の数
    can_place=[]
    for place in Re_board:
        sum_cnt_rev=0#そこに置いたときに裏返せる枚数
        if board[place]==0:
            for i in dir:
                tmp_place=place#placeの初期化
                cnt_rev=0#その方向においての裏返せる枚数
                while board[tmp_place+i]!=player.disc:
                    if board[tmp_place+i]==(int(player.disc)-1.5)*-1+1.5:#ディスクが１なら２，２なら１（相手のディスクがある）
                        tmp_place+=i
                        cnt_rev+=1
                    else:#0（空きマス）か5（壁）
                        cnt_rev=0
                        break
                sum_cnt_rev+=cnt_rev
        else:
            pass
        if sum_cnt_rev!=0:
            cnt_can+=1
            can_place.append(place)
        else:
            pass
    return (cnt_can,can_place)
    
def run(player,board):
    #石を置く
    success=False
    while success==False:
        placeX=input()
        placeY=input()
        try:
            place=int(placeX)+(int(placeY))*10
            if board[place]==0:
                board[place]=int(player.disc)
                #裏返す
                sum_cnt_rev=reverse(place,board,player)
                if sum_cnt_rev==0:
                    print("そこには置けません")
                    success=False
                else:
                    success=True
            else:
                print("そこには置けません")
                success=False
        except:
            print("整数の値を入力してください")
            success=False
    
    #盤面表示
    for i in range(0,100):
        print(board[i],end=' ')
        if (i+1)%10==0 and i!=0:
            print("\n")
            
#勝敗確認
def win(board):
    cnt1=0
    cnt2=0
    for i in Re_board:
        if board[i]==1:
            cnt1+=1
        elif board[i]==2:
            cnt2+=1
        else:
            pass
    return (cnt1,cnt2)
            
#ボードの初期化
board=[]#壁も含めた盤面
Re_board=[]#壁をのぞいた盤面
for i in range(0,100):
    if (0<=i and i<=9) or (90<=i and i<=99) or i%10==0 or i%10==9:
        board.append(5)
    elif i==44 or i==55:
        board.append(2)
        Re_board.append(i)
    elif i==45 or i==54:
        board.append(1)
        Re_board.append(i)
    else:
        board.append(0)
        Re_board.append(i)
    
#盤面表示
for i in range(0,100):
    print(board[i],end=' ')
    if (i+1)%10==0 and i!=0:
        print("\n")
        
#勝敗がつくまで実行
cnt=0#両方置けない場合の対策
tmp_canX=[]
tmp_canY=[]
while cnt==0 or cnt==1:
    #１の番
    cnt_can,can_place=check(player1,board,Re_board)
    tmp_canX.clear()
    tmp_canY.clear()
    for i in can_place:
        tmp_canX.append(i%10)
        tmp_canY.append(i//10)
    if cnt_can!=0:
        print(player1.name+"の番です。どこに"+str(player1.disc)+"を置きますか？（xが先、yが後）")
        for i in range(0,len(can_place)):
            print(f'({tmp_canX[i]},{tmp_canY[i]})',end=' ')
        print("に置けます")
        run(player1,board)
        cnt=0
    else:
        print("どこにも置けません")
        cnt+=1
    num1,num2=win(board)
    if (num1+num2==64) or (num1==0) or (num2==0):
        break
    #２の番
    cnt_can,can_place=check(player2,board,Re_board)
    tmp_canX.clear()
    tmp_canY.clear()
    for i in can_place:
        tmp_canX.append(i%10)
        tmp_canY.append(i//10)
    if cnt_can!=0:
        print(player2.name+"の番です。どこに"+str(player2.disc)+"を置きますか？（xが先、yが後）")
        for i in range(0,len(can_place)):
            print(f'({tmp_canX[i]},{tmp_canY[i]})',end=' ')
        print("に置けます")
        run(player2,board)
        cnt=0
    else:
        print("どこにも置けません")
        cnt+=1
    num1,num2=win(board)
    if (num1+num2==64) or (num1==0) or (num2==0):
        break

num1,num2=win(board)
if num1>num2:
    print(f'{num1}対{num2}で{player1.name}の勝利です')
elif num1<num2:
     print(f'{num2}対{num1}で{player2.name}の勝利です')
else:
    print("引き分けです")