分類  >  編程 >

03-02自底向上作派_模擬遊戲

tags:    時間:2014-05-04 18:39:32
03-02自底向上風格_模擬遊戲

模擬遊戲

模擬井字棋遊戲

九個格子中雙方輪流落子。

其中一方畫x符號,另一方畫o符號。

開始時,9個格子都是空的。

程序顯示當前局面,提示某一方輸入落子位置,然後顯示局面,再提示另一方。

當某方棋子連成直線,該方獲勝!

例如:

初始:

_ _ _

_ _ _

_ _ _

o 輸入位置: 1,1

o _ _

_ _ _

_ _ _

x 輸入位置: 2,2

o _ _

_ x _

_ _ _

當某一方出現了3個棋子連成直線或對角線,則該方獲勝

標準答案:

  import java.util.*;   class MyChess { 	private char[][] data;  // 棋局 	private boolean side;  // 輪到哪方走棋 true: o方,false: x方 	private static Scanner scan = new Scanner(System.in); 	 	public MyChess() 	{ 		data = new char[3][3]; 		side = true; 	} 	 	public void show() 	{ 		for(int i=0; i<3; i++) 		{ 			for(int j=0; j<3; j++) 			{ 				if(data[i][j]==0) 					System.out.print('_'); 				else 					System.out.print(data[i][j]); 				 				System.out.print(" "); 			} 			System.out.println(); 		} 	} 	 	public boolean isEnd() 	{ 		//檢查是否已經分出勝負 		if(judge()>0) return true;  		// 檢查是否還能走下去		 		for(int i=0; i<3; i++) 		for(int j=0; j<3; j++) 		{ 			if(data[i][j]==0) return false; 		} 		 		return true; 	} 	 	// 勝負裁判 	private int judge() 	{ 		// 檢測橫線 		for(int k=0; k<3; k++) 		{ 			if(data[k][0] == data[k][1] && data[k][0] == data[k][2]) 			{ 				if(data[k][0]=='o') return 1;  // o 方勝利 				if(data[k][0]=='x') return 2;  // x 方勝利	 			} 		} 		 		// 檢測豎線 		for(int k=0; k<3; k++) 		{ 			if(data[0][k] == data[1][k] && data[0][k] == data[2][k]) 			{ 				if(data[0][k]=='o') return 1;  // o 方勝利 				if(data[0][k]=='x') return 2;  // x 方勝利	 			} 		} 		 		// 檢查斜線 		if(data[0][0]==data[1][1] && data[0][0]==data[2][2]) 		{ 			if(data[0][0]=='o') return 1;  // o 方勝利 			if(data[0][0]=='x') return 2;  // x 方勝利				 		} 		if(data[0][2]==data[1][1] && data[0][2]==data[2][0]) 		{ 			if(data[0][2]=='o') return 1;  // o 方勝利 			if(data[0][2]=='x') return 2;  // x 方勝利				 		} 		 		return 0; 	} 	 	// 顯示比賽結果 	public void showResult() 	{ 		switch(judge()) 		{ 			case 0: 				System.out.println("平局!"); 				break; 			case 1: 				System.out.println(" o 方勝利!"); 				break; 			case 2: 				System.out.println(" x 方勝利!"); 				break; 		}	 	} 	 	public void play() 	{ 		for(;;) 		{ 			char side_char = side? 'o' : 'x'; 				 			System.out.print( " " + side_char + " 請輸入棋子位置(行,列):"); 			String s = scan.nextLine(); 			 			try 			{ 				String[] ss = s.split(","); 				int row = Integer.parseInt(ss[0])-1;  // 行號 				int col = Integer.parseInt(ss[1])-1;  // 列號 				if(data[row][col]!=0) continue;  // 該位置已經有棋子 				data[row][col] = side_char;  // 記錄落子 				side = !side; 				break; 			} 			catch(Exception e) 			{ 			} 		} 	} } 		 public class MyTest { 	public static void main(String[] args) 	{ 		// o x 填充遊戲 		/* 		  初始: 		  _ _ _  		  _ _ _ 		  _ _ _ 	 		  o 輸入位置: 1,1 		  o _ _  		  _ _ _ 		  _ _ _ 		  x 輸入位置: 2,2 		  o _ _  		  _ x _ 		  _ _ _ 		   		  當某一方出現了3個棋子連成直線或對角線,則該方獲勝 		*/  		 		MyChess a = new MyChess(); 		 		for(;;) 		{ 			a.show();  // 顯示局面 			if(a.isEnd()) 			{ 				a.showResult(); 				break; 			} 			a.play(); // 繼續走棋 		} 		 	} }

推薦閱讀文章

Bookmark the permalink ,來源:互聯網