Java实现五子棋游戏(控制台版)

网友投稿 231 2022-09-23


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

for(int line=0;line

// 如果此行中有元素为黑棋则number+1

if(board[row][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置为0

if(board[row][line]=="○"|| board[row][line]=="+") {

number=0;

}

}

// 每一行读取数组元素后未能分出胜负需要将number置为0

number=0;

}

}

展现第一个方法的结果

第二个方法代码

// 实现列判断黑棋子

public static void BlackLine(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 一列一列的读取数组中的元素

for(int Line=0;Line

for(int row=0;row

// 如果此列中有元素为黑棋则number+1

if(board[row][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置为0

if(board[row][Line]=="○"|| board[row][Line]=="+") {

number=0;

}

}

// 每一列读取数组元素后未能分出胜负需要将number置为0

number=0;

}

}

展现第二个方法的结果

第三个方法代码

// 实现自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法

public static void BlackTopLeftToBottomRight_Line(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候列line总是从0开始

for(int row=0;row

// 执行这个for循环的时候每一次行+1,列+1,数据元素呈现阶梯分布,阶梯逼近左下

for(int line=0,i=row;line

// 如果此阶梯中有元素为黑棋则number+1

if(board[i][line]=="●") {

number++;

}

// 当number为5的时候则黑棋一方的胜

while(number==5) {

System.out.println("黑棋方胜!");

//胜出后输出棋盘

for ( row = 0; row < board.length; row++) {

for ( line = 0; line < board[i].length; line++) {

System.out.print( board[row][line]+" ");

}

System.out.println();

}

//胜后退出系统

System.exit(0);

}

// 如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0

if(board[i][line]=="○"|| board[i][line]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

展现第三种方法的结果

第四个方法代码

// 实现自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法

public static void BlackTopLeftToBottomRight_Row(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候行row总是从0开始

for(int line=0;line

// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右上

for(int row=0,i=line;row

// 如果此阶梯中有元素为黑棋则number+1

if(board[row][i]=="●") {

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置为0

if(board[row][i]=="○"|| board[row][i]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

第四个方法结果展示

第五个方法的代码

// 实现自右上--->左下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法

public static void BlackTopRightToBottomLeft_Line(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候列line总是从最后一列开始

for(int row=0;row

// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右下

for(int line=BoardSize-1,i=row;line>=0+row;line--,i++) {

// 如果此阶梯中有元素为黑棋则number+1

if(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置为0

if(board[i][line]=="○"|| board[i][line]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=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

// 如果此阶梯中有元素为黑棋则number+1

if(board[row][j]=="●") {

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置为0

if(board[row][j]=="○"|| board[row][j]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

第六个方法结果展示

后面是白棋的判断方法的代码,与黑棋一样

// 实现行判断白棋

public static void WhiteRow(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 一行一行的读取数组中的元素

for(int row=0;row

for(int line=0;line

// 如果此行中有元素为白棋则number+1

if(board[row][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置为0

if(board[row][line]=="●"|| board[row][line]=="+") {

number=0;

}

}

// 每一行读取数组元素后未能分出胜负需要将number置为0

number=0;

}

}

// 实现列判断白棋

public static void WhiteLine(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 一列一列的读取数组中的元素

for(int line=0;line

for(int row=0;row

// 如果此列中有元素为白棋则number+1

if(board[row][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置为0

if(board[row][line]=="●"|| board[row][line]=="+") {

number=0;

}

}

// 每一列读取数组元素后未能分出胜负需要将number置为0

number=0;

}

}

// 实现自左上--->右下判断白棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法

public static void WhiteTopLeftToBottomRight_Line(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候列line总是从0开始

for(int row=0;row

// 执行这个for循环的时候每一次行+1,列+1,数据元素呈现阶梯分布,阶梯逼近左下

for(int line=0,i=row;line

// 如果此阶梯中有元素为白棋则number+1

if(board[i][line]=="○") {

number++;

}

// 当number为5的时候则白棋一方的胜

while(number==5) {

System.out.println("白棋方胜!");

//胜出后输出棋盘

for ( row = 0; row < board.length; row++) {

for ( line = 0; line < board[i].length; line++) {

System.out.print( board[row][line]+" ");

}

System.out.println();

}

//胜后退出系统

System.exit(0);

}

// 如果此阶梯中虽有五个白棋但是并不相连,不能说是黑白方胜,需将number置为0

if(board[i][line]=="●"|| board[i][line]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

// 实现自左上--->右下判断白棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法

public static void WhiteTopLeftToBottomRight_Row(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候行row总是从0开始

for(int line=0;line

// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右上

for( int row=0,i=line;row

// 如果此阶梯中有元素为白棋则number+1

if(board[row][i]=="○") {

number++;

}

// 当number为5的时候则白棋一方的胜

whjhPuxBtile(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置为0

if(board[row][i]=="●"|| board[row][i]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

// 实现自右上--->左下判断白棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法

public static void WhiteTopRightToBottomLeft_Line(int BoardSize, String[][] board) {

// 先定义一个数number,以此来计数

int number=0;

// 每当执行第二个for循环的时候列line总是从最后一列开始

for(int row=0;row

// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右下

for(int line=BoardSize-1,i=row;line>=0+row;line--,i++) {

if(board[i][line]=="○") {

// 如果此阶梯中有元素为白棋则number+1

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置为0

if(board[i][line]=="●"|| board[i][line]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=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

// 如果此阶梯中有元素为白棋则number+1

if(board[row][j]=="○") {

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置为0

if(board[row][j]=="●"|| board[row][j]=="+") {

number=0;

}

}

// 每当第二个for循环完毕后需要将number置为0

number=0;

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ISIS在IPV6中的应用
下一篇:防火墙安全区域的注意事项(关于配置防火墙安全区域)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~