Java猜拳遊戲

      在〈Java猜拳遊戲〉中尚無留言

Java swing

猜拳遊戲是一個非常典型的範例, 簡單且能快速熟悉每種UI SDK的設計概念, 所以一定要自已親手作一遍.

使用Java swing設計剪刀石頭布的結果如下圖. 本範例中使用BoxLayout安排每個Panel的排列方式.

Java的Layout管理方式有BorderLayout(只能水平), BoxLayout, GridLayout(表格), GridBagLayout(表格可合併儲存格), CardLayout. 這需自行慢慢體會.

java_rock1

開新專案

使用Java Swing製作視窗專案時, 在開啟專案中,記得需取消勾選Create Main Class, 如下圖所示.

開啟完成後, 再於Source Packages按右鍵/New/JFrame form, 名稱自訂

java_rock2

JPanel

上面的圖,分為顯示圖片的區域,結果,及按鈕。所以先拉三個JPane到視窗中,再於外層的JPanel按右鍵/Set Layout/BoxLayout

然後設定BoxLayout的方向,選取Axis, XAxis為由左到右排列,YAxis為由上到下排列

此時因每個JPanel不容易看到,所以可以改變Border/BevelBorder, Type若為Raised,JPanel就是凸出。若選擇Lowered,就會呈現凹陷的感覺。結果如下

元件大小比例

BoxLayout 是一個蠻方便的視窗管理工具, 尤如C#的StackPanel或Python的BoxSizer, 會由左而右或由上而下排列元件.
在設計UI畫面時, 都是以實際大小設計, PreferredSize是主要顯示的大小, 縮放時, 會依比例放大縮小, 最大值不會超過maximumSize, 最小值不會小於minimumSize. 所以這三個值都要設定.
因此在設計大小值時, 首先先決定正常顯示時的PreferredSize, 然後再決定放大後的maximumSize, 然後再決定縮小後的minimumSize。

因此,接下來最上列加入4個JPanel, ,Layout一樣是BoxLayout。左右二個Panel的maximumSize設定為[32762,165],那麼在縮放時,左右二邊的空格就會自動加大。

而中間二個Panel,  分別加為二個Label, 大小分別為[200,15], [200,150]

致於第二列則加為Panel+Label+Panel.

第三列則加入Panel+Button+Button+Button+Panel

完整代碼

請於private void btnActionPerformed()方法中輸入如下代碼

private void btnActionPerformed(java.awt.event.ActionEvent evt) {
	JButton btn=(JButton)evt.getSource();
	int player=0;
	if(btn.getName().equals("scissors")){
		lblPlayer.setIcon(
                    new ImageIcon(getClass().getResource("scissors.png")));
		player=0;
	}
	else if (btn.getName().equals("rock")){
		lblPlayer.setIcon(
                    new ImageIcon(getClass().getResource("rock.png")));
		player=1;
	}
	else{
		lblPlayer.setIcon(
                    new ImageIcon(getClass().getResource("paper.png")));
		player=2;
	}
	int cmp=(int)(Math.random()*3);
	if (cmp==0)lblCmp.setIcon(
             new ImageIcon(getClass().getResource("scissors.png")));
	else if (cmp==1)lblCmp.setIcon(
             new ImageIcon(getClass().getResource("rock.png")));
	else lblCmp.setIcon(
             new ImageIcon(getClass().getResource("paper.png")));
	switch(cmp-player){ 
		case 0: 
			lblResult.setText("平手"); 
			break; 
		case -1: 
		case 2: 
			lblResult.setText("You Win"); 
			break; 
		case 1: 
		case -2: 
			lblResult.setText("You Loss"); 
			break; 
	}
}

完整代碼下載 : GameRock_java.zip

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *