当前位置 : 主页 > 编程语言 > java >

控制台五子棋练习

来源:互联网 收集:自由互联 发布时间:2021-06-28
GoBangDemo.java package cn.fyx;public class GoBangDemo {public static void main(String[] args) {// 创建棋盘对象,并初次打印棋盘Board b = new Board();System.out.println("初始化棋盘如下:");b.printBoard();Player p1 = new P
GoBangDemo.java
package cn.fyx;

public class GoBangDemo {
	public static void main(String[] args) {
		// 创建棋盘对象,并初次打印棋盘
		Board b = new Board();
		System.out.println("初始化棋盘如下:");
		b.printBoard();

		Player p1 = new Player("X ");
		Player p2 = new Player("O ");

		// 开始下棋
		while (true) {
			System.out.println("选手1下棋:");
			p1.put();
			b.printBoard();
			if (b.win(p1.qizi)) {
				System.out.println("选手1赢了");
				break;
			}
			System.out.println("选手2下棋:");
			p2.put();
			b.printBoard();
			if (b.win(p2.qizi)) {
				System.out.println("选手2赢了");
				break;
			}
		}
	}
}
Board.java
package cn.fyx;

public class Board {
	public static final int boardSize = 13;
	static String[][] arr = new String[boardSize][boardSize];

	// 构造棋盘
	Board() {
		for (int i = 0; i < boardSize; i++) {
			for (int j = 0; j < boardSize; j++) {
				arr[i][j] = "+ ";
			}
		}
	}

	// 打印一次棋盘的方法
	public void printBoard() {
		for (int i = 0; i < boardSize; i++) {
			for (int j = 0; j < boardSize; j++) {
				System.out.print(arr[i][j]);
			}
			System.out.println();
		}
	}

	// 判断是否重复落子的方法
	public static boolean againPut(int x, int y) {
		if (arr[x][y].equals("+ ")) {
			return true;
		} else {
			return false;
		}
	}

	// 判断一次是否有选手赢得了比赛
	public boolean win(String qizi) {
		boolean flag = false;

		// 右向扫描,是否连成五个
		for (int i = 0; i < boardSize; i++) {
			for (int j = 0; j <= boardSize - 5; j++) {
				if (arr[i][j].equals(qizi) && arr[i][j + 1].equals(qizi) && arr[i][j + 2].equals(qizi)
						&& arr[i][j + 3].equals(qizi) && arr[i][j + 4].equals(qizi)) {
					flag = true;
				}
			}
		}

		// 下侧扫描,是否连成五个
		for (int i = 0; i <= boardSize - 5; i++) {
			for (int j = 0; j < boardSize; j++) {
				if (arr[i][j].equals(qizi) && arr[i + 1][j].equals(qizi) && arr[i + 2][j].equals(qizi)
						&& arr[i + 3][j].equals(qizi) && arr[i + 4][j].equals(qizi)) {
					flag = true;
				}
			}
		}

		// 左下侧扫描,是否连成五个
		for (int i = 0; i <= boardSize - 5; i++) {
			for (int j = 4; j < boardSize; j++) {
				if (arr[i][j].equals(qizi) && arr[i + 1][j - 1].equals(qizi) && arr[i + 2][j - 2].equals(qizi)
						&& arr[i + 3][j - 3].equals(qizi) && arr[i + 4][j - 4].equals(qizi)) {
					flag = true;
				}
			}
		}

		// 右下侧扫描,是否连成五个
		for (int i = 0; i <= boardSize - 5; i++) {
			for (int j = 0; j <= boardSize - 5; j++) {
				if (arr[i][j].equals(qizi) && arr[i + 1][j + 1].equals(qizi) && arr[i + 2][j + 2].equals(qizi)
						&& arr[i + 3][j + 3].equals(qizi) && arr[i + 4][j + 4].equals(qizi)) {
					flag = true;
				}
			}
		}

		return flag;
	}
}
Player.java
package cn.fyx;

import java.util.Scanner;

public class Player {
	// 不同的选手,选择不同的棋子*或O
	String qizi;

	// 选手输入的棋子的坐标
	private int x;
	private int y;

	Player() {
	};

	Player(String qizi) {
		this.qizi = qizi;
	}

	Scanner sc = new Scanner(System.in);

	// 选手下棋方法
	public void put() {
		System.out.println("请落子(x,y)(0-12):");

		while (true) {
			// 接收选手所下的棋子的坐标
			x = sc.nextInt();
			y = sc.nextInt();

			// 判断是否重复落子,然后下到棋盘上
			if (Board.againPut(x, y)) {
				Board.arr[x][y] = qizi;
				break;
			} else {
				System.out.println("您输入的落子坐标已落了棋子,请重下(x,y)(0-12):");
				continue;
			}
		}
	}
}
网友评论