五子棋的简单实现

版权声明:知识共享 https://blog.csdn.net/liyaowen505/article/details/78137756
此例子为电脑随机测试
    import java.util.Scanner;
public class 五子棋 {
    static char zi[] = { '●', '○' }; // 黑子玩家 9679; 白字玩家 9675
public static void main(String[] args) {
    int arr[][] = new int[11][11];
    printf(arr);
    Scanner input = new Scanner(System.in);
    int x, y;
    int flag = 1; // 下次改哪个玩家下
    int player; // 当前玩家是谁
    do {
        player = flag;
        switch (flag) {
        case 1:
            System.out.println("请 1 玩家(黑子)输入x , y坐标,从1开始:");
            flag = 2;
            break;
        case 2:
            System.out.println("请 2 玩家(白子)输入x , y坐标,从1开始:");
            flag = 1;
            break;
        }
        // x = input.nextInt();
        // y = input.nextInt();
        x = (int) (Math.random() * 11 + 1);
        y = (int) (Math.random() * 11 + 1);
        if (x < 1 || y < 1 || x > 11 || y > 11) {
            System.out.println("坐标超出区域,请重新确认!");
            flag = player;
            continue;
        } else if (arr[x - 1][y - 1] != 0) {
            System.out.println("此位置已有棋子,请重新确认!");
            flag = player;
            continue;
        } else if (arr[x - 1][y - 1] == 0)
            arr[x - 1][y - 1] = player;
        printf(arr);
    } while (!judge(arr, x, y, player));
    System.out.println("玩家" + zi[player - 1] + "赢了");
    input.close();
    return;
}

// 打印棋谱
public static void printf(int a[][]) {
    for (int i = 0; i < a[0].length; i++) {
        for (int j = 0; j < a[0].length; j++) {
            if (a[i][j] != 0)
                System.out.print(zi[a[i][j] - 1] + "  ");
            else
                System.out.print("=  ");
        }
        System.out.println();
    }
}

// 判断
static boolean judge(int a[][], int x, int y, int player) {
    int row = 0, col = 0, left = 0, right = 0;
    if (x < 1 || y < 1 || x > 11 || y > 11) // 出界
        return false;
    for (int i = 0; i < a.length; i++) {
        // 判断所在行
        if (a[x - 1][i] == player) {
            row++;
            if (row == 5)
                return true;
        } else
            row = 0;
        // 判断列
        if (a[i][y - 1] == player) {
            col++;
            if (col == 5)
                return true;
        } else
            col = 0;
    }
    // 判断斜线
    int sum1 = x - y; // 左斜 (x-1)-(y-1) 差一样
    int sum2 = x + y - 2; // 右斜 (x-1)+(y-1) 和一样
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            // 左斜
            if ((i - j) == sum1 && a[i][j] == player) {
                left++;
                if (left == 5)
                    return true;
            } else if ((i - j) == sum1 && a[i][j] != player)
                left = 0;
            // 右斜
            if ((i + j) == sum2 && a[i][j] == player) {
                right++;
                if (right == 5)
                    return true;
            } else if ((i + j) == sum2 && a[i][j] != player)
                right = 0;
        }
    }
    return false;
}

}

猜你喜欢

转载自blog.csdn.net/liyaowen505/article/details/78137756