井字棋简介
井字棋又称三子棋,英文名为Tic Tac Toe。具体玩法为在一个3x3的棋盘上,一个玩家用X做棋子,另一个玩家用O做棋子,谁先在棋盘上的一行、一列或对角线上画满三个棋子,即可获胜,如果棋盘下满无人胜出,即为平局。
实例代码
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
|
#要用的函数,可以在主程序用到时再看 def panduan1(a,b): #判断是否获胜,返回1则证明此颜色的棋获胜 x = 0 if x = = 0 : for i in range ( 3 ): #检索二维数组的第i行 q = 0 ;p = 0 for j in range ( 3 ): #检索第i行列表的所有元素 if a[i][j] = = b: q + = 1 #i行每有一个与所给的b棋的颜色相同,q就加一 if q = = 3 : #如果此行三个元素都与所给棋的颜色相同,则返回1 return 1 if a[j][i] = = b: #i,j位置颠倒,变为检测每列的三个元素 p + = 1 #i列每有一个与所给的b棋的颜色相同,q就加一 if p = = 3 : #如果此列三个元素都与所给棋的颜色相同,则返回1 return 1 q = 0 ;w = 0 for i in range ( 3 ): #判断对角线上的三个元素棋的颜色是否与b棋相同 if a[i][i] = = b: #判断正对角线 q + = 1 #正对角线每有一个棋子与b颜色相同,q就加一 if a[i][ 2 - i] = = b: #判断另一条对角线 w + = 1 #负对角线每有一个棋子与b颜色相同,w就加一 if q = = 3 or w = = 3 : #其中一条对角线和b棋颜色全部相同,则返回1 return 1 return 0 #以上条件都未返回值,则运行到这一步,返回0 def xiaqi( all ,qi,a): #将指定qi棋(白棋或黑棋)下到指定的a位置 all [ int (qi[ 1 ]) - 1 ][ int (qi[ 0 ]) - 1 ] = a def shuru1(): #输入要下的位置并返回对应的9键位置列表 x = input () #输入要下棋盘的位置 suoyou = '123456789' if suoyou.find(x) = = - 1 : #限制范围为1-9,模拟的手机的9键位置 print ( '输入不符合要求:' ) return 'no' #不合要求返回no y = 0 sum = '' #存棋下的位置 for j in range ( 1 , 4 ): #行号,整个循环循环x次,因为被下边break语句限制 for z in range ( 1 , 4 ): #列号 y + = 1 #循环一次加一,用于匹配是否和输入的数一样 sum = str (z) + ',' + str (j) #键盘的9个键和相应的坐标all[j][z] if y = = int (x): #匹配是否和输入的数一样,从1开始,匹配一样则返回9键对应位置列表并中断循环,比如输入2,返回[2,1],对应9键第一行第二列 return ( sum .split( ',' )) #返回对应9键的位置列表 break def panduan2( all ,x): #判断棋盘此位置是否已有棋子 hang = int (x[ 1 ]) lie = int (x[ 0 ]) if all [hang - 1 ][lie - 1 ]! = '-' : #只需要判断此位置是否为'-'号即可 return 1 #返回1,就是此位置已有棋子 else : return 0 #返回0,就是此位置没有棋子 def dayin( all ): #打印函数:用于打印棋盘现在的状况 for i in range ( 3 ): print ( ' ' .join( all [i])) #主程序开始 all = [[ '-' , '-' , '-' ],[ '-' , '-' , '-' ],[ '-' , '-' , '-' ]] #建立棋盘,“-”号代表棋盘无棋子 t = 0 ;w = 0 print ( '游戏开始!\n黑棋先:' ) while t = = 0 and w = = 0 : #利用t,w来分别表明黑白两棋的获胜,1为获胜,初始为0是为了进行一个整体循环,直到有一方获胜,则跳出循环 dayin( all ) print ( '轮到黑棋了:' ) #先下黑棋,标识符为'1' hei = shuru1() #输入黑棋要下的位置 while hei = = 'no' or panduan2( all ,hei) = = 1 : #设置重新输入判断命令,在输入的数不为1-9的数字或此位置有棋时重新输入,直到输入正确时退出循环 dayin( all ) #有误时先再次打印一次棋盘 print ( '请重新输入:' ) hei = shuru1() #再次输入1-9数字 xiaqi( all ,hei, '1' ) #下黑棋 t = panduan1( all , '1' ) #判断黑棋是否获胜,是则返回1 dayin( all ) #再次打印此时棋盘 if t = = 1 : #判断hei返回是否为1,是的话代表hei棋获胜,并退出循环 print ( '黑棋赢!' ) break all1 = all [ 0 ] + all [ 1 ] + all [ 2 ] #将棋盘加成一个字符串,利于判断是否还有空位置可下棋 if all1.count( '-' ) = = 0 : #如果没有'-'号,则棋盘被下满,平局,退出循环 dayin( all ) #再次打印棋盘,为了好看,可以将这句挪到print下边 print ( '平局!' ) break print ( '轮到白棋了:' ) #以下内容和黑棋下法一样,是白棋的下法,白棋标识为'0' bai = shuru1() while bai = = 'no' or panduan2( all ,bai) = = 1 : dayin( all ) print ( '请重新输入:' ) bai = shuru1() xiaqi( all ,bai, '0' ) w = panduan1( all , '0' ) if w = = 1 : print ( '白棋赢!' ) dayin( all ) all1 = all [ 0 ] + all [ 1 ] + all [ 2 ] if all1.count( '-' ) = = 0 : dayin( all ) print ( '平局!' ) break print ( '游戏结束!' ) |