Python Tkinter 四子棋游戏(4)

上次跟大家说好了,要发这篇,但不会做过多的解释。

直接上干货:

def check_winner(self):
        # Check rows
        for row in range(10):
            for col in range(7):  # Check up to column 6 (index 6) to have 4 in a row
                if self.board[row][col] == self.board[row][col+1] == self.board[row][col+2] == self.board[row][col+3] != " ":
                    return self.board[row][col]

        # Check columns
        for col in range(10):
            for row in range(7):  # Check up to row 6 (index 6) to have 4 in a column
                if self.board[row][col] == self.board[row+1][col] == self.board[row+2][col] == self.board[row+3][col] != " ":
                    return self.board[row][col]

        # Check diagonals (top-left to bottom-right)
        for row in range(7):  # Check up to row 6 (index 6) for diagonal
            for col in range(7):  # Check up to column 6 (index 6) for diagonal
                if self.board[row][col] == self.board[row+1][col+1] == self.board[row+2][col+2] == self.board[row+3][col+3] != " ":
                    return self.board[row][col]

        # Check diagonals (top-right to bottom-left)
        for row in range(7):  # Check up to row 6 (index 6) for diagonal
            for col in range(3, 10):  # Check columns 3 to 9 for diagonal
                if self.board[row][col] == self.board[row+1][col-1] == self.board[row+2][col-2] == self.board[row+3][col-3] != " ":
                    return self.board[row][col]

        return None

喜欢的话,请关注我!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的五子代码: ``` import tkinter as tk class Game: def __init__(self): self.board = [[0] * 15 for _ in range(15)] self.player = 1 self.game_over = False def get_winner(self, row, col): directions = [(0, 1), (1, 0), (1, 1), (-1, 1)] for d in directions: count = 1 for i in range(1, 5): r = row + d[0] * i c = col + d[1] * i if r < 0 or r >= 15 or c < 0 or c >= 15 or self.board[r][c] != self.player: break count += 1 for i in range(1, 5): r = row - d[0] * i c = col - d[1] * i if r < 0 or r >= 15 or c < 0 or c >= 15 or self.board[r][c] != self.player: break count += 1 if count >= 5: return self.player return 0 def play(self, row, col): if self.game_over: return if self.board[row][col] != 0: return self.board[row][col] = self.player winner = self.get_winner(row, col) if winner != 0: print("Player", self.player, "wins!") self.game_over = True else: self.player = 3 - self.player class Board: def __init__(self, game): self.game = game self.window = tk.Tk() self.window.title("Five in a Row") self.canvas = tk.Canvas(self.window, width=450, height=450) self.canvas.pack() self.canvas.bind("<Button-1>", self.click) for i in range(15): self.canvas.create_line(15 + i * 30, 15, 15 + i * 30, 435) self.canvas.create_line(15, 15 + i * 30, 435, 15 + i * 30) def start(self): self.window.mainloop() def draw_piece(self, row, col): x = col * 30 + 15 y = row * 30 + 15 if self.game.player == 1: self.canvas.create_oval(x - 13, y - 13, x + 13, y + 13, fill="black") else: self.canvas.create_oval(x - 13, y - 13, x + 13, y + 13, fill="white") def click(self, event): if self.game.game_over: return x = event.x y = event.y row = round((y - 15) / 30) col = round((x - 15) / 30) self.game.play(row, col) self.draw_piece(row, col) game = Game() board = Board(game) board.start() ``` 运行该代码,可以得到一个简单的五子游戏界面。玩家可以点击盘上的空位,将自己的子放在该位置。当有一方连成五子时,游戏结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值