前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android基于TCP的五子棋双人对战实现

Android基于TCP的五子棋双人对战实现

作者头像
张风捷特烈
发布2018-12-06 16:53:00
1.3K0
发布2018-12-06 16:53:00
举报
文章被收录于专栏:Android知识点总结

很久以前在慕课网看过鸿洋的五子棋实现的视频,由于是教学,功能比较简单。 然后我基于此拓展了一些功能,比如音效、自定义网格数,选择图片设置背景、截图、悔棋等。 最想做的当然是联网对战啦,当时实力不济,只好暂放,现在回来看看,感觉可以做。 核心是在每次绘制时将坐标点传给服务端,然后服务端再将数据发送给两个手机,在视图上显示。 随便有一个手机即作服务端,也作客户端。其中坐标点的字符化,以及字符串解析成坐标点需要小小设计一下。


零、说明
代码语言:javascript
复制
本文着重于介绍如何基于TCP的Socket实现两个手机间的数据交互以及通过文件记录点位
五子棋的具体实现比较基础,就不在这贴了,只说明一下重要的方法接口,问尾附上github源码地址,可自行查看

本文分为三个步骤,循序渐进:
一、将坐标字符化存储在SD卡里,每次落子都对文件数据进行更新
二、为方便演示,将服务端搭载java的控制台,每次落子都对服务端数据进行更新
三、将服务端移植到手机客户端,实现双端。
五子棋的接口(public)方法
代码语言:javascript
复制
start();//重新开局
backStep();//悔棋

getWhites()//获取白子集合
getBlacks()//获取黑子集合

//根据点位来设置棋盘
public void setPoints(ArrayList<Point> whites, ArrayList<Point> blacks)

结束回调接口:OnGameOverListener :void gameOver(boolean isWhiteWin)
绘制回调接口:OnDrawListener:void drawing(boolean isWhite)
一、将坐标字符化存储在SD卡
1.坐标字符化:

以左上角为(0,0)点,将ArrayList<Point>以x1,y1-x2,y2-...的形式变为字符串

代码语言:javascript
复制
public class ParseUtils {
    /**
     * 将黑棋和白棋的数据写入文件:格式x1,y1-x2,y2
     *
     * @param pos 棋坐标列表
     */
    public static String point2String(List<Point> pos) {
        //白棋字落点符串
        StringBuilder sbPos = new StringBuilder();

        for (Point p : pos) {
            sbPos.append(p.x).append(",").append(p.y).append("-");
        }
        return sbPos.toString();
    }
}
2.OnDrawListener监听方法下:写入到文件
代码语言:javascript
复制
//配置信息
public class CfgCons {
    public final static String SAVE_WHITE_PATH = "五子棋/数据保存/白棋.txt";
    public static final String SAVE_BLACK_PATH = "五子棋/数据保存/黑棋.txt";
}
代码语言:javascript
复制
 /**
  * 将黑棋和白棋的数据写入文件
  *
  * @param whites 白棋坐标列表
  * @param blacks 黑棋坐标列表
  */
 public void savePoint2File(List<Point> whites, List<Point> blacks) {
     String whiteStr = ParseUtils.point2String(whites);
     String blackStr = ParseUtils.point2String(blacks);
     //写入到SD卡中的封装函数(自行处理)
     FileHelper.get().writeFile2SD(CfgCons.SAVE_WHITE_PATH, whiteStr);
     FileHelper.get().writeFile2SD(CfgCons.SAVE_BLACK_PATH, blackStr);
 }

数据本地化.png

3.解析数据回显
代码语言:javascript
复制
/**
 * 从字符串解析出坐标点
 *
 * @param pointStr 坐标字符串
 */
public static ArrayList<Point> parseData(String pointStr) {
    ArrayList<Point> points;
    if (pointStr != null) {
        points = new ArrayList<>();
        String[] strings = pointStr.split("-");
        for (String s : strings) {
            if (s.split(",").length >= 2) {
                int x = Integer.parseInt(s.split(",")[0].trim());
                int y = Integer.parseInt(s.split(",")[1].trim());
                points.add(new Point(x, y));
            }
        }
        return points;
    }
    return null;
}
4.回显:设置与刷新

在进入是可以看一下是否有数据,有就回显,这样及时销毁Activity也不用担心

代码语言:javascript
复制
public void updateView(ArrayList<Point> white, ArrayList<Point> black) {
    mIWuzi.setPoints(white, black);
    mIWuzi.invalidate();
}

二、服务端的搭建:

经过第一步骤,应该已经清楚如何处理数据,这也为后面打下了理论基础。....待续

代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.10.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、说明
    • 五子棋的接口(public)方法
    • 一、将坐标字符化存储在SD卡
      • 1.坐标字符化:
        • 2.OnDrawListener监听方法下:写入到文件
          • 3.解析数据回显
            • 4.回显:设置与刷新
            • 二、服务端的搭建:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档