Java五子棋

#java五子棋写法

  • 话不多说,先上代码:
import java.util.Scanner;

public class FiveClass {
    //定义静态数组用作棋盘的动态化变化
    static String[][] a=new String[15][15];
    //定义棋子在棋盘中x的位置
    static int n1=1;
    //定义棋子在棋盘中y的位置
    static int n2=1;
    //1,2,3来定义黑棋在棋盘内横,竖,斜连续的数量
    static int sum1=0;
    static int sum2=0;
    static int sum3=0;
    //4,5,6来定义黑棋在棋盘内横,竖,斜连续的数量
    static int sum4=0;
    static int sum5=0;
    static int sum6=0;
//创造初始界面的棋盘
    public static void CreatCharm(){
        //创建索引来把数字插入棋盘中
        int k1=0;
        int k2=0;
        //定义棋盘数字数组
        String[] num={"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
        for(int i=0;i<a.length;i++){
            if(i==14){
                for(k2=0;k2<15;k2++)
                    a[i][k2]=num[k2];
            }
            else{
                for(int j=0;j<a.length;j++){
                    if(j==14&&i<14){
                        a[i][j]=num[k1];
                        k1++;
                    }
                    else{
                        a[i][j]="十";
                    }
                }
            }
        }
    }
//对棋盘进行遍历展示
    public static void Show(){
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length;j++){
                System.out.print(a[i][j]);
            }
            System.out.println();
        }
    }
//判断输入错误的的解决方法
    public static void exmine() {
        Scanner scan1 = new Scanner(System.in);
        while (true) {
            System.out.println("输入错误");
            System.out.println("请重新输入:");
            n1 = scan1.nextInt();
            n2 = scan1.nextInt();
            if ((n1 < 15 && n1 > 0) && (n2 < 15 && n2 > 0)) {
                break;
            }
        }
    }
//判断获胜的条件
    public static int win() {
//对于横着的情况
        if(n2>1&&n2<14){
            //如果和左边与右边连续的黑子,则黑子横向变量sum1+1;
            if(a[n1-1][n2-2].equals("★")||a[n1-1][n2].equals("★")){
                sum1+=1;
            }
        }
//对于纵向的情况
        if(n1>1&&n1<14){
            //如果和上边与下边连续的黑子,则黑子横向变量sum2+1;
            if(a[n1-2][n2-1].equals("★")||a[n1][n2-1].equals("★")){
                sum2+=1;
            }
        }
//对于斜向的情况
        if(n1>1&&n2>1&&n1<14&&n2<14) {
            //如果和左斜上边与右斜上边和左斜下边和右斜下边连续的黑子,则黑子横向变量sum3+1;
            if (a[n1 - 2][n2 - 2].equals("★") || a[n1][n2].equals("★") || a[n1 ][n2 - 2].equals("★") || a[n1 - 2][n2].equals("★")) {
                sum3 += 1;
            }
        }
//对于横着的情况
        if(n1>1&&n1<14){
            //如果和左边与右边连续的白子,则白子横向变量sum4+1;
            if(a[n1-2][n2-1].equals("☆")||a[n1][n2-1].equals("☆")){
                sum4+=1;
            }
        }
//对于纵向的情况
        if(n1>1&&n1<14){
            //如果和上边与下边连续的白子,则白子横向变量sum5+1;
            if(a[n1-2][n2-1].equals("☆")||a[n1][n2-1].equals("☆")){
                sum5+=1;
            }
        }
//对于斜向的情况
        if(n1>1&&n2>1&&n1<14&&n2<14) {
            //如果和左斜上边与右斜上边和左斜下边和右斜下边连续的黑子,则黑子横向变量sum6+1;
            if (a[n1 - 2][n2 - 2].equals("☆") || a[n1][n2].equals("☆") || a[n1 ][n2 - 2].equals("☆") || a[n1 - 2][n2].equals("☆")) {
                sum6 += 1;
            }
        }
//由于不算此时的棋子数量,故只需判断4个与它相同的棋子数即可
        if(sum1==4){
            System.out.println("黑子赢");
            return -1;
        }
        if(sum2==4){
            System.out.println("黑子赢");
            return -1;
        }
        if(sum3==4){
            System.out.println("黑子赢");
            return -1;
        }
        if(sum4==4){
            System.out.println("白子赢");
            return -1;
        }
        if(sum5==4){
            System.out.println("白子赢");
            return -1;
        }
        if(sum6==4){
            System.out.println("白子赢");
            return -1;
        }
        return 0;
    }


    public static void main(String[] args) {
        //创建初始棋盘
        CreatCharm();
        //展示初始棋盘
        Show();
        Scanner scan=new Scanner(System.in);
        while(true){
            System.out.println("请黑子下子:");
            //输入黑棋的坐标
            n1=scan.nextInt();
            n2=scan.nextInt();
            //如果输入的位置不在棋盘内进入报错方法内
            if((n1>=15||n1<=0)||(n2>=15||n2<=0)){
                exmine();
            }
            //如果输入的棋子重复了,也进入报错方法内
            if(a[n1-1][n2-1]!="十"){
                System.out.println("不能重复下子");
                exmine();
            }
            //将输入的棋子放在棋盘中
            a[n1-1][n2-1]="★";
            //判断是否获胜
            int x=win();
            //如果获胜的情况:
            if(x==-1){
                //展示棋盘
                Show();
                System.out.println("游戏结束");
                //结束程序
                break;
            }
            Show();

//与上述黑子思想相同
            System.out.println("请白子下子:");
            n1=scan.nextInt();
            n2=scan.nextInt();
            if((n1>=15||n1<=0)||(n2>=15||n2<=0)){
                exmine();
            }
            if(a[n1-1][n2-1]!="十"){
                System.out.println("不能重复下子");
                exmine();
            }
            a[n1-1][n2-1]="☆";
            win();
            if(x==-1){
                Show();
                System.out.println("游戏结束");
                break;
            }
            Show();
        }
    }
}
  • 先创建一个棋盘,在主方法中将棋盘展示,其次写出各种方法(棋盘要写成静态变量,方便继承之前的棋子),方法有判断棋子是否越界,棋子是否重复,最后判断谁先成五子并获胜,各种方法的细节在代码中有相应注释。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值