【Java项目实现】五子棋小游戏

五子棋小游戏

项目名称

  • 五子棋小游戏

项目描述

  • 可以改变获胜棋子数,率先连成棋数的人获胜

代码实现

  • 测试类
public class Test {
    public static void main(String[] args) {
        FiveChess fiveChess = new FiveChess();
        fiveChess.start();
    }
}
  • 主类:实现主方法
public class FiveChess {
    private static final int CheckerSize = 10;
    private static final int successSize = 5;
    private Chess[][] chess;
    private int xPos;
    private int yPos;
    private boolean flag = true;
    private Scanner scanner = new Scanner(System.in);
    public FiveChess(){
        chess = new Chess[CheckerSize][CheckerSize];
    }
    private void initCheck(){
        for(int i=0;i<CheckerSize;i++){
            for(int j=0;j<CheckerSize;j++){
                chess[i][j] = new Chess("十");
            }
        }
    }
    private boolean judge(int xPos,int yPos){
        //横向
        if(yPos-1>=0 && chess[xPos][yPos].getValue().equals(chess[xPos][yPos-1].getValue()) ||
                yPos+1<CheckerSize && chess[xPos][yPos].getValue().equals(chess[xPos][yPos+1].getValue())){
            int count = 1;
            for (int i = 1; i < successSize; i++) {
                if (yPos - i >= 0 && chess[xPos][yPos - i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            for (int i = 1; i < successSize; i++) {
                if (yPos + i < CheckerSize &&
                        chess[xPos][yPos + i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            return count >= successSize ? true : false;
        }
        //纵向
        if (xPos-1>=0 && chess[xPos][yPos].getValue().equals(chess[xPos-1][yPos].getValue()) ||
                xPos+1<CheckerSize && chess[xPos][yPos].getValue().equals(chess[xPos+1][yPos].getValue())){
            int count = 1;
            for (int i = 1; i < successSize; i++) {
                if (xPos- i >= 0 && chess[xPos-i][yPos].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            for (int i = 1; i < successSize; i++) {
                if (xPos + i < CheckerSize &&
                        chess[xPos+i][yPos].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            return count >= successSize ? true : false;
        }
        //正斜线
        if (xPos-1>=0 && yPos-1>=0 && chess[xPos][yPos].getValue().equals(chess[xPos-1][yPos-1].getValue()) ||
                xPos+1<CheckerSize && yPos+1<CheckerSize &&
                        chess[xPos][yPos].getValue().equals(chess[xPos+1][yPos+1].getValue())){
            int count = 1;
            for (int i = 1; i < successSize; i++) {
                if (xPos - i >= 0 && yPos - i >= 0 &&
                        chess[xPos-i][yPos-i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            for (int i = 1; i < successSize; i++) {
                if (xPos + i < CheckerSize && yPos + i < CheckerSize &&
                        chess[xPos+i][yPos+i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            return count >= successSize ? true : false;
        }
        //反斜线
        if (xPos-1>=0 && yPos+1<CheckerSize &&
                chess[xPos][yPos].getValue().equals(chess[xPos-1][yPos+1].getValue()) ||
                xPos+1<CheckerSize && yPos-1>=0 &&
                        chess[xPos][yPos].getValue().equals(chess[xPos+1][yPos-1].getValue())){
            int count = 1;
            for (int i = 1; i < successSize; i++) {
                if (xPos - i >= 0 && yPos + i<CheckerSize &&
                        chess[xPos-i][yPos+i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            for (int i = 1; i < successSize; i++) {
                if (xPos + i < CheckerSize && yPos - i >= 0 &&
                        chess[xPos+i][yPos-i].getValue().equals(chess[xPos][yPos].getValue())) {
                    count++;
                } else {
                    break;
                }
            }
            return count >= successSize ? true : false;
        }
        return false;
    }
    private void runChess(String run){
        System.out.println("请输入"+run+"坐标:");
        xPos = scanner.nextInt();
        yPos = scanner.nextInt();
        if(chess[xPos-1][yPos-1].getValue().equals("十")){
            if(run.equals("黑棋")){
                chess[xPos-1][yPos-1] = new Chess("●");
            }
            else if(run.equals("白棋")){
                chess[xPos-1][yPos-1] = new Chess("〇");
            }
            for(int i=0;i<CheckerSize;i++){
                for (int j=0;j<CheckerSize;j++){
                    System.out.print(chess[i][j].getValue());
                }
                System.out.println();
            }
            if(judge(xPos-1,yPos-1)){
                flag = false;
                System.out.println(run+"获胜");
                System.out.println("游戏结束,是否重玩");
                String finish = scanner.next();
                if (finish.equals("是")){
                    flag = true;
                    start();
                }
                else if (finish.equals("否")){
                    System.exit(0);
                }
            }
        }else {
            System.out.println("该处已存在棋子,请重新选择");
            runChess(run);
        }
    }
    public void start(){
        initCheck();
        System.out.println("请选择先走方:黑棋or白棋");
        String run = scanner.next();
        for(int i=0;i<CheckerSize;i++){
            for (int j=0;j<CheckerSize;j++){
                System.out.print(chess[i][j].getValue());
            }
            System.out.println();
        }
        while (flag) {
            switch (run) {
                case "黑棋":
                    runChess("黑棋");
                    run = "白棋";
                    break;
                case "白棋":
                    runChess("白棋");
                    run = "黑棋";
                    break;
                default:
            }
        }
    }
}
  • 结点类
public class Chess {
    private String value;
    public Chess(String value){
        this.value = value;
    }
    public String getValue() {
        return value;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值