91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用JavaSE實現三子棋游戲

發布時間:2022-05-05 09:20:05 來源:億速云 閱讀:292 作者:zzz 欄目:開發技術

本篇內容主要講解“怎么用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實現三子棋游戲”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陇西县| 安义县| 浦东新区| 北碚区| 无棣县| 临泽县| 门头沟区| 文化| 美姑县| 武城县| 深州市| 武功县| 砀山县| 宽城| 文成县| 左贡县| 福州市| 班戈县| 北票市| 光山县| 独山县| 花莲市| 灵寿县| 满洲里市| 潜山县| 项城市| 宿松县| 鹰潭市| 通化县| 论坛| 兴城市| 卢龙县| 宜川县| 开平市| 界首市| 定远县| 融水| 辉县市| 临城县| 开封市| 神木县|