Java五子棋

目录

一:案例要求:

二:代码:

三:结果:


一:案例要求:

实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘,把每个元素赋值位"┼"可以画出棋盘, "○"代表该交叉点下了一颗白棋子,"●"代表该交叉点下了一颗黑棋子。每次用户输入要下棋的坐标,然后程序显示出下完后的棋盘,默认黑子先行。(选做)

二:代码:

java 复制代码
package ceshi;

import java.util.Scanner;

public class test {
    static Scanner sc =new Scanner(System.in);
    public static void main(String[] args) {
        char[][] qipan=new char[15][15];
        origin(qipan);//初始化
        menu(qipan);//打印棋盘
        int flag=1;
        int a=-10;
        int [] a1;
        char s;
        while (true) {
            a1=xia(qipan, flag);//下棋操作(flag)决定下黑棋还是白棋
            s=flag==1?'●':'○';
            a=judge(qipan,a1,s);//判断下棋位置是否已有棋子和是否获胜
            if(a==1){
                System.out.println("黑棋获胜");break;
            }
            if(a==-1){
                System.out.println("白棋获胜");break;
            }
            flag*=-1;
        }
    }

    private static int judge(char[][] qipan,int[] a1,char s) {//判断下棋位置是否已有棋子和是否获胜
        int n=0,n1=1;
        int f1=-1,f2=-1;
        int sizelie=1,sizehang=1,sizexie=1,sizexie1=1;
        int i=a1[0];
        int j=a1[1];
        while(n<5){//列
            if(i<=0){
                f1=0;
            } else if (i==14) {
                f2=0;
            }
            if(f1!=0){
                if(qipan[i+n1][j]==s){
                    sizelie++;
                }else{
                    f1=0;
                }
            }
            if(f2!=0){
                if(qipan[i-n1][j]==s){
                    sizelie++;
                }else{
                    f2=0;
                }
            }
            if(sizelie>=5){
                return 1;
            }
            n++;n1++;
        }
        n=0;n1=1;
        f1=f2=-1;
        while(n<5){//行
            if(j<=0){
                f1=0;
            } else if (j==14) {
                f2=0;
            }
            if(f1!=0){
                if(qipan[i][j-n1]==s){
                    sizehang++;
                }else{
                    f1=0;
                }
            }
            if(f2!=0){
                if(qipan[i][j+n1]==s){
                    sizehang++;
                }else{
                    f2=0;
                }
            }
            if(sizehang>=5){
                return 1;
            }
            n++;n1++;
        }
        n=0;n1=1;
        f1=f2=-1;
        while(n<5){//斜着
            if(j<=0||i==0){
                f1=0;
            } else if (j==14||i==14) {
                f2=0;
            }
            if(f1!=0){
                if(qipan[i-n1][j-n1]==s){
                    sizexie++;
                }else{
                    f1=0;
                }
            }
            if(f2!=0){
                if(qipan[i+n1][j+n1]==s){
                    sizexie++;
                }else{
                    f2=0;
                }
            }
            if(sizexie>=5){
                return 1;
            }
            n++;n1++;
        }
        n=0;n1=1;
        f1=f2=-1;
        while(n<5){//斜着fan
            if(j==14||i==0){//右上
                f1=0;
            } else if (j==0||i==14) {
                f2=0;
            }
            if(f1!=0){
                if(qipan[i-n1][j+n1]==s){
                    sizexie1++;
                }else{
                    f1=0;
                }
            }
            if(f2!=0){
                if(qipan[i+n1][j-n1]==s){
                    sizexie1++;
                }else{
                    f2=0;
                }
            }
            if(sizexie1>=5){
                return 1;
            }
            n++;n1++;
        }
        return 0;
    }

    private static int[] xia(char[][] qipan,int flag) {//下棋操作(flag)决定下黑棋还是白棋
        char s=flag==1?'●':'○';
        if(s=='●'){
            System.out.print("请选择'●'的坐标:");
        }else {
            System.out.print("请选择'○'的坐标:");
        }
        int x=0,y=0;
        while (true) {
            x=sc.nextInt();
            y=sc.nextInt();
            if(qipan[x][y]!='┼'){
                System.out.println("该位置已有棋子,请重新输入:");
            }else{
                break;
            }
        }
        qipan[x][y]=s;
        menu(qipan);
        int[] a={x,y};
        return a;
    }

    private static void menu(char[][] qipan) {
        System.out.print("   ");
        for (int i = 0; i < 15; i++) {
            System.out.print((i+1)+"  ");
        }
        System.out.println();
        for(int i=0;i<15;i++){
            if(i<9)
                System.out.print(i+1+"   ");
            else
                System.out.print(i+1+"  ");
            for(int j=0;j<15;j++){
                System.out.print(qipan[i][j]+"   ");
            }
            System.out.println();
        }
    }

    private static void origin(char[][] qipan) {//初始化
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                qipan[i][j]='┼';
            }
        }
    }

}

三:结果:

相关推荐
_oP_i18 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx21 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
bryant_meng23 分钟前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
若亦_Royi1 小时前
C++ 的大括号的用法合集
开发语言·c++
资源补给站2 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
m0_748247552 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala