五子棋小游戏

public class WuZhiQi {
	public static void main(String[] args) {

		// 棋盘编号
		char[] bianhao = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' };
		
		int SIZE = 15; //常数
			
		// 创建棋盘
		char[][] qipan = new char[SIZE][SIZE];
		for (int i = 0; i < qipan.length; i++) {
			for (int j = 0; j < qipan[i].length; j++) {
				qipan[i][j] = '+';
			}
		}

		// 创建棋盘上的星
		qipan[3][3] = '#';
		qipan[3][7] = '#';
		qipan[3][11] = '#';
		qipan[7][3] = '#';
		qipan[7][7] = '#';
		qipan[7][11] = '#';
		qipan[11][3] = '#';
		qipan[11][7] = '#';
		qipan[11][11] = '#';

		/**
		 * 横五子 qipan[5][5] = '@'; qipan[5][6] = '@'; qipan[5][7] = '@';
		 * qipan[5][8] = '@'; qipan[5][9] = '@';
		 * 
		 * 竖五子 qipan[6][6] = 'O'; qipan[7][6] = 'O'; qipan[8][6] = 'O';
		 * qipan[9][6] = 'O'; qipan[10][6] = 'O';
		 * 
		 * 斜五子 qipan[8][9] = '@'; qipan[9][10] = '@'; qipan[10][11] = '@';
		 * qipan[11][12] = '@'; qipan[12][13] = '@';
		 * 
		 * 反斜五子 qipan[5][2] = 'O'; qipan[4][3] = 'O'; qipan[3][4] = 'O';
		 * qipan[2][5] = 'O'; qipan[1][6] = 'O';
		 * 
		 */
		char curQiZi = '@'; 	//黑子先落
		boolean isOver = false; //游戏结束标志

		// 循环
		while (true) {
			System.out.print("  "); // 第一行编号前面的两个空格
			for (int i = 0; i < qipan.length; i++) { // 给列编号
				System.out.print(bianhao[i] + " ");
			}
			
			System.out.println(); // 第一行换行

			// 显示棋盘
			for (int i = 0; i < qipan.length; i++) {
				System.out.print(bianhao[i] + " "); // 给行编号
				for (int j = 0; j < qipan[i].length; j++) {
					System.out.print(qipan[i][j] + " ");
				}
				System.out.println();
			}
			
			//结束了
			if(isOver){
				System.out.println(curQiZi + "方胜利");
				return;
			}
			
			// 从屏幕输入棋子
			Scanner scanner = new Scanner(System.in);
			
			System.out.print("请输入Y坐标:");
			int y = scanner.nextInt();
			// 判断输入是否正确
			if (y > 14 || y < 0) {
				System.out.println("您输入错误,请输入0~14,按回车键重新输入!");
				new Scanner(System.in).nextLine();
				continue;
			}

			System.out.print("请输入X坐标:");
			int x = scanner.nextInt();
			// 判断输入是否正确
			if (x > 14 || x < 0) {
				System.out.println("你输入错误,请输入0~14,按回车键重新输入!");
				new Scanner(System.in).nextLine();
				continue;
			}
			
			// 判断该位置有无落子
			if (qipan[y][x] == '@' || qipan[y][x] == 'O') {
				System.out.println("该位置已落子,请按回车键重新下子!");
				new Scanner(System.in).nextLine();
				continue;
			}
	
			/**
			 * 1 交替下棋 2 胜负判断
			 *
			 */
			qipan[y][x] = curQiZi;
			// 胜负判断
			// 横判断
			int count = 1;
			for(int i = x - 1; i >= 0; i--){
				if(qipan[y][i] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			for(int i = x + 1; i < SIZE ; i++){
				if(qipan[y][i] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			if(count >= 5){
				isOver = true;
				continue;
			}
			
			//判断竖向
			count = 1;
			for(int i = y - 1; i >= 0; i--){
				if(qipan[i][x] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			for(int i = y + 1; i < SIZE ; i++){
				if(qipan[i][x] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			if(count >= 5){
				isOver = true;
				continue;
			}
			
			//判断斜向
			count = 1;
			for(int i = y - 1,j = x - 1; i >= 0 && j >= 0; i--, j--){
				if(qipan[i][j] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			for(int i = y + 1,j = x + 1; i <= SIZE && j <= SIZE; i++, j++){
				if(qipan[i][j] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			if(count >= 5){
				isOver = true;
				continue;
			}
			
			//判断反斜向
			count = 1;
			for(int i = y + 1,j = x - 1; i <= SIZE && j >= 0; i++, j--){
				if(qipan[i][j] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			for(int i = y - 1,j = x + 1; i <= SIZE && j >= 0; i--, j++){
				if(qipan[i][j] == qipan[y][x]){
					count++;
				}else{
					break;
				}
			}
			if(count >= 5){
				isOver = true;
				continue;
			}
			
			// 交替黑白落子
			curQiZi = curQiZi == '@' ? 'O' : '@';
		}

	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值