欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java实现五子棋小游戏

程序员文章站 2024-03-24 08:50:22
...

经常听人说不会算法的程序员不是没有灵魂的,于是也想跟随大势上一波车,于是最近在看一些简单的算法,表示挺让人头秃的.

本来是学习稀疏数组和二维数组的转换,发现二维数组的结构挺像棋盘的,就萌生了自己写五子棋的想法(因为不会围棋…).
java实现五子棋小游戏

好了,废话不多说,直接贴代码:

package com.ceeeemall;

import java.util.Scanner;

public class ChessArray {

    private static int  array[][] = new int[12][12];
     private static int row = -1;
    private static int  col = -1;
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        String  user = "y";
        //定义一个原始二维数组,12*12
        System.out.println("开始对弈,"+user+"先开始");
        while(true){
            userInput(user);
            if ( array[row][col] !=0){
                System.out.println("该位置已有棋子,请选择其他位置");
                //下错位置需要让userA重新下一次
               continue;
            }else{
                if (user.equals("y")){
                    array[row][col] = 1;
                    //todo 悔棋

                }else{
                    array[row][col] = 2;
                    //todo 悔棋

                }
                System.out.println(user+"下棋后棋盘显示");
                showChess();
                //判断是否获胜
                if (isWinner(row,col,array[row][col])){
                    System.out.println(user+"获得胜利,游戏结束");
                    return;
                }
                if (user.equals("y")){
                    user ="x";
                }else{
                    user ="y";
                }
            }
        }
    }

    private static void showChess() {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j <array.length ; j++) {
                System.out.printf("%d\t",array[i][j]);
            }
            System.out.println();
        }
    }

    private static void userInput(String username) {
        System.out.println(username+"请输入行");
        row = scanner.nextInt();
        System.out.println(username+"请输入列");
        col = scanner.nextInt();
        if (row >12 || col > 12){
            System.out.println("非法输入,请重新输入");
            userInput(username);
        }
    }


    private static boolean isWinner(int row, int col, int seat) {
        //连子个数
        int count = 1;
        int x =0;
        int y =0;
        //判断落子下边棋子颜色
        for (x = row-1; x >= 0; x--) {
            //如果落子左边得棋子颜色和当前颜色相同则count++
            if (array[x][col] == seat){
                count++;
                //count>=5时则胜利
                if (count >= 5){
                    return true;
                }
            }else {
                break;
            }
        }


        //判断棋子上边
        for (x = row+1; x <=array.length; x++) {
            //如果落子左边得棋子颜色和当前颜色相同则count++
            if (array[x][col] == seat){
                count++;
                //count>=5时则胜利
                if (count>=5){
                    return true;
                }
            }else {
                break;
            }
        }

        //判断棋子右边
        for (y = col+1;y <= array.length; y++) {
            //如果落子上边得棋子颜色和当前颜色相同则count++
            if (array[row][y] == seat){
                count++;
                //count>=5时则胜利
                if (count>=5){
                    return true;
                }
            }else {
                break;
            }
        }

        //判断棋子左边
        for (y = col-1; y >= 0; y--) {
            //如果落子下边得棋子颜色和当前颜色相同则count++
            if (array[row][y] == seat){
                count++;
                //count>=5时则胜利
                if (count>=5){
                    return true;
                }
            }else {
                break;
            }
        }

        //还需要判断斜上方
        for (x=row+1,y=col+1; x <=array.length && y<=array.length; x++,y++) {
            if (array[x][y] ==seat){
                count++;
                if (count>=5){
                    return true;
                }
            }else {
                break;
            }

        }

        //还需要判断斜下方
        for (x=row-1,y=col-1; x >= 0 && y >= 0; x--,y--) {
            if (array[x][y] ==seat){
                count++;
                if (count>=5){
                    return true;
                }
            }else {
                break;
            }
        }
        return false;
    }


}

给大家看看效果:

java实现五子棋小游戏

一方获胜后程序终止:
java实现五子棋小游戏

大家可以自己玩玩,目前只有下棋和获胜的功能,如果加其他功能会更新,有哪个地方逻辑不懂可以留言问我哦~~

相关标签: java 算法