五子棋小游戏——Java
创始人
2024-02-09 13:46:12
0

文章目录

    • 一、内容简介:
    • 二、基本流程
    • 三、具体步骤
      • 1.菜单栏
      • 2.创建棋盘并初始化为空格
        • (1)定义行数、列数为常量
        • (2)定义棋盘
        • (3)给棋盘添加坐标并初始化棋盘为空格
      • 3.打印棋盘
      • 4.玩家落子
      • 5.判断输赢
    • 四、代码实现
    • 五、效果展示

一、内容简介:

五子棋小游戏是我们日常生活中经常玩的小游戏,游戏规则也很简单。下面就让我们使用Java来实现五子棋的编写吧!

二、基本流程

1.通过菜单选择开始游戏和退出游戏
2.创建并初始化棋盘为空格
3.打印棋盘
4.玩家以坐标的形式落子
5.判断输赢

三、具体步骤

1.菜单栏

public static void menu() {System.out.println("-------------------------------------------------------");System.out.println("---------------1.开始游戏      2.退出游戏----------------");System.out.println("-------------------------------------------------------");}

2.创建棋盘并初始化为空格

(1)定义行数、列数为常量

public static final int ROW = 10;//行数
public static final int COL = 10;//列数
public static final String BlackChess = "#";//黑方
public static final String WhiteChess = "*";//白方

(2)定义棋盘

String[][] board = new String[ROW + 1][COL + 1];

多的一行、一列为了添加坐标使用。

(3)给棋盘添加坐标并初始化棋盘为空格

	/*** 给棋盘添加坐标并初始化棋盘为空格** @param board 棋盘* @param row   行数* @param col   列数*/private static void InitBoard(String[][] board, int row, int col) {String[] arr = {"1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "10"};board[row] = arr;for (int i = 0; i < arr.length; i++) {board[i][col] = arr[i];}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {board[i][j] = " ";}}System.out.println();}}

3.打印棋盘

	/*** 打印棋盘* @param board 棋盘* @param row   行数* @param col   列数*/private static void PrintBoard(String[][] board, int row, int col) {for (int i = 0; i < row; i++) {for (int j = 0; j < col + 1; j++) {System.out.printf(" %s ", board[i][j]);if (j < col)System.out.print("|");}System.out.println();if (i < row - 1) {for (int j = 0; j < col + 1; j++) {System.out.print("---");if (j < col)System.out.print("|");}System.out.println();}}for (int j = 0; j < col; j++) {System.out.printf(" %s", board[row][j]);if (j < col - 1)System.out.print("|");}}

4.玩家落子

	/*** 玩家落子** @param board //棋盘* @param x     //横坐标* @param y     //纵坐标* @param Chess //棋子* @param row   // 行数* @param col   // 列数*/private static boolean PlayerMove(String[][] board, int x, int y, String Chess, int row, int col) {while (true) {if (x >= 0 && x < row && y >= 0 && y < col) {if (board[x][y].equals(" ")) {board[x][y] = Chess;return false;} else {System.out.println("该坐标已被占用!");return true;}} else {System.out.println("坐标非法,请您重新输入!");return true;}}}

如果落子成功,返回false,不进入外面的循环;如果落子失败,返回true,进入外面的循环,重新落子。

5.判断输赢

1.判断横着或竖着是否有连续的相同的5颗棋子,这个比较容易实现。
2.判断斜着是否有连续的相同的5颗棋子。
将下的这颗棋子为中心,分别判断它的左上、右下和左下、右上是否有连续的相同的5颗棋子。

	 /*** @param board     //棋盘* @param x         //横坐标* @param y         //纵坐标* @param Chess//棋子* @param row       //行数* @param col       //列数* @return //true或false*/private static boolean IsWin(String[][] board, int x, int y, String Chess, int row, int col) {//判断横或竖是否有相同的五颗棋for (int i = 0; i < row - 5; i++) {if (board[x][i].equals(Chess) && board[x][i + 1].equals(Chess) && board[x][i + 2].equals(Chess)&& board[x][i + 3].equals(Chess)&& board[x][i + 4].equals(Chess))return true;if (board[i][y].equals(Chess) && board[i + 1][y].equals(Chess) && board[i + 2][y].equals(Chess)&& board[i + 3][y].equals(Chess)&& board[i + 4][y].equals(Chess))return true;}//判断该棋子的左上、右下和左下、右上是否有连续的相同的五颗棋子int count1 = 1;int count2 = 1;int lx, ly;//左上for (lx = x - 1, ly = y + 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count1++;if (count1 >= 5)return true;} else {break;}}//右下for (lx = x + 1, ly = y - 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count1++;if (count1 >= 5)return true;} else {break;}}//左下for (lx = x - 1, ly = y - 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count2++;if (count2 >= 5)return true;} else {break;}}//右上for (lx = x + 1, ly = y + 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count2++;if (count2 >= 5)return true;} else {break;}}return false;//没有人赢}

四、代码实现

import java.util.Scanner;public class Main {public static final int ROW = 10;//行数public static final int COL = 10;//列数public static final String BlackChess = "#";public static final String WhiteChess = "*";public static void main(String[] args) {Scanner sca = new Scanner(System.in);menu();System.out.println("请您输入选择:");int input = sca.nextInt();while (true) {switch (input) {case 1://开始游戏beginGame(sca);break;case 2://退出游戏endGame();break;default:System.out.println("非法输入!");System.out.println("请您重新输入!");}break;}}/*** 退出游戏*/private static void endGame() {System.out.println("您已退出游戏!");return;}public static void menu() {System.out.println("-------------------------------------------------------");System.out.println("---------------1.开始游戏      2.退出游戏----------------");System.out.println("-------------------------------------------------------");}public static void beginGame(Scanner sca) {//1.定义棋盘String[][] board = new String[ROW + 1][COL + 1];//2.给棋盘添加坐标并初始化棋盘为空格InitBoard(board, ROW, COL);//3.打印棋盘PrintBoard(board, ROW, COL);/*** 开始下棋*/while (true) {boolean flag = true;//4.黑方落子System.out.println();int x = 0, y = 0;System.out.println("请黑方落子:");x = sca.nextInt() - 1;y = sca.nextInt() - 1;while (PlayerMove(board, x, y, BlackChess, ROW, COL)) {System.out.println("请重新输入!");x = sca.nextInt() - 1;y = sca.nextInt() - 1;}PrintBoard(board, ROW, COL);//打印棋盘//5.判断输赢boolean winer = IsWin(board, x, y, BlackChess, ROW, COL);if (winer) {System.out.println();System.out.println("黑方胜!");System.out.println("游戏结束!");break;}//6.白方落子System.out.println();System.out.println("请白方落子");x = sca.nextInt() - 1;y = sca.nextInt() - 1;while (PlayerMove(board, x, y, WhiteChess, ROW, COL)) {System.out.println("请重新输入!");x = sca.nextInt() - 1;y = sca.nextInt() - 1;}PrintBoard(board, ROW, COL);//打印棋盘//判断输赢if (IsWin(board, x, y, WhiteChess, ROW, COL)) {System.out.println();System.out.println("白方胜!");System.out.println("游戏结束!");break;}}return;}/*** 玩家落子** @param board //棋盘* @param x     //横坐标* @param y     //纵坐标* @param Chess //棋子* @param row   // 行数* @param col   // 列数*/private static boolean PlayerMove(String[][] board, int x, int y, String Chess, int row, int col) {while (true) {if (x >= 0 && x < row && y >= 0 && y < col) {if (board[x][y].equals(" ")) {board[x][y] = Chess;return false;} else {System.out.println("该坐标已被占用!");return true;}} else {System.out.println("坐标非法,请您重新输入!");return true;}}}/*** @param board     //棋盘* @param x         //横坐标* @param y         //纵坐标* @param Chess//棋子* @param row       //行数* @param col       //列数* @return //true或false*/private static boolean IsWin(String[][] board, int x, int y, String Chess, int row, int col) {//判断横或竖是否有相同的五颗棋for (int i = 0; i < row - 5; i++) {if (board[x][i].equals(Chess) && board[x][i + 1].equals(Chess) && board[x][i + 2].equals(Chess)&& board[x][i + 3].equals(Chess)&& board[x][i + 4].equals(Chess))return true;if (board[i][y].equals(Chess) && board[i + 1][y].equals(Chess) && board[i + 2][y].equals(Chess)&& board[i + 3][y].equals(Chess)&& board[i + 4][y].equals(Chess))return true;}//判断该棋子的左上、右下和左下、右上是否有连续的相同的五颗棋子int count1 = 1;int count2 = 1;int lx, ly;//左上for (lx = x - 1, ly = y + 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count1++;if (count1 >= 5)return true;} else {break;}}//右下for (lx = x + 1, ly = y - 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count1++;if (count1 >= 5)return true;} else {break;}}//左下for (lx = x - 1, ly = y - 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count2++;if (count2 >= 5)return true;} else {break;}}//右上for (lx = x + 1, ly = y + 1; lx >= 0 && ly >= 0; lx--, ly--) {if (board[lx][ly].equals(Chess)) {count2++;if (count2 >= 5)return true;} else {break;}}return false;//没有人赢}/*** 打印棋盘* @param board 棋盘* @param row   行数* @param col   列数*/private static void PrintBoard(String[][] board, int row, int col) {for (int i = 0; i < row; i++) {for (int j = 0; j < col + 1; j++) {System.out.printf(" %s ", board[i][j]);if (j < col)System.out.print("|");}System.out.println();if (i < row - 1) {for (int j = 0; j < col + 1; j++) {System.out.print("---");if (j < col)System.out.print("|");}System.out.println();}}for (int j = 0; j < col; j++) {System.out.printf(" %s", board[row][j]);if (j < col - 1)System.out.print("|");}}/*** 给棋盘添加坐标并初始化棋盘为空格** @param board 棋盘* @param row   行数* @param col   列数*/private static void InitBoard(String[][] board, int row, int col) {String[] arr = {"1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "10"};board[row] = arr;for (int i = 0; i < arr.length; i++) {board[i][col] = arr[i];}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {board[i][j] = " ";}}System.out.println();}}

五、效果展示

开始选项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...