美文网首页
P42-井字游戏-暴力

P42-井字游戏-暴力

作者: YonchanLew | 来源:发表于2021-05-28 00:01 被阅读0次
//井字游戏
/*
* 用字符串数组作为井字游戏的游戏板 board,判断该游戏板有没有可能最终形成。
* 游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。
* 两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋
* X和O 只允许放置在空位中,不允许对已放有字符的位置进行填充。
* 当有3个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成
* board就是能不能形成这样的棋盘的意思
* */
public class P42 {
    public static void main(String[] args) {
        System.out.println(validBoard(new String[]{"xxx", "oxo", "o o"}));  //x赢,o棋子比x少1
        System.out.println(validBoard(new String[]{"xxx", "oxo", "o  "}));
    }

    //只有三种结果:x赢,o赢,胜负未分
    /*
    * x赢,有必然条件:x-o = 1,因为是x先手
    * o赢,有必然条件:o-x = 0,因为o是后手
    * 胜负未分:!(x-o=1 || x-o=0)
    * */
    private static boolean validBoard(String[] board) {
        int xCount = 0;     //x棋的数量
        int oCount = 0;
        for(String row : board){
            for(char c : row.toCharArray()){
                if(c == 'x'){
                    xCount++;
                }else if(c == 'o'){
                    oCount++;
                }
            }
        }

        if(xCount != oCount && xCount-oCount!=1){
            return false;
        }

        //x赢得时候,必然是多一个棋的
        if(win(board, "xxx") && xCount-oCount!=1){
            return false;
        }
        //o赢得时候,必然是棋子相等的
        if(win(board, "ooo") && xCount-oCount!=0){
            return false;
        }

        return true;

    }

    public static boolean win(String[] board, String flag){
        for(int i=0; i<3; i++){
            //纵向3连
            if(flag.equals("" + board[0].charAt(i)+board[1].charAt(i)+board[2].charAt(i))){
                return true;
            }

            //横向3连
            if(flag.equals(board[i])){
                return true;
            }
        }

        //对角线
        if(flag.equals("" + board[0].charAt(0)+board[1].charAt(1)+board[2].charAt(2))){
            return true;
        }
        if(flag.equals("" + board[0].charAt(2)+board[1].charAt(1)+board[2].charAt(1))){
            return true;
        }

        return false;
    }
}

相关文章

  • P42-井字游戏-暴力

  • 井字游戏

    设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中...

  • 玩井字游戏

    晚上带孩子们玩了井字游戏,这可是一个有魔力的游戏,让孩子们玩得欲罢不能,竟然上瘾了。 井字游戏是...

  • C++实现的基于α-β剪枝算法的井字棋游戏

    一、井字棋游戏规则 “井字棋”游戏(又叫“三子棋”),是一款十分经典的益智小游戏,操作简单,娱乐性强。两个玩家,一...

  • 多维数组怎么学?看这一篇就够了,带你在游戏中学习。

    tic-tac-toe 游戏 (井字棋游戏) 大家小时候应该都玩过井字棋吧,下课之余和同学来上一把,是多么开心。今...

  • React井字旗游戏

    教程: 井字旗游戏教程链接 教程中对于Array.prototype.slice的阐述有问题(链接),根据mdn中...

  • 16.04. 井字游戏

    【Description】设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" "...

  • 井字游戏的魔力

    前天晚上带孩子们玩了井字游戏,老大老二玩上瘾了,这在我的预料之中。前天晚上玩了几局后,到点该洗漱了,我就催...

  • 有效的井字游戏

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-...

  • 惊叹!电子游戏竟是“毒品”?

    惊叹!电子游戏竟是“毒品”? 最早有记录的电子游戏诞生于1952年,为井字棋游戏(Tic-...

网友评论

      本文标题:P42-井字游戏-暴力

      本文链接:https://www.haomeiwen.com/subject/mkwbjltx.html