Java練習用Java寫雙人遊戲簡單四子棋
阿新 • • 發佈:2018-12-02
為了應付Java老師,借鑑了同學思想,自己動手敲了一個四子棋遊戲。程式碼很不規範,為了趕時間。結果寫的和C語言一樣。原始碼在本文結尾處
首先看看遊戲規則,
遊戲規則
四子棋的棋盤共有6行7列,棋盤是垂直襬放,每名玩者有21只圓形棋子,以不同顏色辨別。兩名玩者輪流每次把一隻棋子放進棋盤任何未全滿的一行中,棋子會佔據一行中最底未被佔據的位置。兩名玩者任何一方先以四隻棋子在橫,豎或斜方向聯成一條直線,便可獲勝,遊戲亦結束。假如棋盤已完全被棋子填滿,但仍未有任何一方成功把四隻棋子成一直線,則成為和局。
棋盤
用了一個二維陣列6*7的二維陣列來構造棋盤。每次選擇要下的行號行號即可。
isfour()
用來判斷下的棋有沒有連成四字,每次下完都判斷一次。
judge()
用來判斷所下的棋成功與否,即所下位置是否有棋和棋盤是否能放下
主要用了就這麼多,只建立了一個類connect類來建立一個四子棋遊戲。。。。
package connect; import java.util.*; public class connect { public static void main(String args[]) { int start=0; int count=0; int count_max=42; connect_four one=new connect_four(); one.display_board(); do { System.out.println("請白子先行"); Scanner in=new Scanner(System.in); int cow=in.nextInt(); if(one.judge(cow, 1) == 1) { start=1;count++; } else { start=0; } } while(start==0); one.display_board(); System.out.println(); int color=2; do { //one.getcolor(); System.out.println("對手出棋"); Scanner in=new Scanner(System.in); //int raw=in.nextInt(); int cow=in.nextInt(); if(one.judge(cow,color)==0) { System.out.println("出棋失敗,請重新出棋"); } else { count++; if(one.is_four(cow, color, 0, 1)==1) { if(color==1) System.out.print("\t\t\t\t圈圈"); else System.out.print("\t\t\t\t叉叉"); System.out.print("勝出\n"); one.display_board(); System.out.println(); return ; } if(color==2)color=1; else color=2; } one.display_board(); } while(count<count_max); if(count==count_max) { System.out.println("\t\t\t\t\t和局"); one.display_board(); System.out.println(); } } } class connect_four { private int flag=0; // private int max_i=6; //最大行 private int max_j=7; //最大列 private int row; //行值 private int cow; //列值 private int [] []chessboard_status=new int[6][7];//棋盤狀態 private int [] a = new int[7]; //列的行值 private int chess_color; //棋子顏色 public connect_four() //建構函式初始化棋盤 { flag=0; max_i=6; max_j=7; row=0; cow=0; for(int i=0;i<max_i;i++) { for(int j=0;j<max_j;j++) { a[j] = 5; chessboard_status[i][j]=0; } } } public int judge(int j,int color) { switch(j) { case 0: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}//二維數 //組存放 else return 0; case 1: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; case 2: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; case 3: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; case 4: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; case 5: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; case 6: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;} else return 0; default: ; } return 1; } public int judge_status(int i,int j) { if(i>-1&&i<max_i&&j>-1&&j<max_j) if(chessboard_status[i][j]==0) return 0; else if(chessboard_status[i][j]==1) return 1;//白色 else return 2;//黑色 else return -1;//位置輸入超框 } public void getcolor() { if(flag==1) System.out.print("白棋"); else System.out.print("黑棋"); System.out.println("\n"); } public void display_board() { char a=1; char b=0; System.out.print(" "); for(int j=0;j<max_j;j++) { System.out.print(j+" "); } System.out.println(); for(int i=0;i<max_i;i++) { for(int j=0;j<max_j;j++) { if(j==0) System.out.print(i); switch(chessboard_status[i][j]) { case 0: System.out.print(" *");break; case 1: System.out.print(" ○");break; case 2: System.out.print(" ×");break; } } System.out.println(); } } public int is_four(int j,int color,int num,int direction) { int m=a[j]+1,n=j; do { switch(direction) { case 1: m=m+1;n=n;break; case 2: m=m+1;n=n-1;break; case 3: m=m;n=n-1;break; case 4: m=m-1;n=n-1;break; case 5: m=m-1;n=n;break; case 6: m=m-1;n=n+1;break; case 7: m=m;n=n+1;break; case 8: m=m-1;n=n-1;break; default :break; } if(judge_status(m,n)==color) { num++; if(num==3) { return 1; } } else { m=a[j]+1; n=j; num=0; direction++; } }while(direction!=9); if(num==3) return 1; else return 0; } }