Python实现双人五子棋对局

Miles
Miles
发布时间:2026-10-12 | 4人浏览过
原创

本文展示了如何利用Python的socket模块与wxPython GUI框架搭建一个支持局域网内实时对战的双人五子棋应用。通过TCP协议传递落子坐标,分别实现了服务器端监听与客户端连接流程,配套附带的完整源码可直接用于学习或二次开发。

环境准备

运行此项目需要已安装Python 3.x的开发环境,并通过包管理器安装以下库:

  • pip install wxPython 用于创建图形界面
  • pip install Pillow 处理图像资源

确保工作目录下放置黑白两色的PNG图片文件(命名为黑.png与白.png),供双方玩家使用。

五子棋游戏运行窗口示意图
图1:五子棋对局的主界面布局预览

服务器端实现

作为主机的一方需先启动服务端,等待另一台机器加入对局。核心逻辑如下:

第1步:绑定端口与监听

初始化socket对象并监听本地8888端口,允许最多5个排队连接请求。

第2步:接收客户端握手

调用s.accept()阻塞直到有新客户端连入,成功后进入主循环读取对方下发的落子信息。

第3步:刷新远程落子位置

解析来自网络的x,y字符串组合,将预分配的静态位图控件移至对应网格坐标处。

import socket
import wx
import threading
from PIL import Image

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Cell = 40

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, size=(600, 600), title="五子棋:服务器")
        self.Center()
        self.panel = wx.Panel(parent=self)
        self.panel.Bind(wx.EVT_PAINT, self.PaintBackground)
        self.panel.Bind(wx.EVT_LEFT_DOWN, self.GoChess)
        self.picture = [wx.Bitmap("黑.png"), wx.Bitmap("白.png")]
        self.map = [[" "]*15 for _ in range(15)]
        self.IsGoGame = True
        self.StartGame()
    # ... 其余代码见完整示例文件 ... 

客户端构建方法

次席参与者扮演client角色,负责主动发起链路建立请求。

第1步:连接到指定IP与端口

使用死循环不断尝试访问127.0.0.1:8888直至成功退出重试状态。

第2步:注册并接收反馈消息流

一旦连接完毕便转入后台线程持续侦听服务端发来的坐标变动信号以更新画面布局。

第3步:发送己方决策结果

每当轮到自己行棋时需计算鼠标点击落在哪个交叉点上并向远端广播一次动作指令。

import socket
import wx
import threading
from PIL import Image

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Cell = 40

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, size=(600, 600), title="五子棋:客户端")
        self.Center()
        self.panel = wx.Panel(parent=self)
        self.panel.Bind(wx.EVT_PAINT, self.PaintBackground)
        self.panel.Bind(wx.EVT_LEFT_DOWN, self.GoChess)
        self.picture = [wx.Bitmap("白.png"), wx.Bitmap("黑.png")]
        self.map = [[" "]*15 for _ in range(15)]
        self.IsGoGame = False
        self.StartGame()
    # ... 其余代码见完整示例文件 ... 
黑白两种颜色圆形棋子样式展示
图2:黑白两种颜色圆形棋子样式展示

胜负判定原理

每次执行完落子命令后都会触发一次棋盘扫描程序遍历所有可能的连续五条相同符号序列包括横向纵向以及两条斜向轴线上的连通区间范围来判断当前局势是否已经达到终止标准。

测试验证指南

先在终端中单独跑一遍server脚本看到控制台打印出服务就绪提示后再开另一个命令行窗口launch client端就能顺利完成对接操作过程。如果出现断联情况请检查防火墙规则是否放行该端口区域。

补充说明事项

上述样例仅作基础教学用途尚未加入防作弊校验层诸如禁止恶意发包拦截中间人攻击防护等功能在实际商业场景落地前还需进一步加固安全性保障体系设计思路仅供参考不具备即插即用能力。

以上就是Python实现双人五子棋对局的详细内容,更多关于Python网络编程的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表