首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试玩家是否获胜的方法

测试玩家是否获胜的方法
EN

Stack Overflow用户
提问于 2020-06-08 04:03:23
回答 3查看 332关注 0票数 1

我还不熟悉面向对象编程和编写紧凑的代码,所以我可能忽略了一些东西,我试图想出一种方法来检查tic tic中的垂直赢和对角线赢,我已经有水平的了。

如果可能的话,是否有办法将其他两种方法合并到类似我已经拥有的东西中呢?

代码语言:javascript
复制
#creates the gameboard that stores if spaces are open or not
game_board = [ [0,0,0], [0, 0, 0], [0, 0, 0,] ]
#0 = open space
#1 = O
#2 = X

#check for winners horizontaly
def find_winner():
    # y represents the y axis
    for y in range(3):
        if game_board[y][0] == game_board[y][1] == game_board[y][2] != 0:
            #returns if the X or 0 has won
            return game_board[y][0] 
    #returns 0 if no-one has won   
    return 0    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-08 04:07:19

您可以添加更多这样的if语句:

代码语言:javascript
复制
game_board = [ [0, 0, 0],
               [0, 0, 0],
               [0, 0, 0,] ]

def find_winner():
    for y in range(3):
        if game_board[y][0] == game_board[y][1] == game_board[y][2] != 0: # Check horizontal
            return game_board[y][0]
        if : # Check vertical
            return game_board[0][y]
    if game_board[0][0] == game_board[1][1] == game_board[2][2] != 0 or game_board[0][2] == game_board[1][1] == game_board[2][0] != 0: # Check diagonal
        return game_board[1][1]
    return 0  
票数 5
EN

Stack Overflow用户

发布于 2020-06-08 04:25:11

这可能会有所帮助,这是垂直检查和对角线检查的两个功能。

代码语言:javascript
复制
# Checks for vertical row 
def win(game_board, player): 
    for x in range(len(game_board)): 
        win = True

        for y in range(len(game_board)): 
            if game_board[y][x] != player: 
                win = False
                continue

        if win == True: 
            return(win) 
    return(win) 

# Checks diagonal win 
def diag_win(game_board, player): 
    win = True
    y = 0
    for x in range(len(game_board)): 
        if game_board[x, x] != player: 
            win = False
    win = True
    if win: 
        for x in range(len(game_board)): 
            y = len(game_board) - 1 - x 
            if game_board[x, y] != player: 
                win = False
    return win 

如果您有一些疑问或建议,请随意评论。对于上述函数,随机选择玩家。使用函数是一个很好的实践。

票数 1
EN

Stack Overflow用户

发布于 2020-06-08 04:43:18

只有3项清单理解

所有的胜利和位置

代码语言:javascript
复制
game_board = [ [1, 0, 1],
               [0, 1, 0],
               [0, 1, 0] ]

# Horizontals
h = [str(i+1) + ' Row' for i, v in enumerate(game_board) if sum(v) == 3]

# Verticals
v = [str(i+1) + ' Col' for i in range(3) if sum([j[i] for j in game_board]) == 3]

# Diagonals
d = [['Left Diag', '','Right Diag'][i+1] for i in [-1, 1] if sum([game_board[0][1+i], game_board[1][1]], game_board[2][1-i]) == 3]

if any([h,v,d]):
    print('You won on:', h, v, d)
else:
    print('No win yet')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62254824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档