java实现的简易版五子棋小游戏

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();
	}
}

测试效果

以三子棋来测试

和棋效果

在这里插入图片描述

黑方赢

在这里插入图片描述

白方赢

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值