请教简易java五子棋的思路
1,分析对象共有三个类 棋盘类,点类,棋子类
2,画棋盘棋盘类继承Frame,重写paint方法按照从第一个点到最后一个点划线,画出所以横线和竖线
3,棋盘类有个鼠标响应事件,点击是有个计数器第一次点击显示黑气,第二次单机出白棋子,可以用计数器count%2==0来判断是黑是白,其中棋子有个boolean black 属性;
怎样确保第一次和第二次画的棋子不会画到同一个点上去?
怎么判断五个棋子连在一起回赢?

其中棋子有 属性Point 点,和black 属性
点有x,y 坐标,和是否这个点可以使用flag属性
棋盘有棋子和点的属性

解决方案 »

  1.   

    1.每次落子前都做一个判断,判断当前点是否已有棋子;没有则落子,有,当然给出提示,请求重新落子;
    2.判断输赢,应该采用遍历当前落子四周(水平,竖直,及对角线位置)的方法;
    贴一个以前写过的,控制台的五子棋,你可以参考下。(其实Java写界面很费力的啊!)
    import java.util.Scanner;public class WuZiQi { /**
     * @param args
     */


    public static void main(String[] args) {
    char[][] arr = new char[16][16];
    // 准备数组
    for (int i = 1; i < arr.length; i++) {
    for (int j = 1; j < arr.length; j++) {
    arr[i][j] = '*';

    }

    } print1();// 打印首行
    print2(arr);// 打印其余15行
    boolean flag = true;
    System.out.println("游戏开始!"); int i = 1;

    int x;
    int y;
    int a;
    int b;
    while (flag) {
    if (i % 2 != 0) {
    System.out.println("请黑方落子!");
    Scanner sc1 = new Scanner(System.in);
    x = sc1.nextInt();
    y = sc1.nextInt();
    if (x <= 0 || y <= 0 || x > 15 || y > 15) {
    System.out.println("请在适当位置落子!");
    } else if (arr[x][y] == '@' || arr[x][y] == '&') {
    System.out.println("此处有子,请重新落子!");
    } else {
    arr[x][y] = '@';
    print1();// 打印棋谱
    print2(arr);
    i++;

    }
    if (isWin1(x, y, arr, 0) || isWin2(x, y, arr, 0)
    || isWin3(x, y, arr, 0) || isWin4(x, y, arr, 0)) {
    System.out.println("黑方赢!游戏结束!");
    flag = false;
    break;
    }
    }
    // 判断输赢

    if (i % 2 == 0) {
    System.out.println("请白方落子!");
    Scanner sc2 = new Scanner(System.in);
    a = sc2.nextInt();
    b = sc2.nextInt();
    if (a <= 0 || b <= 0 || a > 15 || b > 15) {
    System.out.println("请在适当位置落子!"); } else if (arr[a][b] == '@' || arr[a][b] == '&') {
    System.out.println("此处有子,请重新落子!"); } else {
    arr[a][b] = '&';
    print1();
    print2(arr);
    i++;
    if (isWin1(a, b, arr, 1) || isWin2(a, b, arr, 1)
    || isWin3(a, b, arr, 1) || isWin4(a, b, arr, 1)) {
    System.out.println("白方赢!游戏结束!");
    flag = false;
    break;
    }
    } } } }
    //打印棋谱
    static void print1() {
    for (int i = 0; i < 16; i++) {
    System.out.print(Integer.toHexString(i) + "  ");
    }
    System.out.println();
    }
    static void print2(char[][] arr) {
    int i = 0;
    int j = 0;
    for (i = 1; i < 16; i++) {
    System.out.print(Integer.toHexString(i) + "  ");
    for (j = 1; j < 16; j++) {
    System.out.print(arr[i][j] + "  ");
    }
    System.out.println();

    }
    }
    //判断输赢
    static boolean isWin1(int x, int y, char[][] arr, int wanJia) {
    char ch;//黑白玩家落子
    int i = x;
    int count = 0;
    if (wanJia == 0) {
    ch = '@';
    } else {
    ch = '&';
    }
    while (arr[x][y] == ch && x > 0 && x <= 15) {
    x++;
    count++;
    }
    while (arr[i][y] == ch && i > 0 && i <= 15) {
    i--;
    count++;
    }
    if (count == 6) {
    return true;
    } else
    return false;
    } static boolean isWin2(int x, int y, char[][] arr, int wanJia) {
    char ch;
    int i = y;
    int count = 0;
    if (wanJia == 0) {
    ch = '@';
    } else {
    ch = '&';
    }
    while (arr[x][y] == ch && y > 0 && y <= 15) {
    y++;
    count++;
    }
    while (arr[x][i] == ch && i > 0 && i <= 15) {
    i--;
    count++;
    }
    if (count == 6) {
    return true;
    } else
    return false;
    } static boolean isWin3(int x, int y, char[][] arr, int wanJia) {
    char ch;
    int i = x;
    int j = y;
    int count = 0;
    if (wanJia == 0) {
    ch = '@';
    } else {
    ch = '&';
    }
    while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
    x++;
    y++;
    count++;
    }
    while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
    x--;
    y--;
    count++;
    }
    if (count == 6) {
    return true;
    } else
    return false;
    } static boolean isWin4(int x, int y, char[][] arr, int wanJia) {
    char ch;
    int i = x;
    int j = y;
    int count = 0;
    if (wanJia == 0) {
    ch = '@';
    } else {
    ch = '&';
    }
    while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
    x++;
    y--;
    count++;
    }
    while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
    i--;
    j++;

    count++;
    }
    if (count == 6) {
    return true;
    } else
    return false;
    }
    }