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|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/07f8b1d3897f41eab8cfc340b7f0219f.png)
文章图片
第二个方法代码
// 实现列判断黑棋子
public static void BlackLine(int BoardSize, String[][] board) {
//先定义一个数number,以此来计数
int number=0;
//一列一列的读取数组中的元素
for(int Line=0;
Line
展现第二个方法的结果
![java|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/d135021c01694f199adec2470b3dc181.png)
文章图片
第三个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法
public static void BlackTopLeftToBottomRight_Line(int BoardSize, String[][] board) {
//先定义一个数number,以此来计数
int number=0;
//每当执行第二个for循环的时候列line总是从0开始
for(int row=0;
row
展现第三种方法的结果
![java|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/b69392ea53434b4b89156e44e4971017.png)
文章图片
第四个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法
public static void BlackTopLeftToBottomRight_Row(int BoardSize, String[][] board) {
//先定义一个数number,以此来计数
int number=0;
//每当执行第二个for循环的时候行row总是从0开始
for(int line=0;
line
第四个方法结果展示
![java|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/5b1263f3f08a4910a535a518cff10f80.png)
文章图片
【java|Java五子棋游戏——控制台版】
第五个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个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+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;
}
}
第五个方法结果展示
![java|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/2feba74e1fc2487ba43ed0b0c7f15e1e.png)
文章图片
第六个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个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
第六个方法结果展示
![java|Java五子棋游戏——控制台版](https://img.it610.com/image/info8/8a8114032be14d268081504fdc7e7e8e.png)
文章图片
后面是白棋的判断方法的代码,与黑棋一样
// 实现行判断白棋
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+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
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机