简单的控制台五子小游戏棋程序(Java)

简介: 代码中注释很详细,不多做解释,直接上代码: /** * 简单的控制台五子棋程序 */public class Chess{ private static int BOARD_SIZE=30;//初始化数组长度,超过抛越界异常 //棋盘 private static char[][] board=new char[BOARD_SIZE][BOARD_SIZE

代码中注释很详细,不多做解释,直接上代码:

/**
 * 简单的控制台五子棋程序
 */
public class Chess{
    private static int BOARD_SIZE=30;//初始化数组长度,超过抛越界异常
    //棋盘
    private static char[][] board=new char[BOARD_SIZE][BOARD_SIZE];
    //已下棋子数目
    private static int cnt;
    //分别代表玩家1,2的棋子
    private static char[] qizi={'$','@'};
    //八个方向检索有没有连着的
    private static int[] dx={-1,0,-1,-1,1,1,0,1};
    private static int[] dy={0,-1,-1,1,-1,1,1,0};
    
  //初始化
    static void init(){
        cnt=0;
        for(int i=1;i<=15;i++)
            for(int j=1;j<=15;j++)
                board[i][j]='+';
    }
     
    //输出棋盘
    static void printBoard(){
        int i,j;
        for(i=1;i<=15;i++){
            for(j=1;j<=15;j++){
                 
                System.out.print(board[i][j]+" ");
            }
            System.out.println();
        }
    }
    //输入检测,输入的坐标处不是+的为不合法输入,即不能在已落子的地方落子
    private static int CheckInput(int x,int y){
         
        if(board[x][y]!='+'){
            return 0;
        }
        if(x<1||x>15||y<1||y>15){
            return 0;
        }
        return 1;
    }
     
        //边界检测
    private static int Check(int x,int y){
        if(x>15||x<1||y>15||y<1)
            return 0;
        return 1;
    }
    //检测玩家是否获胜,需要传入玩家编号,及当前落点坐标
    private static int checkWinner(int num,int x,int y){
        if(cnt==15*15)
            return 1;
        //横竖 左斜 右斜 四个方向判断是否有五个棋子连在一起
        for(int i=0;i<4;i++){
            int sum=1;
            int xx=x+dx[i];
            int yy=y+dy[i];
            while(board[xx][yy]==qizi[num]&&Check(xx,yy)==1){
                sum++;
                xx=xx+dx[i];
                yy=yy+dy[i];
            }
            xx=x+dx[7-i];
            yy=y+dy[7-i];
            while(board[xx][yy]==qizi[num]&&Check(xx,yy)==1){
                sum++;
                xx=xx+dx[7-i];
                yy=yy+dy[7-i];
            }
            if(sum>=5)
                return 1;
        }
        return 0;
    }

     
    @SuppressWarnings("resource")
    public static int run(){
        int x,y;
        init();
        //当前棋手编号,默认0号先下
        int num=0;
        while(true){
            printBoard();
            System.out.print(num+1+"号选手输入您的落子坐标,应以x y形式: ");
            Scanner sc =new Scanner(System.in);
            while(true){
                x=sc.nextInt();
                y=sc.nextInt();
                if(CheckInput(x,y)==1)
                    break;
                System.out.print("输入坐标不合法,请重新输入: ");
            }
            board[x][y]=qizi[num];
            if(checkWinner(num,x,y)==1){
                return num+1;
            }
            num=1-num;
        }
    }
    public static void main(String[] args){
	System.out.println("请在坐标为15内的范围落子:");
        int number=run();
        System.out.println(number+"号胜利");
    }
}

因为数组初始化为30,所以落子坐标超过三十会报下标越界异常,棋谱初始化输出为坐标15,15.所以落子坐标超过15就为不合法输入,提示重新输入。

目录
相关文章
|
11月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
182 2
利用java8 的 CompletableFuture 优化 Flink 程序
|
12月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
6月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
6月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
6月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
6月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
233 0
|
8月前
|
传感器 安全 算法
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。
|
8月前
|
IDE Java 开发工具
消防救援支队消防员单兵装备智能养护舱点击驱动java版程序(一)
智能消防作战服架通过电机驱动系统提升消防员作业效率和安全性。本文介绍基于Java的电机驱动程序开发,涵盖硬件准备、软件环境搭建及驱动程序实现。重点包括串口通信配置、电机控制类设计与控制逻辑实现,确保电机高效稳定运行。通过正确配置通信协议和串口参数,并添加异常处理机制,保障系统的安全性和可靠性。
|
6月前
|
Java 开发工具
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
|
8月前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
168 6

热门文章

最新文章