編寫Java程序,實現簡單的五子棋博弈遊戲(美和易思Java練習習題)

 

package com.qq.gb;

import java.util.Scanner;

public class GoBang {
	Scanner sc = new Scanner(System.in);
	String [][] num= new String[15][15];//創建二維數組
	int userId = 0;//判斷當前用戶 
	int x = 0;//橫座標
	int y = 0;//縱座標
	static boolean win = false;//用於判斷輸贏的變量
	//初始化二維數組
	public void board() {
		for (x = 0; x < num.length; x++) {
			for (y = 0; y < num.length; y++) {
				num[x][y]="+";
			}
		}
	}
	//打印棋盤方法
	public void printBoard() {
		for (int x = 0; x < num.length; x++) {
			for (int y = 0; y < num.length; y++) {
				System.out.print(num[x][y]+"  ");
			}
			System.out.println();
		}
	}
	//用戶下棋的方法
	public void userXY() {
		System.out.println("請輸入所放棋子的橫座標:");
		x = sc.nextInt();
		System.out.println("請輸入所放棋子的縱座標:");
		y = sc.nextInt();
		//判斷當前用戶如果userId是0則是第一個用戶
		if (userId==0) {
			if (!num[x-1][y-1].equals("+")) {
				System.out.println("該棋子已經存在,請重新輸入!");
				userXY();
			}else {
				num[x-1][y-1] = "X";
				userId = 1;
				printBoard();
			}
		} else {
			if (!num[x-1][y-1].equals("+")) {
				System.out.println("該棋子已經存在,請重新輸入!");
				userXY();
			}else {
				num[x-1][y-1] = "O";
				userId = 0;
				printBoard();
			}
		}
	}
	//判斷輸贏的方法
	public void winOrLose() {
		//創建Boolean類型的變量判斷結果
		boolean a1,a2,a3,a4,b1,b2,b3,b4;//a和b分別代表一個玩家,1,2,3,4分別代表能贏的4種情況
		for (int x = 0; x < num.length-4; x++) {
			for (int y = 4; y < num.length; y++) {
				//當五顆棋子呈右上左下連着的時候遊戲結束
				a4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
				b4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
				if (a4==true){
					win = true;
					System.out.println("遊戲結束!");
					System.out.printf("玩家%d贏了",userId);
					break;
				}else if (b4==true){
					win = true;
					System.out.println("遊戲結束!");
					System.out.printf("玩家%d贏了",userId);
					break;
				}
			}
		}
		for (int x = 0; x < num.length-4; x++) {
			for (int y = 0; y < num.length-4; y++) {
				//當五個棋子橫排或者豎排連着的時候遊戲結束
				a1 = num[x][y].equals("X")&&num[x][y+1].equals("X")&&num[x][y+2].equals("X")&&num[x][y+3].equals("X")&&num[x][y+4].equals("X");
				b1 = num[x][y].equals("O")&&num[x][y+1].equals("O")&&num[x][y+2].equals("O")&&num[x][y+3].equals("O")&&num[x][y+4].equals("O");
				a2 = num[x][y].equals("X")&&num[x+1][y].equals("X")&&num[x+2][y].equals("X")&&num[x+3][y].equals("X")&&num[x+4][y].equals("X");
				b2 = num[x][y].equals("O")&&num[x+1][y].equals("O")&&num[x+2][y].equals("O")&&num[x+3][y].equals("O")&&num[x+4][y].equals("O");
				//當五顆棋子呈左上右下連着的時候遊戲結束
				a3 = num[x][y].equals("X")&&num[x+1][y+1].equals("X")&&num[x+2][y+2].equals("X")&&num[x+3][y+3].equals("X")&&num[x+4][y+4].equals("X");
				b3 = num[x][y].equals("O")&&num[x+1][y+1].equals("O")&&num[x+2][y+2].equals("O")&&num[x+3][y+3].equals("O")&&num[x+4][y+4].equals("O");
				
				if ((a1==true)||(a2==true)||(a3==true)){
					win = true;
					System.out.println("遊戲結束!");
					System.out.printf("玩家%d贏了",userId);
					break;
				}else if ((b1==true)||(b2==true)||(b3==true)){
					win = true;
					System.out.println("遊戲結束!");
					System.out.printf("玩家%d贏了",userId);
					break;
				}
			}
		}
	}
	public static void main(String[] args) {
		GoBang gb = new GoBang();
		gb.board();//初始化二維數組
		gb.printBoard();//打印棋盤
		do {
			gb.userXY();//循環下棋
			gb.winOrLose();//判斷輸贏
		} while (win==false);//當win變量變爲ture時停止循環
	}
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章