千家信息网

怎么用JavaSE实现三子棋游戏

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇内容主要讲解"怎么用JavaSE实现三子棋游戏",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用JavaSE实现三子棋游戏"吧!用面向对象的思维把实
千家信息网最后更新 2025年01月18日怎么用JavaSE实现三子棋游戏

本篇内容主要讲解"怎么用JavaSE实现三子棋游戏",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用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("玩家胜");                    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;    }}

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

空白 玩家 位置 棋盘 三子 模块 输入 设计 内容 工作 合法 有效 合法性 回合 平局 情况 机器 状态 还是 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 阿里云数据库工作环境 cdm数据库中的单字通配符 电厂软件开发工程师工资待遇 西安定制化服务器销售价格 sql登录名映射数据库 曙光服务器管理端密码 网络安全危害60秒演讲稿 软件开发37岁找工作 数据库查询结果邮件发送 成都软件开发公司可以做什么服务 网络安全技术发展研究报告 kettle数据库建立 网络安全环境由3个重要部分 文明重启开服务器怎么设置辅助枪 涉及软件开发的销售合同 美国流媒体独立服务器 上海极速互联网科技有限公司 范海辛下载软件开发 管理服务器出现单点故障 软件开发行业信息标准名称 使用计算机网络技术答疑解惑 国产化服务器厂家直销 spoon数据库连接错误 黔江区媒体网络技术服务活动方案 数据库在线教学 疫情数据库在哪里查看 云服务器可以玩大游戏吗 华为服务器哪个是管理口 数据库中检索和索引的区别 欣宇软件开发有限公司
0