java实现五子棋小游戏

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

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

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

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("该位置已有棋子,请选择其他位置");
                //下错位置需要让user重新下一次
               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 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实现五子棋小游戏_第2张图片

一方获胜后程序终止:
java实现五子棋小游戏_第3张图片

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

你可能感兴趣的:(java)