1. 程式人生 > >五子棋——控制檯版本

五子棋——控制檯版本

操作說明

菜的像個弟弟,大家不要嘲笑 在這裡插入圖片描述

開始之後預設白棋先走,(通過輸入座標的形式來下棋),如果五子連心,遊戲結束

package com.jh.test206;

import java.util.Scanner;

public class FiveChessGame206 {
    private final int N = 17;
    private int score =0 ;
    private boolean gameover = false;
    private char[][] fiveChess = new char[N+1][
N+1]; private Scanner cin = new Scanner(System.in); private boolean who_am_i = true; private void init() { fiveChess[0][0] = ' '; for (int i = 1; i < N; i++) { if (i <= 10) { fiveChess[0][i] = (char) ('0' + i - 1); } else { fiveChess[
0][i] = (char) ('a' + i - 11); } } for (int j = 1; j < N; j++) { if (j <= 10) { fiveChess[j][0] = (char) ('0' + j - 1); } else { fiveChess[j][0] = (char) ('a' + j - 11); } } for (int i = 1
; i < N; i++) { for (int j = 1; j < N; j++) { fiveChess[i][j] = '*'; } } } private void printUI() { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { System.out.print(fiveChess[i][j] + " "); } System.out.println(); } } private boolean judge(int x, int y, boolean who_am_i) { if (who_am_i) { /** * 橫座標判斷 */ for (int i = y; i >= 0; i--) { if (fiveChess[x][i] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } for (int i = y; i < N; i++) { if (fiveChess[x][i] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } score = 0; /** * 縱座標判斷 */ for (int i = x; i >= 0; i--) { if (fiveChess[i][y] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } for (int i = x; i < N; i++) { if (fiveChess[i][y] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } score = 0; /** * 反斜槓判斷 */ for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) { if (fiveChess[i][j] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } for (int i = x, j = y; i < N && y < N; i++, j++) { if (fiveChess[i][j] == '#') { score++; } else break; } if (score > 5) { System.out.println("白方勝"); return true; } score = 0; /** * 斜槓判斷 */ for (int i = x, j = y; i < N && y >= 0; i++, j--) { if (fiveChess[i][j] == '#') { score++; } else break; } if (score > 5) { gameover = true; System.out.println("白方勝"); } for (int i = x, j = y; i >= 0 && y < N; i--, j++) { if (fiveChess[i][j] == '#') { score++; } else break; } if (score > 5) { gameover = true; System.out.println("白方勝"); } return false; } else { /** * 橫座標判斷 */ score = 0; for (int i = y; i >= 0; i--) { if (fiveChess[x][i] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } for (int i = y; i < N; i++) { if (fiveChess[x][i] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } score = 0; /** * 縱座標判斷 */ for (int i = x; i >= 0; i--) { if (fiveChess[i][y] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } for (int i = x; i < N; i++) { if (fiveChess[i][y] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } score = 0; /** * 反斜槓判斷 */ for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) { if (fiveChess[i][j] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } for (int i = x, j = y; i < N && y < N; i++, j++) { if (fiveChess[i][j] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } score = 0; /** * 斜槓判斷 */ for (int i = x, j = y; i < N && y >= 0; i++, j--) { if (fiveChess[i][j] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } for (int i = x, j = y; i >= 0 && y < N; i--, j++) { if (fiveChess[i][j] == '@') { score++; } else break; } if (score > 5) { System.out.println("黑方勝"); return true; } return false; } } private int change(char number) { int numbers = (int) number; if (numbers >= 48 && numbers <= 57) return numbers - 48 + 1; else if (numbers >= 97 && numbers <=102) return numbers - 97 + 10+1 ; else return -1; } private boolean noRepeat(int x, int y) { if (fiveChess[x][y] == '*') { return true; } else { System.out.println("此位置已有棋子,請重新下棋"); return false; } } private void playChess() { char inputx, inputy; if (who_am_i == true) { System.out.println("請白色棋子方下棋,請輸入座標(z,y)"); } else { System.out.println("請黑色棋子方下棋,請輸入座標(x,y)"); } inputx = cin.next().charAt(0); inputy = cin.next().charAt(0); int x = change(inputx);// change int y = change(inputy);// change if (x == -1 || y == -1) { System.out.println("棋子越界,請重新下棋"); } if (x != -1 && y != -1 && noRepeat(x, y)) { if (who_am_i == true) { fiveChess[x][y] = '#'; } else { fiveChess[x][y] = '@'; } if (judge(x, y, who_am_i)) gameover = true; who_am_i = !who_am_i; score = 0; } } private void beginner() { System.out.println("請選擇,白方(0),或者黑方(1)下棋(預設白子先行)"); char begin = cin.next().charAt(0); if (begin == '1') { who_am_i = false; } } public void run() { init(); printUI(); beginner(); do { playChess(); printUI(); } while (gameover == false); } public static void main(String[] args) { FiveChessGame206 demo = new FiveChessGame206(); demo.run(); } }