import random
checkerboard = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
i = 0
print(f"欢迎来玩井子棋,请在轮到你落子时输入你要下的位置,第x行,第y列,用逗号隔开,例如:1,2")
def print_board():
for row in checkerboard:
for col in row:
if col == 0:
print("| ", end="")
if col == 1:
print("|○", end="")
if col == -1:
print("|×", end="")
print("|")
print()
def is_over():
for row in checkerboard:
if sum(row) == 3:
print("你赢了")
return True
if sum(row) == -3:
print("你输了")
return True
for y in range(3):
if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == 3:
print("你赢了")
return True
if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == -3:
print("你输了")
return True
if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == 3:
print("你赢了")
return True
if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == -3:
print("你输了")
return True
if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == 3:
print("你赢了")
return True
if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == -3:
print("你输了")
return True
if i == 9:
print("平局")
return True
# 电脑为后手,故胜利第一,防守第二,进攻第三
def computer_turn():
# 胜利
for x in range(3):
if sum(checkerboard[x]) == -2:
for y in range(3):
if checkerboard[x][y] == 0:
checkerboard[x][y] = -1
return 0
for y in range(3):
if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == -2:
for x in range(3):
if checkerboard[x][y] == 0:
checkerboard[x][y] = -1
return 0
if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == -2:
for j in range(3):
if checkerboard[j][j] == 0:
checkerboard[j][j] = -1
return 0
if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == -2:
for j in range(3):
if checkerboard[j][2 - j] == 0:
checkerboard[j][2 - j] = -1
return 0
# 防守
for x in range(3):
if sum(checkerboard[x]) == 2:
for y in range(3):
if checkerboard[x][y] == 0:
checkerboard[x][y] = -1
return 0
for y in range(3):
if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == 2:
for x in range(3):
if checkerboard[x][y] == 0:
checkerboard[x][y] = -1
return 0
if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == 2:
for j in range(3):
if checkerboard[j][j] == 0:
checkerboard[j][j] = -1
return 0
if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == 2:
for j in range(3):
if checkerboard[j][2 - j] == 0:
checkerboard[j][2 - j] = -1
return 0
# 进攻的写法比较随机,是卖给玩家唯一的破绽
vacancies = []
for x in range(3):
for y in range(3):
if checkerboard[x][y] == 0:
vacancies.append((x, y))
x, y = vacancies[random.randint(0, len(vacancies))]
checkerboard[x][y] = -1
print_board()
while True:
while True:
x, y = map(int, input(f"轮到你落子了,选择你要下的位置:").split(","))
if x > 3 or y > 3:
print("超出棋盘范围,请重新输入")
continue
if checkerboard[x - 1][y - 1] != 0:
print("该位置已有棋子,请重新输入")
continue
break
checkerboard[x - 1][y - 1] = 1
i += 1
print("")
print(f"第{i}子:")
print_board()
if is_over():
break
computer_turn()
i += 1
print("")
print(f"第{i}子:")
print_board()
if is_over():
break