首先介绍一下五子棋的规则:
1、参与人数为两个人;
2、一个人代表黑方,一个人代表白方;
3、先在棋盘上不管是水平、竖直、左斜、右斜的这四个方向上出现连续的五个颜色相同的棋子,表示该方获胜。
接下来再介绍在控制台是如何打印一个五子棋——
1、规定棋盘的大小为:10*10,并且用0来表示初始化的棋盘;
2、用1表示黑方,用2表示白方;
具体的代码实现如下:
import java.util.Scanner;
class Chess{
public static Scanner input=new Scanner(System.in);
public static int[][] chess=new int[10][10];
public static int BLACK_CHESS=1;//黑棋
public static int WRITE_CHESS=2;//白棋
public static void main(String[] args){
while(true){
/*
在游戏刚开始的时候,先进行一轮判断,相当于图形化界面中的
进入游戏和退出游戏——用Y表示进入游戏,N表示退出游戏
*/
System.out.print("游戏已经开始了,请您输入Y或N:");
char start=input.next().charAt(0);
if(start=='Y'){
break;
}else{
continue;
}
}
/*
初始化棋盘
*/
initChess();
/*
打印棋盘
*/
printChess();
/*
黑白方下棋——奇黑偶数
*/
int num=(int)(Math.random()*2);
while(true){
boolean flag;
if(num%2==0){
System.out.println("请黑方开始下棋");
if(downChess(BLACK_CHESS)){
/*
判断输赢
*/
flag=isGameOver();
if(flag){
System.out.println("黑方胜");
break;
}
num++;
/*
打印黑方下完更新后的棋盘
*/
printChess();
}
}else{
System.out.println("请白方开始下棋");
if(downChess(WRITE_CHESS)){
/*
判断输赢
*/
flag=isGameOver();
if(flag){
System.out.println("白方胜");
break;
}
num++;
/*
打印白方下完更新后的棋盘
*/
printChess();
}
}
/*
是否为平局——如果为平局,该棋盘中无一个0出现
*/
if(isDraw()){
System.out.println("该局为平局");
break;
}
}
}
/*
是否为平局
*/
public static boolean isDraw(){
boolean flag=true;
for(int i=0;i<chess.length;i++){
for(int j=0;j<chess[i].length;j++){
/*
遍历该棋盘中的每一个位置,判断该位置是否有0;
如果有,还没到平局
否则,平局
*/
if(chess[i][j]==0){
flag=false;
}
}
System.out.println();
}
return flag;
}
/*
判断输赢
*/
public static boolean isGameOver(){
boolean flag=true;
for(int i=0;i<chess.length;i++){
for(int j=0;j<chess[0].length;j++){
/*
水平
*/
if(j<=chess[i].length-5){
for(int c=j+1;c<=j+4;c++){
if(chess[i][j]!=chess[i][c]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
/*
竖直
*/
if(i<=chess.length-5){
for(int r=i+1;r<=i+4;r++){
if(chess[i][j]!=chess[r][j]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
/*
右斜
*/
if(i>=4&&j<=chess[0].length-5){
for(int r=i-1,c=j+1;c<=j+4;r--,c++){
if(chess[i][j]!=chess[r][c]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
/*
左斜
*/
if(i<=chess.length-5&&j<=chess[0].length-5){
for(int r=i+1,c=j+1;r<=i+4;r++,c++){
if(chess[i][j]!=chess[r][c]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
}
}
return false;
}
/*
初始化棋盘
*/
public static void initChess(){
for(int i=0;i<chess.length;i++){
for(int j=0;j<chess[i].length;j++){
chess[i][j]=0;
}
}
}
/*
打印棋盘
*/
public static void printChess(){
for(int i=0;i<chess[0].length;i++){
System.out.printf("%3d",i+1);
}
System.out.println();
for(int i=0;i<chess.length;i++){
System.out.printf("%-2d",i+1);
for(int j=0;j<chess[i].length;j++){
System.out.print(chess[i][j]+" ");
}
System.out.println();
}
}
/*
黑白方下棋——奇黑偶数
*/
public static boolean downChess(int num){
boolean flag=true;
System.out.print("输入自己想在棋盘上想要下的位置(即坐标):");
int x=input.nextInt()-1;
int y=input.nextInt()-1;
if(chess[x][y]==0){
chess[x][y]=num;
}else{
flag=false;
}
return flag;
}
}