Game类
package 五子棋;
import java.util.Scanner;
/*
* 黑棋:⚫ 白棋:⚪
* n子棋的棋盘格式满足(n-2)*n ×(n-2)*n规格
* 需要的方法
* 1.初始化棋盘(设置棋盘规格和给棋盘样式初始化)
* 2.打印棋盘
* 3.玩游戏
* 4.落棋子方法(输入x,y坐标)
* 5.判断游戏是否结束(棋盘满了或者n子连珠)
*/
public class Game {
public static String[][] board;//棋盘数组
int mode;//定义棋盘的规格
public static final String BLACK_CHESS="○";
public static final String WHITE_CHESS="●";
public Game() {
// TODO Auto-generated constructor stub
init();//初始化棋盘
}
private void init() {
// TODO Auto-generated method stub
System.out.println(">>>请输入你要的玩的模式:三子棋or五子棋");
Scanner sc=new Scanner(System.in);
mode=sc.nextInt();
board=new String[(mode-2)*mode][(mode-2)*mode];//创建棋盘规格
for(int i=0;i<board.length;i++) {//棋盘样式初始化
for(int j=0;j<board[i].length;j++) {
board[i][j]="+";
}
}
}
public void playgame() {
int player=1;//正数黑方 负数白方
while(isgamecontinue()) {//判断下棋是否继续,每下一次棋,对整个棋盘判断一次。遍历每个棋子。
print();
if(player>0) {
System.out.println(">>>请黑方下棋:");
if(!dropchess(BLACK_CHESS)) {//下棋失败
continue;//继续让黑方下棋
}
}else {
System.out.println(">>>请白方下棋:");
if(!dropchess(WHITE_CHESS)) {//下棋失败
continue;//同上
}
}
player=-player;//黑白方轮换
}
}
private boolean dropchess(String Chess) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println(">>>请输入x:");
int x=sc.nextInt();
System.out.println(">>>请输入y:");
int y=sc.nextInt();
// x和y的范围 1~(n-2)*n ×(n-2) n代表n子棋格式
if(x<1||x>(mode-2)*mode||y<1||y>(mode-2)*mode) {
System.out.println(">>>无效输入,请重新输入!");
return false;
}
if(!board[x-1][y-1].equals("+")) {
System.out.println(">>>此处有棋,请重新落子!");
return false;
}
board[x-1][y-1]=Chess;
return true;
}
private boolean isgamecontinue() {//以最左边的棋子为起点判断,向右,向下,向右上,向右下
// TODO Auto-generated method stub
int count=0;
for(int i=0;i<board.length;i++) {
for(int j=0;j<board[i].length;j++) {
if(!board[i][j].equals("+")) {//判断五子连珠
count++;
if(j<=(mode-3)*mode) {//向右判断
boolean flag=true;//默认n子连珠
for(int y=1;y<=mode-1;y++) {
if(!board[i][j].equals(board[i][j+y])) {
flag=false;
break;
}
}
if(flag) {//五子连珠,游戏结束。
print();//打印结果
if(board[i][j].equals(BLACK_CHESS)) {
System.out.println(">>>黑方赢");
}else {
System.out.println(">>>白方赢");
}
return !flag;
}
}
if(i<=(mode-3)*mode) {//向下判断
boolean flag=true;//默认n子连珠
for(int x=1;x<=mode-1;x++) {
if(!board[i][j].equals(board[x+i][j])) {
flag=false;
break;
}
}
if(flag) {//五子连珠,游戏结束。
print();//打印结果
if(board[i][j].equals(BLACK_CHESS)) {
System.out.println(">>>黑方赢");
}else {
System.out.println(">>>白方赢");
}
return !flag;
}
}
if(i<=(mode-3)*mode&&j<=(mode-3)*mode) {//向右下判断
boolean flag=true;
for(int x=1,y=1;x<=mode-1&&y<=mode-1;x++,y++) {
if(!board[i][j].equals(board[i+x][j+y])) {
flag=false;
break;
}
}
if(flag) {
print();//打印结果
if(board[i][j].equals(BLACK_CHESS)) {
System.out.println(">>>黑方赢");
}else {
System.out.println(">>>白方赢");
}
return !flag;
}
}
if(j<=(mode-3)*mode&&i>=mode-1) {//向右上判断
boolean flag=true;
for(int x=1,y=1;x<=mode-1&&y<=mode-1;x++,y++) {
if(!board[i][j].equals(board[x+i][y+j])) {
flag=false;
break;
}
}
if(flag) {
print();//打印结果
if(board[i][j].equals(BLACK_CHESS)) {
System.out.println(">>>黑方赢");
}else {
System.out.println(">>>白方赢");
}
return !flag;
}
}
}
if(count==Math.pow((mode-2)*mode, 2)) {
print();
System.out.println(">>>和棋");
return false;
}
}
}
return true;//
}
private void print() {
// TODO Auto-generated method stub
for (String[] row : board) {
for (String col : row) {
System.out.print(col+" ");
}
System.out.print("\n");
}
}
}
PlayGame类:
package 五子棋;
public class PlayGame {
public static void main(String[] args) {
Game game=new Game();
game.playgame();
}
}
测试效果
以三子棋来测试