python实现点击落子
时间: 2024-01-10 09:01:52 浏览: 14
实现点击落子的一个简单的方法是使用Python的GUI库,比如Tkinter。以下是一个简单的示例代码:
```python
import tkinter as tk
class Board:
def __init__(self, size):
self.size = size
self.board = [[0]*size for _ in range(size)]
self.player = 1
self.finished = False
def move(self, row, col):
if self.board[row][col] != 0 or self.finished:
return False
self.board[row][col] = self.player
self.finished = self.check_winner(row, col)
self.player = 3 - self.player
return True
def check_winner(self, row, col):
def count(i, j, di, dj):
cnt = 0
while 0 <= i < self.size and 0 <= j < self.size and self.board[i][j] == self.player:
cnt += 1
i, j = i+di, j+dj
return cnt
directions = [(0, 1), (1, 0), (1, 1), (1, -1)]
for di, dj in directions:
cnt = count(row, col, di, dj) + count(row, col, -di, -dj) - 1
if cnt >= 5:
return True
return False
class Game:
def __init__(self, size):
self.board = Board(size)
self.root = tk.Tk()
self.canvas = tk.Canvas(self.root, width=400, height=400)
self.canvas.pack()
self.canvas.bind("<Button-1>", self.on_click)
self.draw_board()
def draw_board(self):
self.canvas.delete("all")
for i in range(self.board.size):
self.canvas.create_line(30, 30+i*40, 370, 30+i*40)
self.canvas.create_line(30+i*40, 30, 30+i*40, 370)
for i in range(self.board.size):
for j in range(self.board.size):
if self.board.board[i][j] == 1:
self.canvas.create_oval(30+j*40-18, 30+i*40-18, 30+j*40+18, 30+i*40+18, fill="black")
elif self.board.board[i][j] == 2:
self.canvas.create_oval(30+j*40-18, 30+i*40-18, 30+j*40+18, 30+i*40+18, fill="white")
def on_click(self, event):
if self.board.finished:
return
row, col = (event.y-30)//40, (event.x-30)//40
if self.board.move(row, col):
self.draw_board()
if self.board.finished:
winner = "Black" if self.board.player == 2 else "White"
self.canvas.create_text(200, 200, text="Game Over. {} wins!".format(winner), fill="red", font=("Arial", 20))
def run(self):
self.root.mainloop()
if __name__ == "__main__":
game = Game(10)
game.run()
```
该程序使用Tkinter实现了一个简单的五子棋游戏,可以通过点击屏幕上的位置来落子。游戏的状态保存在Board类中,通过Canvas实现了图形界面的绘制。可以根据需要修改代码来实现自己的游戏规则和界面。