import java.util.Scanner;
public class WZQ {
static String[][] qp = new String[15][15]; //{{null,null},{null,null}}
static String white = "☆";
static String black = "★";
static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
static String line = "十";
static boolean flag = true;
static Scanner sca =new Scanner(System.in);
public static void main(String[] args) {
WZQ.initqp();
WZQ.printqp();
WZQ.start();
}
//开始下棋
public static void start(){
while(true){
if(flag==true){
System.out.println("请黑棋落子");
int x =sca.nextInt()-1;
int y= sca.nextInt()-1;
boolean res=check(x,y);
if(res){
qp[y][x]= black;
WZQ.printqp();
boolean win =WZQ.iswin(y,x,black);
if(win){
System.out.println("黑棋胜");
break;
}else{
flag =false;
}
}else{
System.out.println("落子有误,请黑棋重新落子");
}
}else{
System.out.println("请白棋落子");
int x =sca.nextInt()-1;
int y= sca.nextInt()-1;
boolean res=check(x,y);
if(res){
qp[y][x]= white;
WZQ.printqp();
boolean win = WZQ.iswin(y,x,white);
if(win){
System.out.println("白棋胜");
break;
}else{
flag = true;
}
}else{
System.out.println("落子有误,请白棋重新落子");
}
}
}
}
//判断输赢
public static boolean iswin(int y,int x,String qz){
int spsum=1;//水平计数
int szsum =1;//竖直计数
//水平查找
for(int lx=x-1;lx>=0;lx--){ //水平向左查
if(qp[y][lx].equals(qz)){
spsum++;
}else{
break;
}
}
if(spsum>=5){
return true;
}else{
for(int rx=x+1;rx< qp.length-1;rx++){ //水平向右查
if(qp[y][rx].equals(qz)){
spsum++;
}else{
break;
}
}
if(spsum>=5){
return true;
}
}
//竖直查找
for(int uy=y-1;uy>=0;uy--){ //竖直向上查
if(qp[uy][x].equals(qz)){
szsum++;
}else{
break;
}
}
if(szsum>=5){
return true;
}else{
for(int dy=y+1;dy< qp.length-1;dy++){ //垂直向下查找
if(qp[dy][x].equals(qz)){
szsum++;
}else{
break;
}
}
if(szsum>=5){
return true;
}
}
int lusum=1;//西北--东南方向
for(int lx=x-1,uy=y-1;lx>=0&&uy>=0;lx--,uy--) {
if (qp[uy][lx].equals(qz)) {
lusum++;
} else {
break;
}
}
if(lusum>=5){
return true;
}else{
for(int rx=x+1,dy=y+1;rx< qp.length-1&&dy< qp.length-1;rx++,dy++){
if(qp[dy][rx].equals(qz)){
lusum++;
}else{
break;
}
if(lusum>=5){
return true;
}
}
}
int ulsum=1;//东北--西南方向
for(int xr=x+1,yu=y-1;xr<=qp.length-1&&yu>=0;xr++,yu--) {
if (qp[yu][xr].equals(qz)) {
ulsum++;
} else {
break;
}
if (ulsum >= 5) {
return true;
} else {
for (int xl =x-1,yd=y+1;xl>=0&&yd<qp.length-1;xl--, yd++) {
if (qp[yd][xl].equals(qz)) {
ulsum++;
} else {
break;
}
if (ulsum >= 5) {
return true;
}
}
}
}
return false;
}
//判断是否越界与重复
public static boolean check(int x,int y){
if(x<0||x>=qp.length-1||y<0||y>=qp.length-1){
return false;//不可落子
}
if(!qp[y][x].equals(line)){
return false;//false表示不可落子
}
return true;
}
//初始化棋盘
public static void initqp(){
for(int i=0;i<qp.length;i++){
for(int j=0;j<qp[i].length;j++){
qp[i][j]= line;
if(j== qp[i].length-1){
qp[i][j]=num[i];
}
if(i==qp.length-1){
qp[i][j]=num[j];
}
}
}
}
//打印棋盘
public static void printqp(){
for(int i=0;i<qp.length;i++){
for(int j=0;j<qp[i].length;j++){
System.out.print(qp[i][j]);
}
System.out.println();
}
}
}
五子棋--java实现
于 2023-03-19 16:30:27 首次发布