Python 五子棋小游戏代码 - 简单易懂
以下是五子棋小游戏的Python代码:
import tkinter as tk
from tkinter import messagebox
class Gobang:
def __init__(self):
self.root = tk.Tk()
self.root.title('五子棋')
self.root.geometry('500x500')
self.canvas = tk.Canvas(self.root, bg='white', width=400, height=400)
self.canvas.pack(padx=20, pady=20)
self.canvas.bind('<Button-1>', self.play)
self.board = [[0] * 15 for _ in range(15)]
self.color = 1
self.draw_board()
self.root.mainloop()
def draw_board(self):
for i in range(15):
self.canvas.create_line(20, 20 + i * 20, 380, 20 + i * 20)
self.canvas.create_line(20 + i * 20, 20, 20 + i * 20, 380)
def play(self, event):
x, y = event.x, event.y
if x < 10 or x > 390 or y < 10 or y > 390:
return
i, j = round((y - 20) / 20), round((x - 20) / 20)
if self.board[i][j] == 0:
self.board[i][j] = self.color
if self.color == 1:
self.canvas.create_oval(20 + j * 20 - 10, 20 + i * 20 - 10,
20 + j * 20 + 10, 20 + i * 20 + 10, fill='black')
if self.check_win(i, j):
messagebox.showinfo('游戏结束', '黑方获胜!')
self.root.destroy()
else:
self.canvas.create_oval(20 + j * 20 - 10, 20 + i * 20 - 10,
20 + j * 20 + 10, 20 + i * 20 + 10, fill='white')
if self.check_win(i, j):
messagebox.showinfo('游戏结束', '白方获胜!')
self.root.destroy()
self.color = 3 - self.color
def check_win(self, i, j):
directions = [(0, 1), (1, 0), (1, 1), (-1, 1)] # 四个方向
for d in directions:
count = 1 # 连续棋子数
for k in range(1, 5):
x, y = i + k * d[0], j + k * d[1]
if x < 0 or x > 14 or y < 0 or y > 14 or self.board[x][y] != self.color:
break
count += 1
for k in range(1, 5):
x, y = i - k * d[0], j - k * d[1]
if x < 0 or x > 14 or y < 0 or y > 14 or self.board[x][y] != self.color:
break
count += 1
if count >= 5:
return True
return False
if __name__ == '__main__':
Gobang()
运行代码后会弹出一个窗口,点击窗口中的格子可以下棋,当有一方获得五个连续棋子时游戏结束。
原文地址: http://www.cveoy.top/t/topic/nIKf 著作权归作者所有。请勿转载和采集!