第一种:直接在一个java文件中实现
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//初始化棋盘
String[][] bang=new String[20][20];
String[] number={"⑴","⑵","⑶","⑷","⑸","⑹","⑺","⑻","⑼","⑽","⑾","⑿","⒀","⒁","⒂","⒃","⒄","⒅","⒆",""};
for (int i = 0; i < bang.length; i++) {
for (int j = 0; j < bang[i].length; j++) {
bang[i][j]="┼";
if(i==0)
bang[i][j]="┬";
if(j==0)
bang[i][j]="├";
if(i==18)
bang[i][j]="┴";
if(j==18)
bang[i][j]="┤";
if(i==0&&j==0)
bang[i][j]="┌";
if(i==0&&j==18)
bang[i][j]="┐";
if(i==18&&j==0)
bang[i][j]="└";
if(i==18&&j==18)
bang[i][j]="┘";
if(i==bang.length-1)
bang[i][j]=number[j];
if(j==bang.length-1)
bang[i][j]=number[i];
}
}
//打印棋盘
for (String[] element : bang) {
for (String string : element) {
System.out.print(string);
}
System.out.println();
}
//落子操作
boolean flag=true;
int count=0;
while(true){
System.out.println((flag?"黑":"白")+"子坐标:");
Scanner scan=new Scanner(System.in);
int x=scan.nextInt()-1;
int y=scan.nextInt()-1;
if(x<0||x>18||y<0||y>18){
System.out.println("下在棋盘外面,请重新下");
continue;
}
if(bang[x][y].equals("●")||bang[x][y].equals("○")){
System.out.println("这里对方已经落子,请重新下");
continue;
}
bang[x][y]=flag?"●":"○";
count++;
//打印棋盘
for (String[] element : bang) {
for (String string : element) {
System.out.print(string);
}
System.out.println();
}
if(count>=9){
String str=bang[x][y];
int num1=1,num2=1,num3=1,num4=1;
for(int i=1;i<5;i++){
if(y-i>=0&&bang[x][y-i].equals(str))
num1++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&bang[x][y+i].equals(str))
num1++;
else
break;
}
for(int i=1;i<5;i++){
if(x-i>=0&&bang[x-i][y].equals(str))
num2++;
else
break;
}
for(int i=1;i<5;i++){
if(y-i>=0&&x+i<=18&&bang[x+i][y-i].equals(str))
num2++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&x+i<=18&&bang[x+i][y+i].equals(str))
num3++;
else
break;
}
for(int i=1;i<5;i++){
if(y-i>=0&&x-i>=0&&bang[x-i][y-i].equals(str))
num3++;
else
break;
}
for(int i=1;i<5;i++){
if(x+i<=18&&y-i>=0&&bang[x+i][y-i].equals(str))
num4++;
else
break;
}
for(int i=1;i<5;i++){
if(x-i>=0&&y+i<=18&&bang[x-i][y+i].equals(str))
num4++;
else
break;
}
if(num1>=5||num2>=5||num3>=5||num4>=5){
System.out.println("恭喜"+(flag?"黑":"白")+"子获得胜利。");
break;
}
}
flag=!flag;
}
}
}
第二种:应用面向对象的思想实现
这里将五子棋分为GoBang棋盘类和Test测试类
首先是GoBang棋盘类
public class GoBang {
private String[][] bang=new String[20][20];
private String[] number={"⑴","⑵","⑶","⑷","⑸","⑹","⑺","⑻","⑼","⑽","⑾","⑿","⒀","⒁","⒂","⒃","⒄","⒅","⒆",""};
public String[][] getBang() {
return bang;
}
public void setBang(String[][] bang) {
this.bang = bang;
}
//构造方法
public GoBang(){
init();
printGoBang();
}
//初始化棋盘
private void init() {
for (int i = 0; i < bang.length; i++) {
for (int j = 0; j < bang[i].length; j++) {
bang[i][j]="┼";
if(i==0)
bang[i][j]="┬";
if(j==0)
bang[i][j]="├";
if(i==18)
bang[i][j]="┴";
if(j==18)
bang[i][j]="┤";
if(i==0&&j==0)
bang[i][j]="┌";
if(i==0&&j==18)
bang[i][j]="┐";
if(i==18&&j==0)
bang[i][j]="└";
if(i==18&&j==18)
bang[i][j]="┘";
if(i==bang.length-1)
bang[i][j]=number[j];
if(j==bang.length-1)
bang[i][j]=number[i];
}
}
}
//打印棋盘
public void printGoBang() {
for (String[] element : bang) {
for (String string : element) {
System.out.print(string);
}
System.out.println();
}
}
//判断是否正确落子
public boolean play(int x,int y,boolean flag) {
// TODO Auto-generated method stub
if(x<0||x>18||y<0||y>18){
System.out.println("下在棋盘外面,请重新下");
return false;
}
if(bang[x][y].equals("●")||bang[x][y].equals("○")){
System.out.println("这里对方已经落子,请重新下");
return false;
}
bang[x][y]=flag?"●":"○";
return true;
}
public int count1(int x,int y,boolean flag) {
String str=flag?"●":"○";
int count=1;
for(int i=1;i<5;i++){
if(y-i>=0&&bang[x][y-i].equals(str))
count++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&bang[x][y+i].equals(str))
count++;
else
break;
}
return count;
}
public int count2(int x,int y,boolean flag) {
String str=flag?"●":"○";
int count=1;
for(int i=1;i<5;i++){
if(y-i>=0&&bang[x][y-i].equals(str))
count++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&bang[x][y+i].equals(str))
count++;
else
break;
}
return count;
}
public int count3(int x,int y,boolean flag) {
String str=flag?"●":"○";
int count=1;
for(int i=1;i<5;i++){
if(y-i>=0&&bang[x][y-i].equals(str))
count++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&bang[x][y+i].equals(str))
count++;
else
break;
}
return count;
}
public int count4(int x,int y,boolean flag) {
String str=flag?"●":"○";
int count=1;
for(int i=1;i<5;i++){
if(y-i>=0&&bang[x][y-i].equals(str))
count++;
else
break;
}
for(int i=1;i<5;i++){
if(y+i<=18&&bang[x][y+i].equals(str))
count++;
else
break;
}
return count;
}
}
Test测试类
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//初始化棋盘
GoBang Bang= new GoBang();
//落子操作
boolean flag=true;//用来判断是黑子还是白子
int count=0;//用来统计下了几颗子
Scanner scan=new Scanner(System.in);
while(true){
System.out.println((flag?"黑":"白")+"子坐标:");
int x=scan.nextInt()-1;
int y=scan.nextInt()-1;
boolean play=Bang.play(x,y,flag);//落子
if(!play)
continue;
count++;
//打印棋盘
Bang.printGoBang();
//判断是否获胜,只有当下第九颗棋子才有可能获胜
if(count>=9){
int num1,num2,num3,num4;//用来记录四个方向的棋子数
num1=Bang.count1(x,y,flag);
num2=Bang.count2(x,y,flag);
num3=Bang.count3(x,y,flag);
num4=Bang.count4(x,y,flag);
if(num1>=5||num2>=5||num3>=5||num4>=5){
System.out.println("恭喜"+(flag?"黑":"白")+"子获得胜利。");
break;
}
}
flag=!flag;
}
scan.close();
}
}
初始化棋盘如下:
胜利后如下(只展示最后一步):
由于只有自己测试过,如果有错误,还望指出。