文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java实现三子棋小游戏的代码怎么写

2023-06-30 11:46

关注

本篇内容主要讲解“Java实现三子棋小游戏的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现三子棋小游戏的代码怎么写”吧!

游戏操作如图示:

Java实现三子棋小游戏的代码怎么写

原理:

主要借助3x3的二维数组

实现:

1、Main–主程序

public class Main {    public static void main(String[] args) {      Player player=new Player();//玩家      Game game=new Game(player);      //一次循环代表一次游戏      while (true){          game.Init();//初始化          game.play();//开始游戏          game.destory();//释放          boolean q=player.queryContinue();          //一局游戏结束后,询问用户是否开始下一局游戏          if (!q){              System.out.println("欢迎下次继续游戏!");              break;          }      }    }}

2、AI–电脑

import java.util.Random;//返回AI对象的落子位置//用数组表示 第几行第几列 从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);        return new int[]{r,c};    }}

3、Player–玩家

import java.util.Scanner;//返回玩家落子位置//用数组表示 第几行第几列 从0开始//所以有效范围是[0,2]public class Player {    private final Scanner sc=new Scanner(System.in);    public int[] getPosition(){        System.out.println("请输入要落子的位置,行列有效取值范围为[0,2]");        System.out.print(">>>");        int r,c;       while (true){           System.out.print(">>>");           r=sc.nextInt();           c=sc.nextInt();           if (r>=0&&r<=2&&c>=0&&c<=2){               break;           }           System.out.println("行列有效范围为[0,2],请重新输入");       }        return new int[]{r,c};    }    //询问用户是否继续下一局    public boolean queryContinue(){        System.out.println("本局游戏结束,开始新游戏请输入true,否则输入false");        System.out.print(">>>");        return sc.nextBoolean();    }}

4、ChessBoard&ndash;棋盘

import java.util.Arrays;//棋盘 用来实例化对象//棋盘对象//功能 1、落子 2、判断棋盘状态public class ChessBoard {   private static final int empty=0;//空白位置用0表示   private static final int circle=1;//落子为o的位置   private static final int cross=2;//落子为x的位置   private final int[][] array={           {empty,empty,empty},           {empty,empty,empty},           {empty,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|%s|\n",show(array[i][0]),show(array[i][1]),show(array[i][2]));         s+="---------\n";      }      //最后一行      s+=String.format("|%s|%s|%s|\n",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&ndash;游戏

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();    }}

运行结果:

测试落子位置合法性

Java实现三子棋小游戏的代码怎么写

测试棋盘状态/输赢

Java实现三子棋小游戏的代码怎么写

测试平局

Java实现三子棋小游戏的代码怎么写

到此,相信大家对“Java实现三子棋小游戏的代码怎么写”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯