客户端:

package fivechess;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class MyClient {public static final String mip="10.25.50.131";public static boolean gameover=true;public static void main(String[] args) throws IOException {ChessBroad chessBroad=new ChessBroad();Socket socket=new Socket(mip,MyServer.mdk);OutputStream ou=socket.getOutputStream();InputStream in =socket.getInputStream();Scanner scanner=new Scanner(System.in);
while(gameover){while(true){if(ChessBroad.broad[0][0]==null){ChessBroad.init();ChessBroad.draw();}System.out.println("等待对方落子");byte[] buf=new byte[1024];int len=in.read(buf);String creceive=new String(buf,0,len);System.out.println("获得黑棋坐标:"+creceive);ChessBroad.iswhite=false;MyGame.list.add(creceive);String []ss=creceive.split(",");int x=new Integer(ss[0]);int y=new Integer(ss[1]);ChessBroad.broad[x][y]=ChessBroad.iswhite ? "○":"●";ChessBroad.draw();if(!MyGame.isover(x, y)){break;}System.out.println("请输入坐标:x,y");String line= scanner.next();while(true){if(!MyGame.list.contains(line)){MyGame.list.add(line);break;}else{System.out.println("已存在旗子");line=scanner.next();}}ou.write(line.getBytes());MyGame.list.add(line);ChessBroad.iswhite=true;ss=line.split(",");x=new Integer(ss[0]);y=new Integer(ss[1]);ChessBroad.broad[x][y]=ChessBroad.iswhite ? "○":"●";ChessBroad.draw();gameover=MyGame.isover(x, y);}System.out.println("请选择:1:重新开始,2:退出");int op=scanner.nextInt();if (op==1){gameover=true;}else if(op==2){System.exit(0);}}}
}

服务器:

package fivechess;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;public class MyServer {public ArrayList list=new ArrayList();public static final int  mdk=7790;public static boolean gameover=true;public static void main(String[] args) throws IOException  {ChessBroad chessBroad=new ChessBroad();ServerSocket server=new ServerSocket(mdk);Socket client= server.accept();System.out.println("连接成功");InetAddress address=client.getInetAddress();System.out.println(address.getHostAddress());InputStream in= client.getInputStream();OutputStream ou=client.getOutputStream();Scanner sc=new Scanner(System.in);
while(gameover){while(true){if(ChessBroad.broad[0][0]==null){ChessBroad.init();ChessBroad.draw();}System.out.println("请输入坐标:x,y");String send=sc.next();while(true){if(!MyGame.list.contains(send)){MyGame.list.add(send);break;}else{System.out.println("已存在旗子");send=sc.next();}}ou.write(send.getBytes());MyGame.list.add(send);ChessBroad.iswhite=false;String []ss=send.split(",");int x=new Integer(ss[0]);int y=new Integer(ss[1]);ChessBroad.broad[x][y]=ChessBroad.iswhite ? "○":"●";System.out.println(chessBroad.iswhite);ChessBroad.draw();if(!MyGame.isover(x, y)){break;}System.out.println("等待对方落子");byte []buf=new byte[1024];int len =in.read(buf);String receive=new String(buf,0,len);System.out.println("白棋坐标:"+receive);ChessBroad.iswhite=true;MyGame.list.add(receive);ss=receive.split(",");x=new Integer(ss[0]);y=new Integer(ss[1]);ChessBroad.broad[x][y]=ChessBroad.iswhite ? "○":"●";ChessBroad.draw();gameover=MyGame.isover(x, y);}
System.out.println("请选择:1:重新开始,2:退出");int op=scanner.nextInt();if (op==1){gameover=true;}else if(op==2){System.exit(0);}}  }
}

棋盘:

package fivechess;public class ChessBroad {public static boolean iswhite = true;public static String[][] broad = new String[15][15];private static final int mlineNum = 15;public static void init() {for (int i = 0; i < mlineNum; i++) {for (int j = 0; j < mlineNum; j++) {if (i == 0 && j == 0) {broad[i][j] = "┏";} else if (i == 0 && j > 0 && j < 14) {broad[i][j] = "┳";} else if (j < 14 && j > 0 && i == 14) {broad[i][j] = "┻";} else if (i == 0 && j == 14) {broad[i][j] = "┓";} else if (i > 0 && i < 14 && j == 0) {broad[i][j] = "┣";} else if (i > 0 && i < 14 && j == 14) {broad[i][j] = "┫";} else if (j == 0 && i == 14) {broad[i][j] = "┗";} else if (j == 14 && i == 14) {broad[i][j] = "┛";} else {broad[i][j] = "╋";}}}}public static void draw () {for (int i = 0; i < broad.length; i++) {for (int j = 0; j < broad.length; j++) {System.out.print(broad[i][j]);}System.out.println();}}}

附:特殊符号打法:

1:软键盘:特殊符号:制表符

2.如图

判断输赢:

package fivechess;import java.util.ArrayList;public class MyGame {public static ArrayList list=new ArrayList();public static boolean isover(int x,int y){int i = x;int j = y;int count = 0;//判断横向向左是否五连for (j = y; j >= 0 ; j--) {if (list.contains(i+","+j)) {count++;}else {break;}}//判断横向向右是否五连for (j = y; j <= 14 ; j++) {if (list.contains(i+","+j)) {count++;}else {break;}}count--;if (count >= 5) {System.out.println( ChessBroad.iswhite?"白":"黑"+ "棋胜!游戏结束!!!");return false;}//判断纵向向上是否五连i = x;j = y;count = 0;for (i = x; i >= 0 ; i--) {if (list.contains(i+","+j)) {count++;}else {break;}}//判断纵向向下是否五连for (i = x; i <= 14 ; i++) {if (list.contains(i+","+j)) {count++;}else {break;}}count--;if (count >= 5) {System.out.println( ChessBroad.iswhite?"白":"黑"+ "棋胜!游戏结束!!!");return false;}//判断左上是否五连count = 0;for (i = x,j = y; i >= 0 && j >=0 ; i--,j--) {if (list.contains(i+","+j)) {count++;}else {break;}}//判断右下是否五连for (i = x,j = y; i < 15 && j < 15 ; i++,j++) {if (list.contains(i+","+j)) {count++;}else {break;}}count--;if (count >= 5) {System.out.println( ChessBroad.iswhite?"白":"黑"+ "棋胜!游戏结束!!!");return false;}//判断左下是否五连count = 0;for (i = x,j = y; i < 15 && j >=0 ; i++,j--) {if (list.contains(i+","+j)) {count++;}else {break;}}//判断右上是否五连for (i = x,j = y; i >= 0 && j < 15 ; i--,j++) {if (list.contains(i+","+j)) {count++;}else {break;}}count--;if (count >= 5) {System.out.println(ChessBroad.iswhite?"白":"黑"+ "棋胜!游戏结束!!!");return false;}return true;}}

成果展示:

githab源码地址:

https://github.com/cainiaolibiao/inspiration01/tree/master/FiveChess

Java编程:基于socket实现局域网双人联机对战五子棋相关推荐

  1. socket网络编程——基于socket通信实现对客户端与服务器间的文件互传

    客户端与服务器间的文件互传 基于socket的文件数据互传,将文件中所有的字符一一通过buf进行传递,为了更好地判断文件的 结束,通过添加文件结束标识符"#",当接收端接收到该字符 ...

  2. 全套源码丨超实用的双人联机对战游戏开发分享,拒绝踩坑!

    在手游市场高度同质化的趋势下,随着各家手机厂商纷纷布局智慧大屏.平板.PC 等不同形态的设备,强调系统与生态侧的场景协同就成为了发展刚需,多终端协同游戏针对游戏体验本身,带来玩法上的更多可能性. Co ...

  3. java socket编程客户端_Java Socket编程 - 基于Socket实现HTTP下载客户端

    没有借助任何第三方库,完全基于JAVA Socket实现一个最小化的HTTP文件下载客 户端.完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送 如何从Soc ...

  4. java socket 实现 http_Java Socket编程 - 基于Socket实现HTTP下载客户端

    没有借助任何第三方库,完全基于JAVA Socket实现一个最小化的HTTP文件下载客 户端.完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送 如何从Soc ...

  5. 【Java】基于Socket的C/S聊天程序

    这次又是啥 一个很久以前写的能够支持C/S模式聊天的Demo,利用Java的Socket写的. 只能聊一句就下线,挺low的. 服务器端程序Server import java.io.Buffered ...

  6. Java实现基于Socket的负载均衡代理服务器(含六种负载均衡算法)

    目录 前言 一.常见负载均衡算法 1.完全轮询算法 2.加权轮询算法 3.完全随机算法 4.加权随机算法 5.余数Hash算法 6.一致性Hash算法 二.代码实现 1.项目结构 2.代码实现 总结 ...

  7. 学习笔记(05):Python网络编程并发编程-基于socket实现简单套接字通信

    立即学习:https://edu.csdn.net/course/play/24458/296234?utm_source=blogtoedu 1.服务器端 #以打电话通讯为例子进行说明 #导入相应的 ...

  8. 泡泡堂联机对战-Java网络编程

    Java大作业要求实现游戏能够双人联机对战,在初学了网络编程后, 采用传送键值的方法,实现了游戏画面的基本同步. 那总的来说就是要写一个客户端,一个服务器端,因为要实现双人对战,所以服务器负责协调两个 ...

  9. java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...

    展开全部 一.实验题目 五子棋游戏e69da5e6ba9062616964757a686964616f31333365633835. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策 ...

最新文章

  1. 单分子实时测序技术的原理与应用
  2. 如何查看和停止Linux启动的服务
  3. IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架
  4. 《Two Dozen Short Lessons in Haskell》学习(十三)迭代及重复的常规模式
  5. 好好学python · 你真的会列表吗(列表推导式质检员)
  6. 定时器初值的计算方法
  7. itextsharp php,C#_C#使用iTextSharp设置PDF所有页面背景图功能实例,本文实例讲述了C#使用iTextSharp - phpStudy...
  8. 学python还是不会编程_你真的不学Python吗?学习Python的四大理由!
  9. 前端 html border-right: 1px solid red;
  10. 给我的宏基上网本用U盘装XP系统
  11. 【Android 修炼手册】常用技术篇 -- Android 插件化解析
  12. python使用opencv查找轮廓_Python+opencv学习记录20:轮廓发现,Pythonopencv
  13. VHDL学习之TEXTIO在仿真中的应用
  14. android实操--练习2
  15. Java程序员实现完美代码的十大要素
  16. 面试题之SpringMVC整体工作流程
  17. 15个基本不定积分公式和分类基本积分表
  18. CSS font-family 属性值大全
  19. stm32之蓝牙模块HC-05使用
  20. Scaling SPADE to “Big Provenance”(论文阅读)

热门文章

  1. oracle 中的递归查询
  2. Ubuntu 永久修改DNS
  3. 如何预防钓鱼邮件?S/MIME邮件证书来支招
  4. 电子邮件营销实例---粽子
  5. Ubuntu 18.04 2080ti 安装显卡驱动
  6. 移动端环境搭建--2
  7. 国务院智囊建议全面放开二胎:越晚越被动
  8. 仿照京东导航条html+css
  9. PS关于打开图片或者直接拖入图片结果显示程序错误
  10. 自媒体人都在用的免费音效素材网站