二维数组应用——五子棋
import java.util.Scanner;
public class GoBang {
public static void main(String[] args) {
//棋盘设置
//棋盘长度
int len=21;
//棋盘容器(二维数组,动态初始化)
String[][] goBang=new String[len][len];
//棋盘的符号
String add = "┼";//╋
String black = "●";
String white = "○";
String[] indexs = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖","⒗","⒘","⒙","⒚","⒛","21"};
//初始化棋盘数组
for(int i=0;i<goBang.length;i++){
for(int j=0;j<goBang[i].length;j++){
if(j==goBang[i].length-1){//在棋盘的最后一列标明行数
goBang[i][j]=indexs[i];
}else if(i==goBang[i].length-1){//在棋盘的最后一行标明列数
goBang[i][j]=indexs[j];
}else {
goBang[i][j]=add;
}
}
}
//输出棋盘看效果
for (String[] gobang1:goBang) {
for (String element:gobang1) {
System.out.print(element);
}
System.out.println();
}
//输入
Scanner scan= new Scanner(System.in);
//设置棋子状态
boolean gobang=true;//true为黑子,false为白子。
//控制循环的变量
boolean flag=true;
//循环
while(flag){
System.out.println("请"+((gobang)?"黑":"白")+"子输入落子坐标:");
int x=scan.nextInt()-1;//行,-1是因为数组从0开始,我们输入坐标是从1开始
int y=scan.nextInt()-1;//列
//输入坐标不在棋盘上
if(x<0||x>len-2||y<0||y>len-2){//为什么不是len-1,因为len-1标明了行列数。
System.out.println("落子失败—输入坐标超出棋盘范围");
continue;
}
//落子的坐标已有棋子
if(!goBang[x][y].equals(add)){
System.out.println("落子失败—输入坐标已有棋子");
continue;
}
//落子
goBang[x][y]=((gobang?black:white));
//打印棋盘
for (String[] gobang1:goBang) {
for (String element:gobang1) {
System.out.print(element);
}
System.out.println();
}
//判断输赢
int isWin=result(goBang);
if(isWin==1){
System.out.println("黑子胜利!!");
break;
}else if(isWin==2){
System.out.println("白子胜利!!");
break;
}
//棋子置反
gobang=!gobang;
}
//关闭资源
scan.close();
}
//判断输赢
public static int result(String[][] goBang){
int flag=0;//1为黑子胜利,2为白子胜利。
//横向扫描
for(int i=0;i<goBang.length-1;i++){
int count=1;
String temp=goBang[i][0];//每行的第一个元素,可以为加号
for(int j=1;j<goBang[i].length-1;j++){
if(goBang[i][j]==temp){
count++;
}else{
count=1;//重新计数
temp=goBang[i][j];
}
if(count==5&&temp=="●"){
//黑子胜利
flag=1;
}
if(count==5&&temp=="○"){
//白子胜利
flag=2;
}
}
}
//纵向扫描
for(int j=0;j<goBang.length-1;j++){
int count=1;
String temp=goBang[0][j];//每列的第一个元素,可以为加号
for(int i=1;i<goBang[j].length-1;i++){
if(goBang[i][j]==temp){
count++;
}else{
count=1;//重新计数
temp=goBang[i][j];
}
if(count==5&&temp=="●"){
//黑子胜利
flag=1;
}
if(count==5&&temp=="○"){
//白子胜利
flag=2;
}
}
}
//西北到东南方向\
for(int i=0;i<goBang.length-1-4;i++) {
int count = 1;
String temp = goBang[i][0];//每行的第一个元素,可以为加号
int x = i;
int y = 0;
for (int j = 1; j < goBang[i].length - i; j++, x++, y++) {
if (goBang[x + 1][y + 1] == temp) {
count++;
} else {
count = 1;//重新计数
temp = goBang[x + 1][y + 1];
}
if (count == 5 && temp == "●") {
//黑子胜利
flag = 1;
}
if (count == 5 && temp == "○") {
//白子胜利
flag = 2;
}
}
}
for(int j=0;j<goBang.length-1-4;j++) {
int count = 1;
String temp = goBang[0][j];//每行的第一个元素,可以为加号
int x = 0;
int y = j;
for (int i = 1; i < goBang[j].length - j; i++, x++, y++) {
if (goBang[x + 1][y + 1] == temp) {
count++;
} else {
count = 1;//重新计数
temp = goBang[x + 1][y + 1];
}
if (count == 5 && temp == "●") {
//黑子胜利
flag = 1;
}
if (count == 5 && temp == "○") {
//白子胜利
flag = 2;
}
}
}
//东北到西南方向/
for(int i=4;i<goBang.length-1;i++) {
int count=1;
String temp = goBang[i][0];//每行的第一个元素,可以为加号
int x = i;
int y = 0;
for (int j = 1; j < i+1; j++, x--, y++) {
if (goBang[x - 1][y + 1] == temp) {
count+=1;
} else {
count = 1;//重新计数
temp = goBang[x - 1][y + 1];
}
if (count == 5 && temp == "●") {
//黑子胜利
flag = 1;
}
if (count == 5 && temp == "○") {
//白子胜利
flag = 2;
}
}
}
for(int j=0;j<goBang.length-1-4;j++) {
System.out.print("j="+j+" ");
int count = 1;
String temp = goBang[goBang.length-2][j];//每行的第一个元素,可以为加号
System.out.println("temp="+temp+" ");
System.out.println();
int x = goBang.length-2;
int y = j;
for (int i = goBang.length-2; i >j; i--, x--, y++) {
System.out.print("("+(x-1+1)+","+(y+1+1)+")");
System.out.println(goBang[x-1][y+1]);
System.out.print(i+" ");
System.out.print(temp+" ");
if (goBang[x - 1][y + 1] == temp) {
count++;
} else {
count = 1;//重新计数
temp = goBang[x - 1][y + 1];
}
System.out.print(count);
if (count == 5 && temp == "●") {
//黑子胜利
flag = 1;
}
if (count == 5 && temp == "○") {
//白子胜利
flag = 2;
}
}
}
return flag;
}
}
如有错误,欢迎指正!!!!谢谢!!!