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]='┼';
            }
        }
    }

}

三:结果:

相关推荐
Ylucius6 分钟前
常见服务器大全----都是什么?又有何作用?区别联系是什么?---web,应用,数据库,文件,消息队列服务器,Tomat,Nginx,vite.....
java·前端·javascript·chrome·学习·node.js·express
wjs20248 分钟前
CSS3 字体
开发语言
茜茜西西CeCe10 分钟前
移动技术开发:RecyclerView瀑布流水果列表
android·java·安卓·android-studio·recycleview·移动技术开发
熙曦Sakura1 小时前
【C/C++】错题记录(一)
java·c语言·c++
Byron Loong1 小时前
c# 子类继承父类接口问题
开发语言·c#
2301_775602382 小时前
C++11 多线程编程-小白零基础到手撕线程池
开发语言·c++
码农豆豆2 小时前
11.C++程序中的常用函数
开发语言·c++·算法
无极程序员2 小时前
读取到json数据拿出来,修改后重新写入json文件
android·java·开发语言·后端·json·php
艾伦~耶格尔2 小时前
Java 之 ssm框架入门
java·开发语言·后端·spring·mybatis·ssm
尘浮生2 小时前
Java项目实战II基于Java+Spring Boot+MySQL的美容院管理系统设计与实现(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea