Java实现五子棋游戏(控制台版)
本项目为大家分享了Java实现五子棋游戏的具体代码,供大家参考,具体内容如下
该项目为Java编程语言编写的五子棋游戏(控制台版),用到二维数组、for循环、if语句、while()语句、Scanner Until包,此项目主要是对数组的使用。该项目的功能有落子、输出棋盘、判断输赢。
代码条:
package edu.qizi.gam; import java.util.Scanner; public class GobangTest { public static void main(String[] args) {int BoardSize = 20; // 棋盘的实现String[][] board = new String[BoardSize][BoardSize]; for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[i].length; j++) {board[i][j] = "+"; }}//输出棋盘PrintBoard(board); while(true) {//黑棋落子System.out.println("黑棋落子"); BlackMoveLater(board); //每下一步黑棋要输出一下棋盘PrintBoard(board); //行判断黑棋BlackRow(BoardSize, board); //列判断黑棋BlackLine(BoardSize, board); //自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法BlackTopLeftToBottomRight_Line(BoardSize, board); //自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法BlackTopLeftToBottomRight_Row(BoardSize, board); //自右上--->左下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法BlackTopRightToBottomLeft_Line(BoardSize, board); //自右上--->左下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法BlackTopRightToBottomLeft_Row(BoardSize, board); //白棋落子System.out.println("白棋落子"); WhiteMoveLater(board); //每下一步白棋要输出一下棋盘PrintBoard(board); //行判断白棋WhiteRow(BoardSize, board); //列判断白棋WhiteLine(BoardSize, board); //自左上--->右下判断白棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法WhiteTopLeftToBottomRight_Line(BoardSize, board); //自左上--->右下判断白棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法WhiteTopLeftToBottomRight_Row(BoardSize, board); //自右上--->左下判断白棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法WhiteTopRightToBottomLeft_Line(BoardSize, board); //自右上--->左下判断白棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法WhiteTopRightToBottomLeft_Row(BoardSize, board); } }
下面是实现的方法
//实现棋盘输出的方法 public static void PrintBoard(String[][] board) {for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[i].length; j++) {System.out.print( board[i][j]+" "); }System.out.println(); }}
实现黑棋落子
// 实现黑棋落子的方法 public static void BlackMoveLater(String[][] board) {while(true) {Scanner sc1=new Scanner(System.in); System.out.println("请输入黑棋落子的横坐标[1---20]:"); int BlackBoard_x=sc1.nextInt(); //判断横坐标是否数组越界if(BlackBoard_x<1 || BlackBoard_x>20) {System.out.println("你输入的坐标范围有误 ,横坐标取1到20,请正确输入:\n"); continue; }Scanner sc2=new Scanner(System.in); System.out.println("请输入黑棋落子的纵坐标[1---20]:"); int BlackBoard_y=sc2.nextInt(); //判断纵坐标是否数组越界if(BlackBoard_y<1 || BlackBoard_y>20) {System.out.println("你输入的坐标范围有误,纵坐标取1到20,请正确输入:\n"); continue; }//判断此位置是否可以落入棋子if(board[BlackBoard_x-1][BlackBoard_y-1]=="○") {System.out.println("此位置已经有棋子了,请你将棋子下到空位置"); continue; }else {board[BlackBoard_x-1][BlackBoard_y-1]="●"; break; }} }
实现白棋落子
// 实现白棋落子的方法 public static void WhiteMoveLater(String[][] board) {while(true) {Scanner sc1=new Scanner(System.in); System.out.println("请输入白棋落子的横坐标[1---20]:"); int WhiteBoard_x=sc1.nextInt(); //判断横坐标是否数组越界if(WhiteBoard_x<1 || WhiteBoard_x>20) {System.out.println("你输入的坐标范围有误 ,横坐标取1到20,请正确输入:\n"); continue; }Scanner sc2=new Scanner(System.in); System.out.println("请输入白棋落子的纵坐标[1---20]:"); int WhiteBoard_y=sc2.nextInt(); //判断纵坐标是否数组越界if(WhiteBoard_y<1 || WhiteBoard_y>20) {System.out.println("你输入的坐标范围有误,纵坐标取1到20,请正确输入:\n"); continue; }//判断此位置是否可以落入棋子if(board[WhiteBoard_x-1][WhiteBoard_y-1]=="●") {System.out.println("此位置已经有棋子了,请你将棋子下到空位置\n"); continue; }else {board[WhiteBoard_x-1][WhiteBoard_y-1]="○"; break; }} }
判定输赢以黑棋为例(有六个方法),下面一一列举
// 实现行判断黑棋子 public static void BlackRow(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //一行一行的读取数组中的元素for(int row=0; row
展现第一个方法的结果
文章图片
【Java实现五子棋游戏(控制台版)】第二个方法代码
// 实现列判断黑棋子 public static void BlackLine(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //一列一列的读取数组中的元素for(int Line=0; Line
展现第二个方法的结果
文章图片
第三个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法 public static void BlackTopLeftToBottomRight_Line(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候列line总是从0开始for(int row=0; row
展现第三种方法的结果
文章图片
第四个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法 public static void BlackTopLeftToBottomRight_Row(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候行row总是从0开始for(int line=0; line
第四个方法结果展示
文章图片
第五个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法 public static void BlackTopRightToBottomLeft_Line(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候列line总是从最后一列开始for(int row=0; row=0+row; line--,i++) {//如果此阶梯中有元素为黑棋则number+1if(board[i][line]=="●") {number++; }//当number为5的时候则黑棋一方的胜while(number==5) {System.out.println("黑棋方胜!"); //胜出后输出棋盘for ( row = 0; row < board.length; row++) {for ( line = 0; line < board[row].length; line++) {System.out.print( board[row][line]+" "); }System.out.println(); }//胜后退出系统System.exit(0); }//如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0if(board[i][line]=="○"|| board[i][line]=="+") {number=0; }}//每当第二个for循环完毕后需要将number置为0number=0; } }
第五个方法结果展示
文章图片
第六个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法 public static void BlackTopRightToBottomLeft_Row(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候行row总是从最后一列开始for(int line=BoardSize-1; line>=0; line--) {//执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近左上for(int row=0,j=line; row
第六个方法结果展示
文章图片
后面是白棋的判断方法的代码,与黑棋一样
// 实现行判断白棋 public static void WhiteRow(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //一行一行的读取数组中的元素for(int row=0; row右下判断白棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法 public static void WhiteTopLeftToBottomRight_Line(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候列line总是从0开始for(int row=0; row 右下判断白棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法 public static void WhiteTopLeftToBottomRight_Row(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候行row总是从0开始for(int line=0; line 左下判断白棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法 public static void WhiteTopRightToBottomLeft_Line(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候列line总是从最后一列开始for(int row=0; row =0+row; line--,i++) {if(board[i][line]=="○") {//如果此阶梯中有元素为白棋则number+1number++; }//当number为5的时候则白棋一方的胜while(number==5) {System.out.println("白棋方胜!"); //胜出后输出棋盘for ( row = 0; row < board.length; row++) {for ( line = 0; line < board[row].length; line++) {System.out.print( board[row][line]+" "); }System.out.println(); }//胜后退出系统System.exit(0); }//如果此阶梯中虽有五个白棋但是并不相连,不能说是白方胜,需将number置为0if(board[i][line]=="●"|| board[i][line]=="+") {number=0; }}//每当第二个for循环完毕后需要将number置为0number=0; } }// 实现自右上--->左下判断白棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法 public static void WhiteTopRightToBottomLeft_Row(int BoardSize, String[][] board) {//先定义一个数number,以此来计数int number=0; //每当执行第二个for循环的时候行row总是从最后一列开始for(int line=BoardSize-1; line>=0; line--) {//执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近左上for(int row=0,j=line; row
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 事件代理
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树