java 五子棋编码

原创 2018年04月17日 21:41:31

刚刚学java不久,顺手编了一个五子棋游戏,没啥智能,电脑下棋只是随机,没有引入图形库,一个很简陋的五子棋游戏,感兴趣的朋友可以看看,下面附上源码,(纯手打):

import java.util.Scanner;
import java.lang.Math;

public class WuZiQi
{
    public static boolean ValidateStr(String str)//判断输入的字符是否合法
    {
        for(int i=0;i<str.length();i++)
        {
            if(str.equals("") && (!Character.isDigit(str.charAt(i)) && str==""))
            //if(!Character.isDigit(str.charAt(i)))
            {
                System.out.println("输入数据有误,请重新输入!");
                return false;
            }
        }
        return true;
    }
    public static void pr(char[][] str)//输出棋盘上的内容
    {
        for(int i=0;i<15;i++)
        {
            for (int j = 0; j < 15; j++)
            {
                System.out.print(str[i][j] + " ");
            }
            System.out.println();
        }
    }
    public static int fun(char[][] pan,int x1,int y1,int x,int y)
    {
        if(pan[x1][y1] == pan[x][y])
        {
            return 1;
        }
        else
            return 0;
    }
    public static boolean result(char[][] pan,int x,int y)                   //判断输赢
    {
        int count=1;
        int flag=1;
        int x1=x;
        int y1=y;
        while(flag==1 && x1+1<=14)     //先向右查找
        {
            x1=x1+1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        flag=1; x1=x; y1=y;
        while(flag==1 && x1-1>=0)      //再向左查找
        {
            x1=x1-1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        if(count>=5)
            return true;

        count=1; flag=1; x1=x; y1=y;
        while(flag==1 && y1+1<=14)    //向下查找
        {
            y1=y1+1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;;
        }
        flag=1; x1=x;  y1=y;
        while(flag==1 && y1-1>=0)         //向上查找
        {
            y1=y1-1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        if(count>=5)
            return true;

        count=0; flag=1; x1=x; y1=y;
        while(flag==1 && x1-1>=0 && y1-1>=0)   //向左上查找
        {
            x1=x1-1;
            y1=y1-1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        flag=1; x1=x;  y1=y;
        while(flag==1 && x1+1<=14 && y1+1<=14)  //向右下查找
        {
            x1=x1+1;
            y1=y1+1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        if(count>=5)
            return true;

        count=0; flag=1; x1=x; y1=y;
        while(flag==1 && x1+1<=14 && y1-1>=0)  //向右上查找
        {
            x1=x1+1;
            y1=y1-1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        flag=1; x1=x;  y1=y;
        while(flag==1 && x1-1>=0 && y1+1<=14) //向左下查找
        {
            x1=x1-1;
            y1=y1+1;
            flag = fun(pan,x1,y1,x,y);
            count = (flag==1)?count+1:count;
        }
        if(count>=5)
            return true;
        else
            return false;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        String[] ch;
        int[] strArray;
        char[][] pan = new char[15][15];
        for (int i = 0; i < 15; i++)
        {
            for (int j = 0; j < 15; j++)
            {
                pan[i][j] = '+';
            }
        }
        System.out.println("本局开始!");
        for (int i = 0; i < 15; i++)
        {
            for (int j = 0; j < 15; j++)
            {
                System.out.print(pan[i][j] + " ");
            }
            System.out.println();
        }
        while(true)
        {
            int x;
            int y;
            //pan[x][y] = 1;
            System.out.println("玩家落子:");
            String str = input.nextLine();

            ch = str.split(" ");

            if(!ValidateStr(str))
            {
                continue;               //输入若不合法重新输入
            }

            strArray = new int[ch.length];
            for(int i=0;i<ch.length;i++)
            {
                strArray[i] = Integer.parseInt(ch[i]);
            }
            if(pan[strArray[0]][strArray[1]] != '+')  //有效性检验
            {System.out.println("该位置已有棋子,请重新输入!");  continue;}
            else
                pan[strArray[0]][strArray[1]]='1';
            pr(pan);
            if(result(pan,strArray[0],strArray[1]))
            {
                System.out.println("玩家获胜!");
                break;
            }


            System.out.println("电脑落子:");
            x = (int) (Math.random()*15);
            y = (int) (Math.random()*15);
            while(pan[x][y] != '+')            //有效性检验
            {
                x = (int) (Math.random()*15);
                y = (int) (Math.random()*15);
            }
            pan[x][y] = '2';
            pr(pan);
            if(result(pan,x,y))
            {
                System.out.println("电脑获胜!");
                break;
            }
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hufangzhou_hfz/article/details/79981305

Java控制台五子棋编码学习

Java控制台五子棋编码学习目录Java控制台五子棋编码学习 目录 主要经验 游戏描述 Java源代码 GobangGamejava Chessmanjava Chessboardjava主要经验 方...
  • windanchaos
  • windanchaos
  • 2016-07-07 13:50:58
  • 619

五子棋游戏源代码

偶写的一个五子棋游戏,写得不好,请多多指正。 本源代码实现的是一单机双人对战五子棋游戏 本源代码由五个java源程序文件组成,Game.java、GameFrame.java、GamePanel.ja...
  • standlww
  • standlww
  • 2008-03-25 22:51:00
  • 3403

五子棋代码详细注解

网上有很多五子棋的代码,对于新手来说,看别人的代码实在有些费劲,因为很多地方的注释都不全,此文章重点不在代码上而是在代码的分析上,现在直接上代码及其注解。          五子棋中需要用到的知识点有...
  • cuicanxingchen123456
  • cuicanxingchen123456
  • 2015-10-21 12:12:22
  • 2423

C#网络对战五子棋(c/s)源程序

  • 2015年05月27日 11:38
  • 3.88MB
  • 下载

五子棋棋盘程序加源代码

  • 2013年10月18日 10:05
  • 21KB
  • 下载

Java源码分享——单机版五子棋

初学JavaGUI编程,就写了一个小游戏–五子棋。
  • Dreamer_wjg
  • Dreamer_wjg
  • 2017-02-24 13:51:53
  • 2083

单机版五子棋【JAVA】

单机版五子棋 功能实现: 1、设计主框架,界面。 2、利用ActionListener接口实现按钮事件的监听。 3、重新开始功能的实现。 4、悔棋功能的实现。 5、退出功能的实现。 6、棋盘中棋子点...
  • lin14543
  • lin14543
  • 2016-07-10 09:10:40
  • 9766

Java联网五子棋(附源码)

上学期写的五子棋,翻出来整理下。 主要用到Socket网络编程,还模拟了网络传输协议,将各种操作请求和聊天信息通过消息头包装和区分,在服务端通过消息头来判断和解析不同的请求。 服务端将所有客户端存...
  • jianglihui0330
  • jianglihui0330
  • 2012-10-25 21:06:19
  • 1819

java实现简易五子棋

  • 2013年12月10日 16:57
  • 10KB
  • 下载

Java swing五子棋源码及实现之Java 开发图形界面程序五子棋的实现方式

今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我...
  • llqqxf
  • llqqxf
  • 2016-07-12 10:15:03
  • 3799
收藏助手
不良信息举报
您举报文章:java 五子棋编码
举报原因:
原因补充:

(最多只允许输入30个字)