首先介绍一下五子棋的规则:
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;
-
}
-
}
转载:https://blog.csdn.net/Tough_dxx/article/details/104407352
查看评论