五子棋游戏

五子棋游戏

先对全局变量进行定义,赋值,方便后面五子棋棋盘的创建。

static String white = "☆";
static String black = "★";
static String[][] a = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static Scanner scanner = new Scanner(System.in);
static boolean flag = true;```
```java

使用init方法对棋盘进行初始化

public static void init(){
        //初始化棋盘
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length ; j++) {
                a[i][j]=line;
                if(j==a[i].length-1){
                    a[i][j]=num[i];
                }
                if(i== a.length-1){
                    a[i][j] = num[j];
                }
            }
        }
    }

使用print方法对棋盘进行输出

public static void print(){

        for (int i = 0; i < a.length ; i++) {
            for (int j = 0; j < a[i].length; j++) {

                System.out.print(a[i][j]);
            }
            System.out.println();
        }
    }

使用input方法来实现五子棋的落点

  private static void input() {
        print();
        boolean flag = true;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            if (flag) {
                System.out.println("请黑子下子:");
                int black1 = scanner.nextInt()-1;
                int black2 = scanner.nextInt()-1;
                boolean result = check(black1, black2);
                if (!result) {
                    System.out.println("输入有误,请重新输入:");
                    black1 = scanner.nextInt()-1;
                    black2 = scanner.nextInt()-1;
                }
                a [black1][black2] = black;
                print();
                boolean blackwin = iswin(black1, black2, black);
                if (blackwin) {
                    System.out.println("黑棋获胜!");
                    break;
                } else {
                    flag = false;
                }
            } else {
                System.out.println("请白子下子:");
                int white1 = scanner.nextInt()-1;
                int white2 = scanner.nextInt()-1;
                boolean result1 = check(white1, white2);
                if (!result1) {
                    System.out.println("输入有误,请重新输入:");
                    white1 = scanner.nextInt()-1;
                    white2 = scanner.nextInt()-1;
                }
                a[white1][white2] = white;
                print();
                boolean whitewin = iswin(white1, white2, white);
                if (whitewin) {
                    System.out.println("白棋获胜!");
                    break;
                } else {
                    flag = true;
                }
            }
        }
    }

使用check方法来判断是否越界,是否重复

 public static boolean check(int x,int y){
        //判断是否越界,是否重复
        if(x<0 || y<0 || y>=14 || x>=14){
            return false;
        }
        if(!a[x][y].equals(line)){
            return false;
        }
        return true;
    }

使用iswin判断哪方获胜:

 private static boolean iswin(int x, int y, String qizi) {
        //水平查找
        int spsum = 1;
        //水平向左边找
        for (int lefty = y-1; lefty>=0 ; lefty--) {
            if(a [x][lefty].equals(qizi)){
                spsum++;
            }else{
                break;
            }
        }
        if (spsum>=5){
            return true;
        }
        //水平向右找
        for (int righty = y+1; righty < a.length; righty++) {
            if(a[x][righty].equals(qizi)){
                spsum++;
            }else{//一旦不连续了就终止
                break;
            }
        }
        if (spsum>=5){
            return true;
        }


        //斜向  \
        int xx1sum = 1;
        for(int xx=x-1,xy=y-1;xx>=0&&xy>=0;xx--,xy--){//向当前棋子的左边查找
            if(a[xx][xy].equals(qizi)){
                xx1sum++;
            }else{
                break;//一旦遇到不是自己的棋子,不连续 终止
            }
        }
        if(xx1sum>=5){
            return true;
        }

        for(int xx=x+1,xy=y+1;xx<a.length-1 && xy< a.length-1;xx++,xy++){
            if(a[xx][xy].equals(qizi)){
                xx1sum++;
            }else{
                break;
            }
        }
        if(xx1sum>=5){
            return true;
        }
        return false;
    }


最后我们看看代码
package day4;

import java.util.Scanner;

public class WZQ1 {

    static String white = "☆";
    static String black = "★";
    static String[][] a = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";
    static Scanner scanner = new Scanner(System.in);
    static boolean flag = true;

    public static void main(String[] args) {

        init();

        input();
    }

    public static void init(){
        //初始化棋盘
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length ; j++) {
                a[i][j]=line;
                if(j==a[i].length-1){
                    a[i][j]=num[i];
                }
                if(i== a.length-1){
                    a[i][j] = num[j];
                }
            }
        }
    }
    public static void print(){

        for (int i = 0; i < a.length ; i++) {
            for (int j = 0; j < a[i].length; j++) {

                System.out.print(a[i][j]);
            }
            System.out.println();
        }
    }




    private static void input() {
        print();
        boolean flag = true;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            if (flag) {
                System.out.println("请黑子下子:");
                int black1 = scanner.nextInt()-1;
                int black2 = scanner.nextInt()-1;
                boolean result = check(black1, black2);
                if (!result) {
                    System.out.println("输入有误,请重新输入:");
                    black1 = scanner.nextInt()-1;
                    black2 = scanner.nextInt()-1;
                }
                a [black1][black2] = black;
                print();
                boolean blackwin = iswin(black1, black2, black);
                if (blackwin) {
                    System.out.println("黑棋获胜!");
                    break;
                } else {
                    flag = false;
                }
            } else {
                System.out.println("请白子下子:");
                int white1 = scanner.nextInt()-1;
                int white2 = scanner.nextInt()-1;
                boolean result1 = check(white1, white2);
                if (!result1) {
                    System.out.println("输入有误,请重新输入:");
                    white1 = scanner.nextInt()-1;
                    white2 = scanner.nextInt()-1;
                }
                a[white1][white2] = white;
                print();
                boolean whitewin = iswin(white1, white2, white);
                if (whitewin) {
                    System.out.println("白棋获胜!");
                    break;
                } else {
                    flag = true;
                }
            }
        }
    }
    public static boolean check(int x,int y){
        //判断是否越界,是否重复
        if(x<0 || y<0 || y>=14 || x>=14){
            return false;
        }
        if(!a[x][y].equals(line)){
            return false;
        }
        return true;
    }
    private static boolean iswin(int x, int y, String qizi) {
        //水平查找
        int spsum = 1;
        //水平向左边找
        for (int lefty = y-1; lefty>=0 ; lefty--) {
            if(a [x][lefty].equals(qizi)){
                spsum++;
            }else{
                break;
            }
        }
        if (spsum>=5){
            return true;
        }
        //水平向右找
        for (int righty = y+1; righty < a.length; righty++) {
            if(a[x][righty].equals(qizi)){
                spsum++;
            }else{//一旦不连续了就终止
                break;
            }
        }
        if (spsum>=5){
            return true;
        }


        //斜向  \
        int xx1sum = 1;
        for(int xx=x-1,xy=y-1;xx>=0&&xy>=0;xx--,xy--){//向当前棋子的左边查找
            if(a[xx][xy].equals(qizi)){
                xx1sum++;
            }else{
                break;//一旦遇到不是自己的棋子,不连续 终止
            }
        }
        if(xx1sum>=5){
            return true;
        }

        for(int xx=x+1,xy=y+1;xx<a.length-1 && xy< a.length-1;xx++,xy++){
            if(a[xx][xy].equals(qizi)){
                xx1sum++;
            }else{
                break;
            }
        }
        if(xx1sum>=5){
            return true;
        }
        return false;
    }


    }







```java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值