Python代码 | 井字棋

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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) - 1)]
    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

  

posted @   IronRoc  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

微信打赏