控制台实现五子棋游戏,供大家参考,具体内容如下
- 控制台打印棋盘
- 编写两人对弈的五子棋游戏,游戏规则:黑白双方有一方首先实现五子连续,则获胜,游戏结束。
代码:
import java.util.Scanner; public class Wuziqi { //自定义二维数组来描述棋盘,默认初始值为0 int[][] chessBoard = new int[16][16]; //自定义成员方法来绘制棋盘 void paint(){ //1.先绘制棋盘中第一行的坐标信息,也就是列坐标信息 for (int i = 0; i < 17; i++) { if( 0 == i){ System.out.println(" "); }else { //按照16进制打印i-1的数值 System.out.printf("%x " , i - 1); } } System.out.println(); //2.绘制棋盘中除了第一行之外的其他部分以及行坐标信息 for (int i = 0; i < 16; i++) { //用于打印行坐标信息 System.out.printf("%x ", i); for (int j = 0; j < 16; j++) { //刚开始棋盘中所有内容都是+ , 因此直接打印 if (0 == chessBoard[i][j]){ System.out.print("+ "); } else if (1 == chessBoard[i][j]){ System.out.print("● "); }else { System.out.print("○ "); } } //打印完一行的所有内容之后进行换行 System.out.println(); } } //自定义成员方法来提示黑方和白方分别下棋 void play(){ //定义标志位来进行黑方和白方的切换,true代表黑方,false代表白方 boolean flag = true; //不断地分别提示黑方和白方下棋 while(true){ System.out.println("请" + (flag ? "黑方" : "白方") + "输入落子坐标(x,y):"); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int y = sc.nextInt(); //根据用户输入的坐标来调整棋盘中的图案,策略为改变数值的元素值, //当黑子落子时就将数组中对应的元素值改为1,当白方落子时就将数组中对应的元素改为2 chessBoard[x][y] = (flag ? 1 : 2); //重新绘制图案 paint(); //判断当前方是否胜利,若胜利就结束游戏 if (Success(x, y)) { System.out.println("恭喜" + (flag ? "黑方" : "白方") + "胜利了!"); break; } // 此时切换下棋方 flag = !flag; } } //自定义成员方法来判断用户是否获胜,获胜的规则时:任意相同颜色的5个棋子连成一条线 boolean Success(int x, int y){ //1.判断竖向是否连成一线,则需要以该点为中心向上四个点向下四个点 //声明变量来统计竖向相同颜色棋子的个数,先统计向上同色棋子的个数 //先统计向上颜色相同的个数 int count = 1; for (int i = x - 1; i >= 0; i--) { //若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束 if (chessBoard[x][y] != chessBoard[i][y]){ break; } count++; } //再统计向下颜色相同的个数 for (int i = x + 1; i < chessBoard.length; i++) { if (chessBoard[x][y] != chessBoard[i][y]){ break; } count++; } if (5 == count){ return true; } //2.判断横向是否连成一条线,则需要以该店为中心向左四个点向右四个点 count = 1; //先统计向左颜色相同的个数 for (int j = y - 1; j >= 0; j--) { //若当前点代表的棋子与上述某个点代码的棋子不一样,则向上统计结束 if (chessBoard[x][y] != chessBoard[x][j]) { break; } count++; } //再统计向右颜色相同的个数 for (int j = y + 1; j < chessBoard.length; j++) { if(chessBoard[x][y] != chessBoard[x][j]){ break; } count++; } if (5 == count){ return true; } // 3.判断左上到右下是否连成一线,则需要以该点为中心向左上四个点向右下四个点 count = 1; // 先统计左上颜色相同的个数 for (int i = x-1, j = y - 1; i >= 0 && j >= 0; i--, j--) { // 若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束 if (chessBoard[x][y] != chessBoard[i][j]) { break; } count++; } // 再统计右下颜色相同的个数 for (int i = x+1, j = y + 1; i <= 15 && j <= 15; i++, j++) { if (chessBoard[x][y] != chessBoard[i][j]) { break; } count++; } if (5 == count) { return true; } // 4.判断右上到左下是否连成一线,则需要以该点为中心向右上四个点向左下四个点 count = 1; // 先统计右上颜色相同的个数 for (int i = x-1, j = y + 1; i >= 0 && j <= 15; i--, j++) { // 若当前点代表的棋子与上述某个点代表的棋子不一样,则向上统计结束 if (chessBoard[x][y] != chessBoard[i][j]) { break; } count++; } // 再统计左下颜色相同的个数 for (int i = x+1, j = y - 1; i <= 15 && j >= 0; i++, j--) { if (chessBoard[x][y] != chessBoard[i][j]) { break; } count++; } if (5 == count) { return true; } // 当上述所有情况都不成立时,表示该下棋方没有获胜 return false; } }
public class WuziqiTest { public static void main(String[] args) { //声明一个Wuziqi类型的引用指向Wuziqi类型的对象 Wuziqi wz = new Wuziqi(); //调用paint()方法打印列信息 wz.paint(); //下棋开始 wz.play(); } }
结果如下
文中没有对下棋时候的数组下标进行合理值判断,各位可自行完善。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/203145/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)