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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具