用java编写五子棋小游戏,java四子棋

  用java编写五子棋小游戏,java四子棋

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

  游戏操作如图示:

  

原理:

主要借助3x3的二维数组

 

  

实现:

1、Main主程序

 

  public class Main { public static void Main(String[]args){ Player Player=new Player();//玩家游戏游戏=新游戏(玩家);//一次循环代表一次游戏while (true){ game .init();//初始化game.play().//开始游戏游戏。destory();//释放布尔q=玩家。query continue();//一局游戏结束后,询问用户是否开始下一局游戏如果(!q){ System.out.println(欢迎下次继续游戏!);打破;} } } }2、AI电脑

  导入Java。util。随机;//返回人工智能对象的落子位置//用数组表示第几行第几列从0开始//所以有效范围是[0,2]public class AI { private final Random Random=new Random();public int[]getPosition(){ int r=random。nextint(3);//生成[0,2]的随机整数0 1 2 int c=random。nextint(3);返回new int[]{r,c };} }3、Player玩家

  导入Java。util。扫描仪;//返回玩家落子位置//用数组表示第几行第几列从0开始//所以有效范围是[0,2]公共类玩家{私有最终扫描器sc=新扫描器(系统。在);public int[]getPosition(){ system。出去。println(请输入要落子的位置,行列有效取值范围为[0,2]);系统。出去。打印(" ");int r,c;while(true){ system。出去。打印();r=sc。nextint();c=sc。nextint();if(r=0r=2c=0c=2){ break;} System.out.println(行列有效范围为[0,2],请重新输入);} return new int[]{r,c };} //询问用户是否继续下一局公共布尔查询continue(){ system。出去。println(本局游戏结束,开始新游戏请输入没错,否则输入false’);系统。出去。打印(" ");返回即next boolean();} }4、ChessBoard棋盘

  导入Java。util。数组;//棋盘用来实例化对象//棋盘对象//功能1、落子2、判断棋盘状态公共类棋盘{私有静态final int empty=0;//空白位置用0表示私有静态final int circle=1;//落子为零的位置私有静态最终int cross=2;//落子为x的位置private final int[][]array={ {empty,empty,empty},{ empty,empty,empty},{ em

  pty,empty,empty}   };   public boolean moveCircleAt(int row,int column){//落一个o      if (array[row][column]!=empty){ //落子前需要先判断该位置是否为空白         return false;      }      array[row][column]=circle;      return true;   }   public boolean moveCrossAT(int row,int column){//某个位置落个x      if (array[row][column]!=empty){         return false;      }      array[row][column]=cross;      return true;   }   //棋盘的四种状态   public static final int CIRCLE_WIN=0;//执o者赢  //三横三竖两对角成直线   public static final int CROSS_WIN=1;//执x者赢   public static final int DRAW=2;//平局 //没有成直线 但无落子位置了    public static final int CONTINUE=3;//继续   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]==circle){               System.out.println("恭喜你赢了!");               return CIRCLE_WIN;            }            else if (array[i][0]==cross){               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]==circle){               System.out.println("恭喜你赢了!");               return CIRCLE_WIN;            }            else if(array[0][i]==cross){               System.out.println("很遗憾你输了!");               return CROSS_WIN;            }         }      }      //正负对角线      //正负对角线      if ((array[0][0]==array[1][1]&&array[1][1]==array[2][2])              (array[0][2]==array[1][1]&&array[1][1]==array[2][0])){         if (array[1][1]==circle){            System.out.println("恭喜你赢了!");            return CIRCLE_WIN;         }         else if (array[1][1]==cross){            System.out.println("很遗憾你输了!");            return CROSS_WIN;         }      }      //无获胜      for (int i=0;i<3;i++){        for (int j=0;j<3;j++){           if (array[i][j]==empty){              return CONTINUE;           }        }      }      return DRAW;//无获胜也无空白 平局   }   private static String show(int i){ //显示      switch (i){         case empty:            return " ";         case circle:            return "o";         case cross:            return "x";         default:            return "1";      }   }   @Override   public String toString() {      String s="---------n";      for (int i=0;i<2;i++){ //前两行         s+=String.format("%s%s%sn",show(array[i][0]),show(array[i][1]),show(array[i][2]));         s+="---------n";      }      //最后一行      s+=String.format("%s%s%sn",show(array[2][0]),show(array[2][1]),show(array[2][2]));      s+="---------";      return s;   }   public void reset() {      for (int i=0;i<3;i++){         Arrays.fill(array[i],empty);//所有位置再次设置为空白      }   }}5、Game–游戏

  

import java.util.Arrays;public class Game {    private final ChessBoard chessboard;    private final Player player;    private final AI ai;    public Game(Player player){        this.chessboard=new ChessBoard();        this.player=player;        this.ai=new AI();    }    //初始化    public void Init(){        System.out.println("欢迎进入三子棋游戏");        System.out.println(chessboard);    }    //回合制游戏,游戏主流程    public void play(){        while (true){  //一次循环=player回合+AI回合           if (playerTurn()){//玩家回合               break;           }           if (aiTurn()){//ai回合               break;           }        }    }    private boolean aiTurn() {        System.out.println("AI回合:");        while (true) {            int[] rc=ai.getPosition();            int row=rc[0];            int column=rc[1];            if(chessboard.moveCrossAT(row, column)){                break;            }        }        System.out.println(chessboard);        return chessboard.getState()!=ChessBoard.CONTINUE;    }    private boolean playerTurn() {        System.out.println("玩家回合:");        while (true) {            int[] rc=player.getPosition();            int row=rc[0];            int column=rc[1];            if(chessboard.moveCircleAt(row, column)){                break;            }            System.out.println("该位置已经有棋子,请重新选择位置");        }        System.out.println(chessboard);        return chessboard.getState()!=ChessBoard.CONTINUE;    }    //新一局游戏开始时 游戏的界面需要重置 否则会是上一局游戏的结局界面    public void destory(){        chessboard.reset();    }}

运行结果:

 

  1、测试落子位置合法性

  

 

  2、测试棋盘状态/输赢

  

 

  3、测试平局

  

 

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

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

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