You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1063 lines
54 KiB

import random
11 months ago
from PIL import Image, ImageTk
import math
import random
import time
11 months ago
from tkinter import W
11 months ago
Chessimgx = 0 # 玩家落子的横坐标
Chessimgy = 0 # 玩家落子的纵坐标
xregretFLAG = [0 for x in range(365)] # 悔棋的数组x坐标
yregretFLAG = [0 for y in range(365)] # 悔棋的数组y坐标
class Chess:
def __init__(self):
11 months ago
self.ChessData = [[{"Cstate": 0, "Cstep": 0} for j in range(19)] for i in
range(19)] # Cstate=0无棋子1有黑棋子2有白棋子Cstep为该棋子落子的步骤
# self.chess_state = [[0 for y in range(19)] for x in range(19)] # 15x15的大小存储棋子的状态,0为没有棋子1为白色棋子2为黑色棋子
# self.chess_step = [[0 for y in range(19)] for x in range(19)] # 15x15的大小存储当前棋子的步骤
self.Currently_step = 0 # 棋子当前进行的步数
self.Chessimg = [[0 for y in range(19)] for x in range(19)]
11 months ago
self.Relabel = [[0 for y in range(19)] for x in range(19)] # 复盘的标签
# self.promptBoxFlag = [[[0 for z in range(8)] for y in range(15)] for x in range(15)]
self.Score = [[0 for y in range(19)] for x in range(19)] # 初始化计分数组
self.Max_Score = 0
self.Counts = 0
self.New_count = 0
11 months ago
self.Ovalone = 0 # 代表棋子
self.Ovalone_new = []
self.WinFLAG = 0 # 判断是否取得胜利
self.Gameover = 0 # 判断游戏是否结束
self.Depth = 0 # 搜索的深度
self.player = 0 # 轮到下棋的标志1=下0=不下
self.computer = 0 # 轮到下棋的标志1=下0=不下
self.Current_Player = 1 # =1黑方=2白方
self.myColor = 0 # 玩家选择的棋子颜色
self.computercolor = 0 # 电脑的棋子颜色
11 months ago
self.Chess_Mode = 3 # 对弈方式标志 Chess_Mode=0,人-人对弈; =1, 人-机白对弈; =2,机黑-人对弈, =4,测试模式)
self.player2color = 0 # 玩家2的棋子颜色
self.showHistory = False # 当为False时不展示下棋的步骤当为True时展示下棋的步骤
self.Max_Score_pos = ()
# self.choice = 0
11 months ago
def game_end(self):
if self.Gameover == 1 or self.WinFLAG == 1:
return True
else:
return False
11 months ago
# 计算某个位置得分
def count_Score(self, x, y, computerColor):
# global sum,count,value
11 months ago
global s
sum = 0
# count = 0
value = [0, 0, 0, 0]
upcount = [0, 0, 0, 0] # 左、上、左斜上、左斜下 棋子数
downcount = [0, 0, 0, 0] # 右、下、右斜向下、右斜向上 棋子数
upflag = [0, 0, 0, 0] # 左、上、左斜上、左斜下 空格数
downflag = [0, 0, 0, 0] # 右、下、右斜向下、右斜向上 空格数
11 months ago
message = ''
for color in range(1, 3):
self.ChessData[x][y]['Cstate'] = color
# 假设该点为白色棋子
11 months ago
for i in range(x - 1, -1, -1): # 计算左边棋子数量 upcount[0]表示左侧同类棋子 用upflag[0] 记录
if self.ChessData[i][y]['Cstate'] == color:
upcount[0] += 1 # 左侧有自己棋子
elif self.ChessData[i][y]['Cstate'] != 0 and self.ChessData[i][y]['Cstate'] != color: # 左侧有对方棋子
upflag[0] = -1
break
elif self.ChessData[i][y]['Cstate'] == 0: # 左侧没有棋子
upflag[0] = 1
11 months ago
if i - 1 >= 0 and self.ChessData[i - 1][y]['Cstate'] == 0:
upflag[0] = 2 # 表示有两个空格
else:
break
11 months ago
if i - 2 >= 0 and self.ChessData[i - 2][y]['Cstate'] == 0:
upflag[0] = 3 # 表示有三个空格
else:
break
break
for i in range(x + 1, 19): # 计算右边棋子数量 downcount[0]表示右侧同类棋子 用downflag[0] 记录
if self.ChessData[i][y]['Cstate'] == color:
downcount[0] += 1 # 右侧有自己棋子
elif self.ChessData[i][y]['Cstate'] != 0 and self.ChessData[i][y]['Cstate'] != color: # 右侧有对方棋子
downflag[0] = -1
break
elif self.ChessData[i][y]['Cstate'] == 0: # 右侧没有棋子
downflag[0] = 1
11 months ago
if i + 1 < 19 and self.ChessData[i + 1][y]['Cstate'] == 0:
downflag[0] = 2 # 表示有两个空格
else:
break
11 months ago
if i + 2 < 19 and self.ChessData[i + 2][y]['Cstate'] == 0:
downflag[0] = 3 # 表示有三个空格
else:
break
break
for i in range(y - 1, -1, -1): # 计算方向向上 upcount[1]表示上方同类棋子 用upflag[1] 记录
if self.ChessData[x][i]['Cstate'] == color:
upcount[1] += 1 # 上有自己棋子
elif self.ChessData[x][i]['Cstate'] != 0 and self.ChessData[x][i]['Cstate'] != color: # 上有对方棋子
upflag[1] = -1
break
elif self.ChessData[x][i]['Cstate'] == 0: # 上没有棋子
upflag[1] = 1
11 months ago
if i - 1 >= 0 and self.ChessData[x][i - 1]['Cstate'] == 0:
upflag[1] = 2 # 表示上有两个空格
else:
break
11 months ago
if i - 2 >= 0 and self.ChessData[x][i - 2]['Cstate'] == 0:
upflag[1] = 3 # 表示上有三个空格
else:
break
break
for i in range(y + 1, 19): # 计算下棋子数量 downcount[0]表示下同类棋子 用downflag[0] 记录
if self.ChessData[x][i]['Cstate'] == color:
downcount[1] += 1 # 下有自己棋子
elif self.ChessData[x][i]['Cstate'] != 0 and self.ChessData[x][i]['Cstate'] != color: # 下有对方棋子
downflag[1] = -1
break
elif self.ChessData[x][i]['Cstate'] == 0: # 下侧没有棋子
downflag[1] = 1
11 months ago
if i + 1 < 19 and self.ChessData[x][i + 1]['Cstate'] == 0:
downflag[1] = 2 # 表示下有两个空格
else:
break
11 months ago
if i + 2 < 19 and self.ChessData[x][i + 2]['Cstate'] == 0:
downflag[1] = 3 # 表示下有三个空格
else:
break
break
11 months ago
j = 1
for i in range(x - 1, -1, -1): # // 计算左斜向上 upcount[2]表示左斜向上同类棋子 用upflag[2]记录
# for j in range(y - 1, -1, -1):
11 months ago
if y - j >= 0 and self.ChessData[i][y - j]['Cstate'] == color:
upcount[2] += 1 # 左斜向上有自己棋子
11 months ago
j += 1
elif y - j >= 0 and self.ChessData[i][y - j]['Cstate'] != 0 and self.ChessData[i][y - j][
'Cstate'] != color: # 左斜向上有对方棋子
upflag[2] = -1
j += 1
break
11 months ago
elif y - j >= 0 and self.ChessData[i][y - j]['Cstate'] == 0: # 左斜向上没有棋子
upflag[2] = 1
11 months ago
if i - 1 >= 0 and y - j - 1 >= 0 and self.ChessData[i - 1][y - j - 1]['Cstate'] == 0:
upflag[2] = 2 # 表示有两个空格
j += 1
else:
j += 1
break
11 months ago
if i - 2 >= 0 and y - j - 2 >= 0 and self.ChessData[i - 2][y - j - 2]['Cstate'] == 0:
upflag[2] = 3 # 表示有三个空格
j += 1
else:
j += 1
break
j += 1
break
j = 1
for i in range(x + 1, 19): # // 计算右斜向下 downcount[2]表示右斜向下同类棋子 用downflag[2]记录
11 months ago
if y + j < 19 and self.ChessData[i][y + j]['Cstate'] == color:
downcount[2] += 1 # 右斜向下有自己棋子
j += 1
11 months ago
elif y + j < 19 and self.ChessData[i][y + j]['Cstate'] != 0 and self.ChessData[i][y + j][
'Cstate'] != color: # 右斜向下有对方棋子
downflag[2] = -1
j += 1
break
11 months ago
elif y + j < 19 and self.ChessData[i][y + j]['Cstate'] == 0: # 右斜向下没有棋子
downflag[2] = 1
11 months ago
if i + 1 < 19 and y + j + 1 < 19 and self.ChessData[i + 1][y + j + 1]['Cstate'] == 0:
downflag[2] = 2 # 表示有两个空格
j += 1
else:
j += 1
break
11 months ago
if i + 2 < 19 and y + j + 2 < 19 and self.ChessData[i + 2][y + j + 2]['Cstate'] == 0:
downflag[2] = 3 # 表示有三个空格
j += 1
else:
j += 1
break
j += 1
break
11 months ago
j = 1
for i in range(x + 1, 19): # // 计算右斜向上 downcount[3]表示右斜向上同类棋子 用downflag[3]记录
# for j in range(y - 1, -1, -1):
11 months ago
if y - j >= 0 and self.ChessData[i][y - j]['Cstate'] == color:
downcount[3] += 1 # 右斜向上有自己棋子
11 months ago
j += 1
elif y - j >= 0 and self.ChessData[i][y - j]['Cstate'] != 0 and self.ChessData[i][y - j][
'Cstate'] != color: # 右斜向上有对方棋子
downflag[3] = -1
j += 1
break
11 months ago
elif y - j >= 0 and self.ChessData[i][y - j]['Cstate'] == 0: # 右斜向上没有棋子
downflag[3] = 1
11 months ago
if i + 1 < 19 and y - j - 1 >= 0 and self.ChessData[i][y - j]['Cstate'] == 0:
downflag[3] = 2 # 表示有两个空格
j += 1
else:
j += 1
break
11 months ago
if i + 2 < 19 and y - j - 2 >= 0 and self.ChessData[i][y - j]['Cstate'] == 0:
downflag[3] = 3 # 表示有三个空格
j += 1
else:
j += 1
break
j += 1
break
11 months ago
j = 1
for i in range(x - 1, -1, -1): # 计算左斜向下 upcount[3]表示左斜向下同类棋子 用upflag[3]记录
# for j in range(y + 1, 15):
11 months ago
if y + j < 19 and self.ChessData[i][j + y]['Cstate'] == color:
upcount[3] += 1 # 左斜向下有自己棋子
11 months ago
j += 1
elif y + j < 19 and self.ChessData[i][j + y]['Cstate'] != 0 and self.ChessData[i][j + y][
'Cstate'] != color: # 左斜向下有对方棋子
upflag[3] = -1
11 months ago
j += 1
break
11 months ago
elif y + j < 19 and self.ChessData[i][j + y]['Cstate'] == 0: # 左斜向下没有棋子
upflag[3] = 1
11 months ago
if i - 1 >= 0 and j + y + 1 < 19 and self.ChessData[i][j + y]['Cstate'] == 0:
upflag[3] = 2 # 表示有两个空格
j += 1
else:
j += 1
break
11 months ago
if i - 2 >= 0 and j + y + 2 < 19 and self.ChessData[i - 1][j + y + 1]['Cstate'] == 0:
upflag[3] = 3 # 表示有三个空格
j += 1
else:
j += 1
break
j += 1
break
11 months ago
if computerColor == self.ChessData[x][y]['Cstate']: # 数据处理,如果是电脑方的话分数要高一点
for i in range(4):
count = upcount[i] + downcount[i] + 1
if count == 5: # 成五
11 months ago
message += '五子连珠得分加4000\n'
value[i] = 4000
elif count == 4:
if upflag[i] >= 1 and downflag[i] >= 1: # 活四
11 months ago
message += '四子连珠且有两端未被对方封堵得分加1900\n'
value[i] = 1900
if (upflag[i] >= 1 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 1): # 眠四
11 months ago
message += '四子连珠且有一端未被对方封堵得分加300\n'
value[i] = 300
if upflag[i] == -1 and downflag[i] == -1: # 死四
11 months ago
message += '四子连珠但两端都被封堵得分减5\n'
value[i] = -5
elif count == 3:
if (upflag[i] >= 2 and downflag[i] >= 1) or (upflag[i] >= 1 and downflag[i] >= 2): # 活三
11 months ago
message += '三子连珠且有两端未被对方封堵得分加400\n'
value[i] = 400
if (upflag[i] >= 2 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 2) or (
upflag[i] == 1 and downflag[i] == 1): # 眠三
11 months ago
message += '三子连珠且有有一端未被对方封堵得分加80\n'
value[i] = 80
if upflag[i] == -1 and downflag[i] == -1: # 死三
11 months ago
message += '三子连珠但两端都被封堵得分减5\n'
value[i] = -5
elif count == 2:
if (upflag[i] >= 3 and downflag[i] >= 1) or (upflag[i] >= 1 and downflag[i] >= 3) or (
upflag[i] >= 2 and downflag[i] >= 2): # 活二
11 months ago
message += '二子连珠且有两端未被对方封堵得分加105\n'
value[i] = 105
if (upflag[i] >= 3 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 3) or (
upflag[i] == 2 and downflag[i] == 1) or (upflag[i] == 1 and downflag[i] == 2): # 眠三
11 months ago
message += '二子连珠且有有一端未被对方封堵得分加35\n'
value[i] = 35
if upflag[i] == -1 and downflag[i] == -1: # 死二
11 months ago
message += '二子连珠但两端都被封堵得分减5\n'
value[i] = -5
else:
if (upflag[i] >= 3 and downflag[i] >= 2) or (upflag[i] >= 2 and downflag[i] >= 3): # 活一
11 months ago
value[i] = 8
if (upflag[i] == 2 and downflag[i] == 2) or (upflag[i] == 1 and downflag[i] == 3) or (
upflag[i] == 3 and downflag[i] == 1): # 眠一
11 months ago
value[i] = 2
if (upflag[i] <= 1 and downflag[i] <= 2) or (upflag[i] <= 2 and downflag[i] <= 1): # 死一
11 months ago
value[i] = -5
else:
for i in range(4):
count = upcount[i] + downcount[i] + 1
if count == 5: # 成五
11 months ago
value[i] = 3000
elif count == 4:
if upflag[i] >= 1 and downflag[i] >= 1: # 活四
11 months ago
value[i] = 1500
if (upflag[i] >= 1 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 1): # 眠四
11 months ago
value[i] = 250
if upflag[i] == -1 and downflag[i] == -1: # 死四
11 months ago
value[i] = -5
elif count == 3:
if (upflag[i] >= 2 and downflag[i] >= 1) or (upflag[i] >= 1 and downflag[i] >= 2): # 活三
11 months ago
value[i] = 300
if (upflag[i] >= 2 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 2) or (
upflag[i] == 1 and downflag[i] == 1): # 眠三
11 months ago
value[i] = 50
if upflag[i] == -1 and downflag[i] == -1: # 死三
11 months ago
value[i] = -5
elif count == 2:
if (upflag[i] >= 3 and downflag[i] >= 1) or (upflag[i] >= 1 and downflag[i] >= 3) or (
upflag[i] >= 2 and downflag[i] >= 2): # 活二
11 months ago
value[i] = 65
if (upflag[i] >= 3 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] >= 3) or (
upflag[i] == 2 and downflag[i] == 1) or (upflag[i] == 1 and downflag[i] == 2): # 眠二
11 months ago
value[i] = 15
if (upflag[i] == -1 and downflag[i] == -1) or (upflag[i] == 1 and downflag[i] == 1) or (
upflag[i] == -1 and downflag[i] == 2) or (upflag[i] == 2 and downflag[i] == -1): # 死二
11 months ago
value[i] = -5
else:
if (upflag[i] >= 3 and downflag[i] >= 2) or (upflag[i] >= 2 and downflag[i] >= 3): # 活一
11 months ago
value[i] = 5
if (upflag[i] == 2 and downflag[i] == 2) or (upflag[i] == 1 and downflag[i] == 3) or (
upflag[i] == 3 and downflag[i] == 1): # 眠一
11 months ago
value[i] = 1
if (upflag[i] <= 1 and downflag[i] <= 2) or (upflag[i] <= 2 and downflag[i] <= 1) or (
upflag[i] <= 3 and downflag[i] == -1) or (upflag[i] == -1 and downflag[i] <= 3): # 死三
11 months ago
value[i] = -5
for i in range(4):
sum += value[i]
value[i] = 0
upcount[i] = 0
downcount[i] = 0
upflag[i] = 0
downflag[i] = 0
self.ChessData[x][y]['Cstate'] = 0
11 months ago
return sum, message
11 months ago
def return_chess(self, Depth, computercolor):
time.sleep(0.5)
self.New_count = 0
self.Max_Score = 0
self.Counts = 0
pos = [[0 for y in range(2)] for x in range(10)]
evaFLAG = 0
position = [0, 0] # 初始化位置坐标数组
11 months ago
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if 0 <= i < 19 and 0 <= j < 19:
if self.ChessData[i][j]['Cstate'] == 0:
self.Score[i][j],s = self.count_Score(i, j, computercolor)
self.New_count += 1
if self.Score[i][j] > 0:
self.Counts += 1
if self.Max_Score < self.Score[i][j]:
self.Max_Score = self.Score[i][j] # 记录当前棋盘分数的最大值
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if self.ChessData[i][j]['Cstate'] != 0:
self.Score[i][j] = self.ChessData[i][j]['Cstate']
if i < 19 and j < 19 and self.Score[i][j] == self.Max_Score and self.ChessData[i][j]['Cstate'] == 0:
pos[evaFLAG][0] = i
pos[evaFLAG][1] = j
evaFLAG += 1
m = random.randint(0, evaFLAG - 1)
position[0] = pos[m][0]
position[1] = pos[m][1]
return position
# 落子建议下一步,
def return_chess_new(self, Depth, computercolor):
time.sleep(0.5)
self.New_count = 0
self.Max_Score = 0
self.Counts = 0
pos = [[0 for y in range(2)] for x in range(10)]
evaFLAG = 0
position = [0, 0] # 初始化位置坐标数组
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if 0 <= i < 19 and 0 <= j < 19:
if self.ChessData[i][j]['Cstate'] == 0:
self.Score[i][j] = self.count_Score(i, j, computercolor)
self.New_count += 1
11 months ago
if self.Score[i][j] > 0:
self.Counts += 1
if self.Max_Score < self.Score[i][j]:
self.Max_Score = self.Score[i][j] # 记录当前棋盘分数的最大值
11 months ago
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if self.ChessData[i][j]['Cstate'] != 0:
self.Score[i][j] = self.ChessData[i][j]['Cstate']
if i < 19 and j < 19 and self.Score[i][j] >= self.Max_Score - 5000 and self.ChessData[i][j][
'Cstate'] == 0:
pos[evaFLAG][0] = i
pos[evaFLAG][1] = j
11 months ago
evaFLAG += 1
m = random.randint(0, evaFLAG - 1)
position[0] = pos[m][0]
position[1] = pos[m][1]
return position
11 months ago
# 判断玩家点击的位置是否可以落子如果可以落子则进行self.make_move()移动返回self.make_move()的值否则返回False
def player_location(self, playerx, playery, canvas, blackch, whitech):
if 0 <= playerx <= 706 and 0 <= playery <= 640:
m = (playerx - 40) / 37
n = (playery - 21) / 34
intm = int(m)
intn = int(n)
if m - intm >= 0.5 or m - intm <= -0.5:
pointi = intm + 1
else:
pointi = intm
if n - intn >= 0.5 or n - intn <= -0.5:
pointj = intn + 1
else:
pointj = intn
11 months ago
# print(pointi, pointj)
if 0 <= pointi <= 18 and 0 <= pointj <= 18:
11 months ago
# print("1:%d" % self.Currently_step)
return self.make_move(pointi, pointj, canvas, blackch, whitech)
11 months ago
# print("2:%d" % self.Currently_step)
return False
11 months ago
def get_player_move_location_xy(self, playerx, playery, canvas, blackch, whitech):
if 0 <= playerx <= 706 and 0 <= playery <= 640:
m = (playerx - 40) / 37
n = (playery - 21) / 34
intm = int(m)
intn = int(n)
if m - intm >= 0.5 or m - intm <= -0.5:
pointi = intm + 1
else:
pointi = intm
if n - intn >= 0.5 or n - intn <= -0.5:
pointj = intn + 1
else:
pointj = intn
# print(pointi, pointj)
if 0 <= pointi <= 18 and 0 <= pointj <= 18:
# print("1:%d" % self.Currently_step)
return self.make_move(pointi, pointj, canvas, blackch, whitech),pointi,pointj
# print("2:%d" % self.Currently_step)
return self.make_move(pointi, pointj, canvas, blackch, whitech),pointi,pointj
#
def make_move(self, pointi, pointj, canvas, blackch, whitech):
if self.ChessData[pointi][pointj]['Cstate'] == 0 and self.myColor == 2 and self.Currently_step % 2 == 0:
Chessimgx = pointi * 36.8 + 41
Chessimgy = pointj * 34.3 + 20
oval = canvas.create_image(Chessimgx - 14, Chessimgy, image=blackch, anchor=W)
self.Chessimg[pointi][pointj] = oval
self.ChessData[pointi][pointj]['Cstate'] = 2
xregretFLAG[self.Currently_step] = pointi
yregretFLAG[self.Currently_step] = pointj
self.player = 0 # 玩家下棋标志置0
self.computer = 1 # 电脑下棋标志置1
self.Currently_step += 1
self.ChessData[pointi][pointj]['Cstep'] = self.Currently_step
a = max(abs(pointi - 9), abs(pointj - 9))
self.Depth = max(self.Depth, a)
return True
elif (self.ChessData[pointi][pointj]['Cstate'] == 0 and self.myColor == 1 and self.Currently_step % 2 != 0) or \
(self.ChessData[pointi][pointj][
'Cstate'] == 0 and self.player2color == 1 and self.Currently_step % 2 != 0):
Chessimgx = pointi * 36.8 + 41
Chessimgy = pointj * 34.6 + 20
oval = canvas.create_image(Chessimgx - 14, Chessimgy, image=whitech, anchor=W)
self.Chessimg[pointi][pointj] = oval
self.ChessData[pointi][pointj]['Cstate'] = 1
xregretFLAG[self.Currently_step] = pointi
yregretFLAG[self.Currently_step] = pointj
self.Currently_step += 1
self.player = 0
self.computer = 1
self.ChessData[pointi][pointj]['Cstep'] = self.Currently_step
a = max(abs(pointi - 9), abs(pointj - 9))
self.Depth = max(self.Depth, a)
return True
elif self.ChessData[pointi][pointj]['Cstate'] != 0:
return False
def get_direction_Score(self, y, x, y_offset, x_offset):
nowcount = 0 # 落子处我方连续子数
_nowcount = 0 # 落子处对方连续子数
space = None # 我方连续子中有无空格
_space = None # 对方连续子中有无空格
both = 0 # 我方连续子两端有无阻挡
_both = 0 # 对方连续子两端有无阻挡
tmp_x = x
tmp_y = y
# 如果是 2 表示是边上是我方子1 表示敌方子
if 0 <= y + y_offset <= 18 and 0 <= x + x_offset <= 18:
Cflag = self.ChessData[y + y_offset][x + x_offset]['Cstate']
if Cflag != 0:
for step in range(1, 6):
x += x_offset
y += y_offset
if 0 <= x < 18 and 0 <= y < 18:
if Cflag == 2:
11 months ago
if self.ChessData[y][x][
'Cstate'] == 2 and self.myColor == 2: # ) or (self.ChessData[y][x]['Cstate'] == 1 and self.myColor == 1)
nowcount += 1
if space is False:
space = True
11 months ago
elif self.ChessData[y][x][
'Cstate'] == 1 and self.myColor == 2: # ) or (self.ChessData[y][x]['Cstate'] == 1 and self.myColor == 1)
_both += 1
break
else:
if space is None:
space = False
else:
break # 遇到第二个空格退出
elif Cflag == 1:
if self.ChessData[y][x]['Cstate'] == 2 and self.myColor == 1:
_both += 1
break
elif self.ChessData[y][x]['Cstate'] == 1 and self.myColor == 1:
_nowcount += 1
if _space is False:
_space = True
else:
if _space is None:
_space = False
else:
break
else:
# 遇到边也就是阻挡
if Cflag == 2:
both += 1
elif Cflag == 1:
_both += 1
if space is False:
space = None
if _space is False:
_space = None
x = tmp_x
y = tmp_y
if 0 <= y - y_offset <= 18 and 0 <= x - x_offset <= 18:
_flag = self.ChessData[y - y_offset][x - x_offset]['Cstate']
if _flag != 0:
for step in range(1, 6):
x -= x_offset
y -= y_offset
if 0 <= x < 18 and 0 <= y < 18:
if _flag == 2:
11 months ago
if self.ChessData[y][x]['Cstate'] == 2 and self.myColor == 2:
nowcount += 1
if space is False:
space = True
11 months ago
elif self.ChessData[y][x]['Cstate'] == 1 and self.myColor == 2:
_both += 1
break
else:
if space is None:
space = False
else:
break # 遇到第二个空格退出
elif _flag == 1:
11 months ago
if self.ChessData[y][x]['Cstate'] == 2 and self.myColor == 1:
_both += 1
break
11 months ago
elif self.ChessData[y][x]['Cstate'] == 1 and self.myColor == 1:
_nowcount += 1
if _space is False:
_space = True
else:
if _space is None:
_space = False
else:
break
else:
# 遇到边也就是阻挡
if _flag == 1:
both += 1
elif _flag == 2:
_both += 1
Score = 0
if nowcount == 4:
Score = 10000
elif _nowcount == 4:
Score = 9000
elif nowcount == 3:
if both == 0:
Score = 1000
elif both == 1:
Score = 100
else:
Score = 0
elif _nowcount == 3:
if _both == 0:
Score = 900
elif _both == 1:
Score = 90
else:
Score = 0
elif nowcount == 2:
if both == 0:
Score = 100
elif both == 1:
Score = 10
else:
Score = 0
elif _nowcount == 2:
if _both == 0:
Score = 90
elif _both == 1:
Score = 9
else:
Score = 0
elif nowcount == 1:
Score = 10
elif _nowcount == 1:
Score = 9
else:
Score = 0
if space or _space:
Score /= 2
return Score
def get_point_Score(self, y, x):
Score = 0
offset = [(1, 0), (0, 1), (1, 1), (1, -1)]
for os in offset:
Score += self.get_direction_Score(y, x, os[0], os[1])
return Score
def atuoactive(self):
_Score = 0
position = [-1 for x in range(2)]
for i in range(0, 18):
for j in range(0, 18):
if self.ChessData[i][j]['Cstate'] == 0:
11 months ago
Score = self.get_point_Score(i, j)
if Score > _Score:
position[0] = i
position[1] = j
_Score = Score
elif Score == _Score:
r = random.randint(0, 100)
if r % 2 == 0:
position[0] = i
position[1] = j
return position
11 months ago
# 设置的策略ai落子
def ai_location(self, canvas, blackch, whitech):
if self.Depth >= 9:
self.Depth = 8
11 months ago
position = self.return_chess(self.Depth, self.computercolor) # 调用估值函数
# position = self.atuoactive()
if self.ChessData[position[0]][position[1]]['Cstate'] == 0:
11 months ago
# print("3:%d"%self.Currently_step)
if self.computercolor == 2 and self.Currently_step % 2 == 0:
self.ChessData[position[0]][position[1]]['Cstate'] = 2
11 months ago
oval = canvas.create_image(position[0] * 36.8 + 41 - 14, position[1] * 34.6 + 20, image=blackch,
anchor=W)
self.Chessimg[position[0]][position[1]] = oval
11 months ago
self.ChessData[position[0]][position[1]]['Cstep'] = self.Currently_step
elif self.computercolor == 1 and self.Currently_step % 2 != 0:
self.ChessData[position[0]][position[1]]['Cstate'] = 1
11 months ago
oval = canvas.create_image(position[0] * 36.8 + 41 - 14, position[1] * 34.6 + 20, image=whitech,
anchor=W)
self.Chessimg[position[0]][position[1]] = oval
11 months ago
self.ChessData[position[0]][position[1]]['Cstep'] = self.Currently_step
xregretFLAG[self.Currently_step] = position[0]
yregretFLAG[self.Currently_step] = position[1]
self.player = 1 # 玩家下棋标志置0
self.computer = 0 # 电脑下棋标志置1
self.Currently_step += 1
11 months ago
self.ChessData[position[0]][position[1]]['Cstep'] = self.Currently_step
a = max(abs(position[0] - 9), abs(position[1] - 9)) # 计算该点到中心的最大的距离
self.Depth = max(self.Depth, a) # 不断更新Depth的值
# print("4:%d" % self.Currently_step)
def ChessCheck(self):
11 months ago
for x in range(15): # 1.判断x-轴是否连续五子
for y in range(19):
11 months ago
if self.ChessData[x][y]['Cstate'] == 1 and self.ChessData[x + 1][y]['Cstate'] == 1 and \
self.ChessData[x + 2][y]['Cstate'] == 1 and self.ChessData[x + 3][y]['Cstate'] == 1 and \
self.ChessData[x + 4][y]['Cstate'] == 1:
self.WinFLAG = 1
return 1
11 months ago
if self.ChessData[x][y]['Cstate'] == 2 and self.ChessData[x + 1][y]['Cstate'] == 2 and \
self.ChessData[x + 2][y]['Cstate'] == 2 and self.ChessData[x + 3][y]['Cstate'] == 2 and \
self.ChessData[x + 4][y]['Cstate'] == 2:
self.WinFLAG = 1
return 2
# 2.判断y-轴是否连续五子
for x in range(19):
for y in range(15):
11 months ago
if self.ChessData[x][y]['Cstate'] == 1 and self.ChessData[x][y + 1]['Cstate'] == 1 and \
self.ChessData[x][y + 2]['Cstate'] == 1 and self.ChessData[x][y + 3]['Cstate'] == 1 and \
self.ChessData[x][y + 4]['Cstate'] == 1:
self.WinFLAG = 1
return 1
11 months ago
if self.ChessData[x][y]['Cstate'] == 2 and self.ChessData[x][y + 1]['Cstate'] == 2 and \
self.ChessData[x][y + 2]['Cstate'] == 2 and self.ChessData[x][y + 3]['Cstate'] == 2 and \
self.ChessData[x][y + 4]['Cstate'] == 2:
self.WinFLAG = 1
return 2
# 3.判断右上-左下是否连续五子
for x in range(15):
11 months ago
for y in range(4, 19):
if self.ChessData[x][y]['Cstate'] == 1 and self.ChessData[x + 1][y - 1]['Cstate'] == 1 and \
self.ChessData[x + 2][y - 2]['Cstate'] == 1 and self.ChessData[x + 3][y - 3]['Cstate'] == 1 and \
self.ChessData[x + 4][y - 4]['Cstate'] == 1:
self.WinFLAG = 1
return 1
11 months ago
if self.ChessData[x][y]['Cstate'] == 2 and self.ChessData[x + 1][y - 1]['Cstate'] == 2 and \
self.ChessData[x + 2][y - 2]['Cstate'] == 2 and self.ChessData[x + 3][y - 3]['Cstate'] == 2 and \
self.ChessData[x + 4][y - 4]['Cstate'] == 2:
self.WinFLAG = 1
return 2
# 4.判断左上-右下是否连续五子
for x in range(15):
for y in range(15):
11 months ago
if self.ChessData[x][y]['Cstate'] == 1 and self.ChessData[x + 1][y + 1]['Cstate'] == 1 and \
self.ChessData[x + 2][y + 2]['Cstate'] == 1 and self.ChessData[x + 3][y + 3]['Cstate'] == 1 and \
self.ChessData[x + 4][y + 4]['Cstate'] == 1:
self.WinFLAG = 1
return 1
11 months ago
if self.ChessData[x][y]['Cstate'] == 2 and self.ChessData[x + 1][y + 1]['Cstate'] == 2 and \
self.ChessData[x + 2][y + 2]['Cstate'] == 2 and self.ChessData[x + 3][y + 3]['Cstate'] == 2 and \
self.ChessData[x + 4][y + 4]['Cstate'] == 2:
self.WinFLAG = 1
return 2
# 5.判断是否是平局
avanum = 0
for x in range(19):
for y in range(19):
if self.ChessData[x][y]['Cstate'] == 0: # 判断棋盘中是否有空位,有空位则非平局
break
elif self.ChessData[x][y]['Cstate'] != 0:
11 months ago
avanum += 1
if avanum == 365:
return 3
11 months ago
def resultshow(self, root, canvas, whitech, blackch):
global photo, text
if self.WinFLAG == 1:
if self.myColor == 1 and self.Gameover == 1 and self.computercolor == 2:
11 months ago
photo = canvas.create_image(800, 300, image=whitech, anchor=W)
text = canvas.create_text(850, 300, text='玩家 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 2 and self.Gameover == 2 and self.computercolor == 1:
photo = canvas.create_image(800, 300, image=blackch, anchor=W)
text = canvas.create_text(850, 300, text='玩家 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 2 and self.Gameover == 1 and self.computercolor == 1:
11 months ago
photo = canvas.create_image(800, 300, image=whitech, anchor=W)
text = canvas.create_text(850, 300, text='电脑 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 1 and self.Gameover == 2 and self.computercolor == 2:
photo = canvas.create_image(800, 300, image=blackch, anchor=W)
text = canvas.create_text(850, 300, text='电脑 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 2 and self.player2color == 1 and self.Gameover == 2:
11 months ago
photo = canvas.create_image(800, 300, image=blackch, anchor=W)
text = canvas.create_text(850, 300, text='玩家1 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 1 and self.player2color == 2 and self.Gameover == 2:
photo = canvas.create_image(800, 300, image=whitech, anchor=W)
text = canvas.create_text(850, 300, text='玩家1 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 2 and self.player2color == 1 and self.Gameover == 1:
11 months ago
photo = canvas.create_image(800, 300, image=whitech, anchor=W)
text = canvas.create_text(850, 300, text='玩家2 胜利', font='Arial,10', fill='#AE0000', anchor=W)
elif self.myColor == 1 and self.player2color == 2 and self.Gameover == 1:
photo = canvas.create_image(800, 300, image=blackch, anchor=W)
text = canvas.create_text(850, 300, text='玩家2 胜利', font='Arial,10', fill='#AE0000', anchor=W)
11 months ago
elif self.Gameover != 1 or self.Gameover != 2 or self.Gameover != 3:
canvas.delete(photo)
canvas.delete(text)
11 months ago
elif self.Gameover == 3 and self.WinFLAG == 0:
canvas.create_text(850, 300, text='平 局', font='Arial,10', fill='#AE0000', anchor=W)
11 months ago
#
def curlocation(self, canvas, player, computer, Current_Player, blackch, whitech, photos1, photos2):
text_options = {'fill': 'white', 'font': 'Arial,9', 'anchor': W}
image_positions = [(750, 145), (870, 145)]
if player == 1 and computer == 0:
if Current_Player == 1:
11 months ago
image_data = [(blackch, '玩家'), (whitech, '电脑')]
else:
11 months ago
image_data = [(whitech, '玩家'), (blackch, '电脑')]
elif player == 0 and computer == 1:
if Current_Player == 1:
11 months ago
image_data = [(blackch, '玩家'), (whitech, '电脑')]
else:
11 months ago
image_data = [(whitech, '玩家'), (blackch, '电脑')]
elif player == 1 and computer == 1:
11 months ago
image_data = [(blackch, '玩家1'), (whitech, '玩家2')]
else:
11 months ago
image_data = [(blackch, '玩家1'), (whitech, '玩家2')]
for i, (image, text) in enumerate(image_data):
canvas.create_image(*image_positions[i], image=photos1, anchor=W)
canvas.create_image(*image_positions[i], image=image, anchor=W)
canvas.create_text(image_positions[i][0] + 50, 150, text=text, **text_options)
canvas.update()
def clear_location(self, canvas):
image_positions = [(750, 145), (870, 145)]
# Delete images and texts at specified positions
for position in image_positions:
canvas.delete(canvas.find_closest(*position))
canvas.delete(canvas.find_closest(position[0] + 50, 150))
canvas.update()
11 months ago
def playing(self, Chess_Mode, root, canvas, blackch, whitech, photos1, photos2):
if Chess_Mode == 1:
self.myColor = 2 # 玩家选择的棋子颜色 黑
self.computercolor = 1 # 电脑的棋子颜色 白
self.player = 1
self.computer = 0
self.WinFLAG = 0
11 months ago
self.curlocation(canvas, 1, 0, 1, blackch, whitech, photos1, photos2)
elif Chess_Mode == 2:
self.myColor = 1 # 玩家选择的棋子颜色
self.computercolor = 2 # 电脑的棋子颜色
self.ChessData[9][9]['Cstate'] = 2
oval = canvas.create_image(9 * 36.8 + 41 - 14, 9 * 34.6 + 20, image=blackch, anchor=W)
self.Chessimg[9][9] = oval
xregretFLAG[self.Currently_step] = 9
yregretFLAG[self.Currently_step] = 9
self.player = 1 # 玩家下棋标志置0
self.computer = 0 # 电脑下棋标志置1
self.Currently_step += 1
self.WinFLAG = 0
self.ChessData[9][9]['Cstep'] = self.Currently_step
11 months ago
a = max(abs(9 - 9), abs(9 - 9)) # 计算该点到中心的最大的距离
self.Depth = max(self.Depth, a) # 不断更新Depth的值
self.curlocation(canvas, 1, 0, 2, blackch, whitech, photos1, photos2)
elif Chess_Mode == 0:
self.myColor = 2 # 先手玩家选择的棋子颜色
self.player2color = 1 # 后手玩家选择的棋子颜色
self.player = 1
self.player2 = 0
self.WinFLAG = 0
11 months ago
self.curlocation(canvas, 1, 1, 1, blackch, whitech, photos1, photos2)
# 由于在存储的棋局中都是Mode1这里先按照Mode1实现功能
elif Chess_Mode == 4:
self.myColor = 2 # 玩家选择的棋子颜色 黑
self.computercolor = 1 # 电脑的棋子颜色 白
self.player = 1
self.computer = 0
self.WinFLAG = 0
self.curlocation(canvas, 1, 0, 1, blackch, whitech, photos1, photos2)
11 months ago
def playgame_black(self, root, playerx, playery, canvas, blackch, whitech, result, photos1, photos2):
if self.WinFLAG == 0 and self.player == 1 and self.computer == 0 and self.Currently_step % 2 == 0:
if self.player_location(playerx, playery, canvas, blackch, whitech):
if self.Ovalone_new != 0:
for i in self.Ovalone_new:
canvas.delete(i)
self.curlocation(canvas, 0, 1, 2, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
root.update()
11 months ago
if self.WinFLAG == 0 and self.player == 0 and self.computer == 1 and self.Currently_step % 2 != 0:
root.update()
11 months ago
self.ai_location(canvas, blackch, whitech)
self.Gameover = self.ChessCheck()
11 months ago
self.curlocation(canvas, 1, 0, 1, blackch, whitech, photos1, photos2)
root.update()
if self.WinFLAG == 1:
11 months ago
self.resultshow(root, canvas, whitech, blackch)
root.update()
11 months ago
def playgame_white(self, root, playerx, playery, canvas, blackch, whitech, result, photos1, photos2):
if self.WinFLAG == 0 and self.player == 1 and self.computer == 0 and self.Currently_step % 2 == 1:
if self.player_location(playerx, playery, canvas, blackch, whitech):
if self.Ovalone_new != 0:
# print(self.Ovalone)
for i in self.Ovalone_new:
canvas.delete(i)
self.curlocation(canvas, 0, 1, 1, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
if self.WinFLAG == 0 and self.player == 0 and self.computer == 1:
root.update()
11 months ago
self.ai_location(canvas, blackch, whitech)
self.curlocation(canvas, 1, 0, 2, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
if self.WinFLAG == 1:
11 months ago
self.resultshow(root, canvas, whitech, blackch)
root.update()
11 months ago
def doublepeople(self, root, playerx, playery, canvas, blackch, whitech, result, photos1, photos2):
if self.WinFLAG == 0:
if self.player == 1 and self.player2 == 0 and self.Currently_step % 2 == 0:
if self.player_location(playerx, playery, canvas, blackch, whitech):
if self.Ovalone != 0:
canvas.delete(self.Ovalone)
self.player2 = 1
self.Gameover = self.ChessCheck()
11 months ago
self.curlocation(canvas, 0, 0, 2, blackch, whitech, photos1, photos2)
if self.WinFLAG == 1:
11 months ago
self.resultshow(root, canvas, whitech, blackch)
root.update()
11 months ago
elif self.player2 == 1 and self.player == 0 and self.Currently_step % 2 != 0:
if self.player_location(playerx, playery, canvas, blackch, whitech):
if self.Ovalone != 0:
canvas.delete(self.Ovalone)
self.player = 1
self.player2 = 0
11 months ago
self.curlocation(canvas, 1, 1, 1, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
11 months ago
if self.WinFLAG == 1:
self.resultshow(root, canvas, whitech, blackch)
root.update()
11 months ago
def studenttest_playgame_white(self, root, playerx, playery, canvas, blackch, whitech, result, photos1, photos2):
if self.WinFLAG == 0 and self.player == 1 and self.computer == 0 and self.Currently_step % 2 == 1:
flag,x,y = self.get_player_move_location_xy(playerx, playery, canvas, blackch, whitech)
if flag:
if self.Ovalone_new != 0:
# print(self.Ovalone)
for i in self.Ovalone_new:
canvas.delete(i)
self.curlocation(canvas, 0, 1, 1, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
if self.WinFLAG == 0 and self.player == 0 and self.computer == 1:
root.update()
self.ai_location(canvas, blackch, whitech)
self.curlocation(canvas, 1, 0, 2, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
if self.WinFLAG == 1:
self.resultshow(root, canvas, whitech, blackch)
root.update()
# 返回xy坐标
return x,y
def studenttest_playgame_black(self, root, playerx, playery, canvas, blackch, whitech, result, photos1, photos2):
if self.WinFLAG == 0 and self.player == 1 and self.computer == 0 and self.Currently_step % 2 == 0:
flag,x,y = self.get_player_move_location_xy(playerx, playery, canvas, blackch, whitech)
# print("get_player_move_location_xy:flag,x,y",flag,x,y)
if flag:
if self.Ovalone_new != 0:
for i in self.Ovalone_new:
canvas.delete(i)
self.curlocation(canvas, 0, 1, 2, blackch, whitech, photos1, photos2)
self.Gameover = self.ChessCheck()
root.update()
if self.WinFLAG == 0 and self.player == 0 and self.computer == 1 and self.Currently_step % 2 != 0:
root.update()
self.ai_location(canvas, blackch, whitech)
self.Gameover = self.ChessCheck()
self.curlocation(canvas, 1, 0, 1, blackch, whitech, photos1, photos2)
root.update()
if self.WinFLAG == 1:
self.resultshow(root, canvas, whitech, blackch)
root.update()
return x,y
# 返回一个位置数组
def return_postion(self, Depth, computercolor):
time.sleep(0.5)
self.New_count = 0
self.Max_Score = 0
self.Counts = 0
pos = [[0 for y in range(2)] for x in range(10)]
evaFLAG = 0
position = [0, 0] # 初始化位置坐标数组
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if 0 <= i < 19 and 0 <= j < 19:
if self.ChessData[i][j]['Cstate'] == 0:
self.Score[i][j] = self.count_Score(i, j, computercolor)
self.New_count += 1
if self.Score[i][j] > 0:
self.Counts += 1
if self.Max_Score < self.Score[i][j]:
self.Max_Score = self.Score[i][j] # 记录当前棋盘分数的最大值
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if self.ChessData[i][j]['Cstate'] != 0:
self.Score[i][j] = self.ChessData[i][j]['Cstate']
if i < 19 and j < 19 and self.Score[i][j] == self.Max_Score and self.ChessData[i][j]['Cstate'] == 0:
pos[evaFLAG][0] = i
pos[evaFLAG][1] = j
evaFLAG += 1
return pos
def return_postion_new(self, Depth, computercolor):
Depth = 8
# Depth = 2
time.sleep(0.5)
self.New_count = 0
self.Max_Score = 0
self.Counts = 0
pos = [[0 for y in range(2)] for x in range(100)]
evaFLAG = 0
position = [0, 0] # 初始化位置坐标数组
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if 0 <= i < 19 and 0 <= j < 19:
if self.ChessData[i][j]['Cstate'] == 0:
self.Score[i][j], message = self.count_Score(i, j, computercolor) # 计算点的得分
self.New_count += 1
if self.Score[i][j] > 0:
self.Counts += 1
if self.Max_Score < self.Score[i][j]:
self.Max_Score = self.Score[i][j] # 记录当前棋盘分数的最大值
self.Max_Score_pos = (i, j)
score, message = self.count_Score(self.Max_Score_pos[0], self.Max_Score_pos[1], computercolor) # 计算点的得分
# print(self.Max_Score_pos)
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if self.ChessData[i][j]['Cstate'] != 0:
self.Score[i][j] = self.ChessData[i][j]['Cstate']
if i < 19 and j < 19 and self.Score[i][j] >= self.Max_Score - 100 and self.ChessData[i][j][
'Cstate'] == 0:
pos[evaFLAG][0] = i
pos[evaFLAG][1] = j
evaFLAG += 1
# print('\n'.join([' '.join([f'{item:4}' for item in row]) for row in self.Score]))
return pos, message
# 获得当前一步的最大估值落子点和落子原因以及除了最大值以外估值最高的4个落子点
def return_postion_test_module(self, Depth, computercolor):
Depth = 8
# Depth = 2
time.sleep(0.5)
self.New_count = 0
self.Max_Score = 0
self.Counts = 0
tempPos = []
tempVal = []
Pos_get = []
pos = [[0 for y in range(2)] for x in range(361)]
evaFLAG = 0
position = [0, 0] # 初始化位置坐标数组
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if 0 <= i < 19 and 0 <= j < 19:
if self.ChessData[i][j]['Cstate'] == 0:
self.Score[i][j], message = self.count_Score(i, j, computercolor) # 计算点的得分
self.New_count += 1
if self.Score[i][j] > 0:
self.Counts += 1
if self.Max_Score < self.Score[i][j]:
self.Max_Score = self.Score[i][j] # 记录当前棋盘分数的最大值
self.Max_Score_pos = (i, j)
score, message = self.count_Score(self.Max_Score_pos[0], self.Max_Score_pos[1], computercolor) # 计算点的得分
# print(self.Max_Score_pos)
for i in range(8 - Depth, 11 + Depth):
for j in range(8 - Depth, 11 + Depth):
if self.ChessData[i][j]['Cstate'] != 0:
self.Score[i][j] = self.ChessData[i][j]['Cstate']
if i < 19 and j < 19 and self.Score[i][j] >= 36 and self.ChessData[i][j]['Cstate'] == 0:
pos[evaFLAG][0] = i
pos[evaFLAG][1] = j
tempPos.append([i, j])
tempVal.append(self.Score[i][j])
evaFLAG += 1
# print('\n'.join([' '.join([f'{item:4}' for item in row]) for row in self.Score]))
sorted_id = sorted(range(len(tempVal)), key=lambda k: tempVal[k], reverse=True)
for i in range(5):
Pos_get.append(tempPos[sorted_id[i]])
return Pos_get, message