五子棋小遊戲
阿新 • • 發佈:2018-12-19
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' : '@'; } } }