JavaSE实现三子棋游戏(java六子棋)

网友投稿 249 2022-08-08


JavaSE实现三子棋游戏(java六子棋)

目录main函数棋盘模块设计玩家模块设计AI(电脑)模块设计游戏模块设计

本文实例为大家分享了javaSE实现三子棋游戏的具体代码,供大家参考,具体内容如下

用面向对象的思维把实现三子棋划分为四个模块:

main函数

public class main {

public static void main(String[] args) {

player player1 = new player();

game game1 = new game(player1);

while(true){

game1.initialize();

game1.play();

game1.destroy();

boolean b = player1.queryContinue();

if (!b) {

System.out.println("欢迎下次继续游戏");

break;

}

}

}

}

棋盘模块设计

棋盘初始化

接受玩家落子并返回当前棋盘状态

接受AI落子并返回当前棋盘状态

判断获胜方、平局或是继续游戏,新游戏重置棋盘。

import java.util.Arrays;

public class chessboard {

private static final int 空白 = 0;

private static final int 画圈 = 1;

private static final int 画叉 = 2;

private int[][] array = {

{空白,空白,空白},

{空白,空白,空白},

{空白,空白,空白},

};

public boolean moveCircleAt(int row,int column){

if(array[row][column] != 空白){

return false;

}

array[row][column] = 画圈;

return true;

}

public boolean moveCrossAt(int row,int column){

if(array[row][column] != 空白){

return false;

}

array[row][column] = 画叉;

return true;

}

public static final int CIRCLE_WIN = 0;

public static final int CROSS_WIN = 1;

public static final int DRAW = 2;

public static final int CONTINUE = 3;

private static String display(int i){

switch (i){

case 空白:return " ";

case 画圈:return "@";

case 画叉:return "*";

default:return " ";

}

}

@Override

public String toString() {

String s = "+-+-+-+-+-+\n";

for(int i = 0;i<2;i++){

s += String.format("|%s|%s|%s|\n",display(array[i][0]),display(array[i][1]),display(array[i][2]));

// s += "+-+-+-+-+-+\n";

}

s += String.format("|%s|%s|%s|\n",display(array[2][0]),display(array[2][1]),display(array[2][2]));

s += "+-+-+-+-+-+";

return s;

}

public int getState(){

//按行判断

for(int i = 0;i<3;i++){

if(array[i][0] == array[i][1] && array[i][1]== array[i][2]){

if(array[i][0] == 画圈 ){

System.out.println("玩家胜");

return CIRCLE_WIN;

}

else if(array[i][0] == 画叉){

System.out.println("机器赢");

return CROSS_WIN;

}

}

}

//列判断

for(int i = 0;i<3;i++){

if(array[0][i] == array[1][i] && array[1][i]== array[2][i]){

if(array[0][i] == 画圈 ){

System.out.println("玩家胜");

retuhttp://rn CIRCLE_WIN;

}

else if(array[0][i] == 画叉){

System.out.println("机器赢");

return CROSS_WIN;

}

}

}

//斜线判断

if(array[0][0] == array[1][1] && array[1][1]== array[2][1]){

if(array[1][1] == 画圈 ){

return CIRCLE_WIN;

}

else if(array[1][1] == 画叉){

return CROSS_WIN;

}

}

if(array[0][2] == array[1][1] && array[1][1]== array[2][0]){

if(array[1][1] == 画圈 ){

return CIRCLE_WIN;

}

else if(array[1][1] == 画叉){

return CROSS_WIN;

}

}

//没人赢

for(int i = 0;i<3;i++){

for(int j = 0;j<3;j++){

if(array[i][j] == 空白){

return CONTINUE;

}

}

}

return DRAW;

}

public void reset() {

for(int i = 0;i<3;i++){

Arrays.fill(array[i],空白);

}

}

}

玩家模块设计

输入想要落子的位置,决定退出游戏还是再来一局。

import java.util.Scanner;

public class player {

private final Scanner scanner = new Scanner(System.in);

public int[] getStation(){

System.out.println("请输入要落子的位置,行,列,有效输入是0,1,2");

int r,c;

while (true) {

System.out.print(">>>");

r = scanner.nextInt();

c = scanner.nextInt();

if(r >= 0 && r <= 2 &&c >= 0 && c <= 2){

break;

}

System.out.println("有效范围是0,1,2,请重新输入。");

}

return new int[] {r,c};

}

public boolean queryContinue(){

System.out.println("是否再来一把?,请输入true or false");

System.out.println(">>>");

return scanner.nextBoolean();

}

}

AI(电脑)模块设计

生成随机坐标

import java.util.Random;

public class AI {

//返回落子的位置

//第几行,第几列都是从0开始

//有效值0~2

private final Random random = new Random();

int r,c;

public int[] getStation(){

r = random.nextInt(3);

c = random.nextInt(3);

return new int[] {r,c};

}

}

游戏模块设计

初始化工作:打印提示内容和分割线,加载棋盘

判断是玩家落子还是AI落子

玩家落子情况下:判断玩家输入的合法性,超出边界或是覆盖落子都是不合法行为

AI落子情况下:判断输入的合法性。

控制棋盘重置新棋局

package 三子棋;

public class game {

private final chessboard chessboard1;

private final player player1;

private final AI ai;

public game(player player1){

this.chessboard1 = new chessboard();

this.player1 = player1;

this.ai = new AI();

}

//游戏开始之前,进行一些准备工作

public void initialize(){

System.out.println("欢迎进入井字棋游戏");

System.out.println("规则如下;省略");

System.out.println("===========================");

System.out.println(chessboard1);

}

public void play(){//cintinue会继续,玩家胜,AI胜和平局 都是break,退出循环。

while(true){

if(playerTurn()){

break;

}

if(aiTurn()) {

break;

}

}

}

//游戏结束之前,完成一些收尾工作

public void destroy(){

// ai.reset();

// player1.reset();

chessboard1.reset();

}

private boolean playerTurn(){

System.out.println("玩家回合");

while (true){

int[] rc = player1.getStation();

int row = rc[0];

int column = rc[1];

if(chessboard1.moveCircleAt(row,column))

{

break;

}

System.out.println("该位置已经有子,请重新选择位置");

}

System.out.println(chessboard1);

if(chessboard1.getState() == chessboard.CONTINUE){

return false;

}

return true;

}

private boolean aiTurn(){

System.out.println("AI回合");

while (true){

int[] rc = ai.getStation();

int row = rc[0];

int column = rc[1];

if(chessboard1.moveCrossAt(row,column))

{

break;

}

System.out.println("该位置已经有子,请重新选择位置");

}

System.out.println(chessboard1);

if(chessboard1.getState() == chessboard.CONTINUE){

return false;

}

return true;

}

}

代码还有不完善的地方,希望大家多提意见啦


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

上一篇:Java实现三子棋小游戏简易版(用java编写五子棋小游戏)
下一篇:Java实现三子棋游戏(基于java的五子棋游戏的设计代码)
相关文章

 发表评论

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