开发者社区> 一条coding> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: Java编程:基于socket实现局域网双人联机对战五子棋
+关注继续查看

客户端:

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.如图

1_120813014050_1.jpg

判断输赢:

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;
    }
    }
 
 
 

成果展示:

20180811134517822.png

githab源码地址:

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java课程大作业设计:实现联网对战、实时聊天、多线程编程的五子棋项目
本项目是笔者和同学大二下Java课的时候的课程设计项目,该五子棋游戏的客户端可以实现联网对战、实时聊天、自定义昵称、对在线玩家并发出对战邀请、悔棋、撤回聊天消息、逃跑等多种功能,而服务端可以看到在线玩家列表、配对玩家列表、玩家实时上线下线等功能。总的来说,功能比较齐全,代码中也有详细注解思路,是非常不错的新手入门项目。
0 0
Java实现五子棋对战小游戏
Java实现五子棋对战小游戏
0 0
Java小程序——简单五子棋(人机对战)
于某些原因,这里我给出的AI算法算是比较简单的,所以导致了电脑其实并没有很强,甚至你玩的多了还可以发现电脑的“致命缺点”,由于我只是借助这个项目来做一个java的入门练习,且我还在读研,所以本人并不准备对AI的算法进行改进。
0 0
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
0 0
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
0 0
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
0 0
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
0 0
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
0 0
java实现spring boot项目启动时,重启Windows进程
java实现spring boot项目启动时,重启Windows进程
0 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA 应用排查全景图
立即下载
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载