java编程小游戏五子棋,四子棋java

  java编程小游戏五子棋,四子棋java

  

目录

总管函数棋盘模块设计玩家模块设计艾(电脑)模块设计游戏模块设计本文实例为大家分享了标准版实现三子棋游戏的具体代码,供大家参考,具体内容如下

 

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

  

main函数

public class main { public static void main(String[]args){ player player 1=new player();游戏游戏1=新游戏(玩家1);while(true){ game 1。initialize();第一场。play();第一场。destroy();布尔b=参与人1。query continue();如果(!b) { System.out.println(欢迎下次继续游戏);打破;} } }}

 

  

棋盘模块设计

棋盘初始化

 

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

  接受人工智能落子并返回当前棋盘状态

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

  导入Java。util。数组;公共类棋盘{私有静态最终(同Internationalorganizations)国际组织空白=0;私有静态最终整数画圈=1;私有静态最终整数画叉=2;private int[][] array={ {空白,空白,空白}, {空白,空白,空白}, {空白,空白,空白}, };public boolean moveCircleAt(int row,int column){ if(array[row][column]!=空白){返回false}数组[行][列]=画圈;返回true } public boolean moveCrossAt(int row,int column){ if(array[row][column]!=空白){返回false}数组[行][列]=画叉;返回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;私有静态字符串显示(int i){ switch (i){ case空白:返回" ";情况画圈:返回"@";情况画叉:返回"*";默认值:返回" ";} } @ Override public String to String(){ String s=- n ;for(int I=0;I2;I){ s=字符串。format( % s % s % s n ,display(array[i][0]),display(array[i][1]),display(array[I][2]);//s=- n ;} s=String.format(%s%s%sn ,display(array[2][0]),display(array[2][1]),display(array[2][2]);s=-;返回s;} public int getState(){ //按行判断for(int I=0;i3;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("玩家胜");                    return 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;    }}

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

 

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: