Java實驗—四子棋進階
阿新 • • 發佈:2018-11-26
請參閱教材264頁8.20題敘述編寫一個“四子連”遊戲(注:每次不僅要指定棋子的行而且還要指定列,具體效果如下圖所示;此外,紅黃棋手誰先下應隨機生成)。
執行效果:
程式碼:
import java.util.Scanner; public class JavaGame { int row,column; //行列 String Graph[][]; //二維棋盤 String C[]={"紅","黃"}; //棋子顏色 int empty; //棋盤剩餘空格 public JavaGame(int r,int c){ //初始化棋盤資料 empty=r*c; row=r;column=c; Graph=new String[r][c]; for(int i=0;i<r;i++) for(int j=0;j<c;j++) Graph[i][j]=" "; } public void show(){ //展示棋盤 for(int i=row-1;i>=0;i--){ System.out.print("|"); for(int j=0;j<column;j++) System.out.print(Graph[i][j]+"|"); System.out.println(); } } public int Input(int x ,int y,int key){ //下棋 System.out.println(y+" "+x); if(y>=column||y<0||x>=row||x<0||!Graph[x][y].equals(" ")){ System.out.println("輸入有誤,請重新輸入"); return 1; } Graph[x][y]=C[key%2]; empty--; return 0; } public int judge(int x,int y) { //判斷是否有人勝出 if (search(Graph[x][y], x, y, 1, 0) + search(Graph[x][y], x, y, -1, 0) == 3|| //水平探測 search(Graph[x][y], x, y, 1, 1) + search(Graph[x][y], x, y, -1, -1) == 3|| //對角探測 search(Graph[x][y], x, y, 0, 1) + search(Graph[x][y], x, y, 0, -1) == 3|| //垂直探測 search(Graph[x][y], x, y, 1, -1) + search(Graph[x][y], x, y, -1, 1) == 3) //對角探測 return 1; return 0; //未有人獲勝 } public int search(String k, int a, int b, int z, int f) { //單向探測函式 a += z; b += f; if (b >= column || a >= row || a < 0 || b < 0||!Graph[a][b].equals(k)) return 0; return search(k, a , b , z, f)+1; } public static void main(String[] args) { JavaGame My=new JavaGame(6,7); Scanner input=new Scanner(System.in); int x,y,key; My.show(); for(int i=(int)(Math.random()*2);;){ //隨機起手 System.out.print("請在"+My.C[i%2]+"棋手輸入您的棋子所在行(1-6):"); x=input.nextInt(); System.out.print("所在列(1-7):"); y=input.nextInt(); if(My.Input(x-1,y-1,i)!=0) //出錯後 執行下一迴圈(i沒有++) continue; My.show(); if(My.judge(x-1,y-1)==1){ //判斷是否有人勝出 System.out.println("恭喜,"+My.C[i%2]+"棋手贏!"); break; } if(My.empty==0){ //平局 System.out.println("Chess draw"); break; } i++; } } }