VanessaXD 发表于 2020-10-19 12:40:16

Python 井字棋游戏

本帖最后由 VanessaXD 于 2020-10-19 21:57 编辑

求各位大佬,可以帮忙看看代码吗?
是井字棋游戏,但棋盘不止3*3,也不需要画棋盘。以012345表示,棋盘大小为input的size,要求X和O分别输入,直到一方把整行或者整列或者斜换成他的字母就获胜。
我的问题出在没法计算输入的数字刚好和赢的可能性配对,用for loop的话,每输入一个数,比如0,这个数可能出现在很多个赢的可能性中,比如3*3的(0,1,2)(0,3,6)(0,4,8)count就会增加很多个1,无法准确判断谁赢,可以求各位大佬帮忙看一下怎么改吗?

下面是我的代码
size=int(input('Size--> '))
board=
def board1(size):
    for j in range(len(board)):
            print(board, end=' ')
            if (j+1)%size == 0:
                print()

ways=[]
for a in range(size):
    ways.append(board)
    ways.append(board)
    if a==0:
      ways.append(board)
    if a==size:
      ways.append(board)
print(ways)

def winners(board):
    count=0
    counto=0
    for s in ways:
      for k in s:
            if board.isalpha():
                count+=1
            else:
                count=count
            if k in listo:
                counto+=1
            else:
                counto=counto
    if count>=size:
      return True
    else:
      return False
    if counto>=size:
      return True
    else:
      return False

board1(size)
r=1
listx=[]
listo=[]
while True:
    x=int(input('X--> '))
    if board!='X' or board!='O':
      board='X'
      board1(size)
      listx.append(x)
      if winners(board):
            print('xwin')
            break
    else:
      board1(size)
    o=int(input('O--> '))
    if board!='O' or board!='X':
      board='O'
      board1(size)
      listo.append(o)
      listo.append(x)
      if winners(board):
            print('owin')
            break
    else:
      board1(size)




下面是sample run
Size--> 6
012345
6789 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
X--> 1
0X2345
6789 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
O--> 13
0X2345
6789 10 11
12O 14 15 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 2
0XX345
6789 10 11
12O 14 15 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
O--> 14
0XX345
6789 10 11
12OO 15 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 3
0XXX45
6789 10 11
12OO 15 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
O--> 15
0XXX45
6789 10 11
12OOO 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 4
0XXXX5
6789 10 11
12OOO 16 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
O--> 16
0XXXX5
6789 10 11
12OOOO 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 5
0XXXXX
6789 10 11
12OOOO 17
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
O--> 17
0XXXXX
6789 10 11
12OOOOO
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 6
0XXXXX
X789 10 11
12OOOOO
18 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
O--> 18
0XXXXX
X789 10 11
12OOOOO
O 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
X--> 0
XXXXXX
X789 10 11
12OOOOO
O 19 20 21 22 23
24 25 26 27 28 29
30 31 32 33 34 35
Winner: X

Stubborn 发表于 2020-10-19 13:29:06

# 初始化棋盘
board =

def winner(board):
    """是否有获胜者
      1,-1 有胜负
      0 表示没有胜负,没有结束,或者平局
    """
    lines = , board, board, board, board, board, board, board]
    return 1 if * 3 in lines else -1 if [-1] * 3 in lines else 0

VanessaXD 发表于 2020-10-19 21:59:56

Stubborn 发表于 2020-10-19 13:29


这是九宫格的情况吗?如果是6*6或者9*9该如何找win的情况呢?

VanessaXD 发表于 2020-10-19 22:01:07

Stubborn 发表于 2020-10-19 13:29


这是九宫格的情况吗?如果是6*6或者9*9该如何找win的情况呢?

Stubborn 发表于 2020-10-20 16:16:23

本帖最后由 Stubborn 于 2020-10-20 16:29 编辑

VanessaXD 发表于 2020-10-19 21:59
这是九宫格的情况吗?如果是6*6或者9*9该如何找win的情况呢?

井字棋不是 3 * 3的吗?还有6*6的井字棋?
胜负规则都一样的话,你照这我的代码改就可以拉~{:10_262:}

象棋爱好者 发表于 2020-10-20 21:22:40

我来拿鱼币

象棋爱好者 发表于 2020-10-20 21:24:15

嘿嘿

伊格利斯 发表于 2020-10-21 02:07:20

看到我了不懂的东西
页: [1]
查看完整版本: Python 井字棋游戏