# 12/18 正課作業8 ## HW8_1 (15.1) 編寫一個程式,讓使用者可以點擊「刷新」按鈕,從一副52張牌的牌組中顯示四張隨機牌,如圖15.26a所示。(請參考程式設計練習14.3中的提示,了解如何獲取四張隨機牌。) ![image](https://hackmd.io/_uploads/r1boI8xrkx.png) ### 使用 GridPane 布局管理器 ![image](https://hackmd.io/_uploads/By4SYIgBye.png) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class test1 extends Application { @Override public void start(Stage primaryStage) { GridPane gridPane = new GridPane(); gridPane.setHgap(10); gridPane.setVgap(10); Button button1 = new Button("Button 1"); Button button2 = new Button("Button 2"); gridPane.add(button1, 0, 0); // 第一列第一行 gridPane.add(button2, 1, 0); // 第一列第二行 Scene scene = new Scene(gridPane, 300, 200); primaryStage.setTitle("GridPane Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` ### 隨機數與 ArrayList 操作 ![image](https://hackmd.io/_uploads/rJEutUeHkx.png) ```java import java.util.ArrayList; import java.util.Collections; public class test2 { public static void main(String[] args) { ArrayList<Integer> cards = new ArrayList<>(); for (int i = 1; i <= 52; i++) { cards.add(i); } Collections.shuffle(cards); System.out.println("Shuffled cards: " + cards.subList(0, 4)); // 顯示前 4 張 } } ``` ### 圖片的載入與顯示 ![image](https://hackmd.io/_uploads/H1M6Y8grJl.png) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class test3 extends Application { @Override public void start(Stage primaryStage) { Image image = new Image(getClass().getResourceAsStream("/image/card/1.png")); //Image image = new Image(getClass().getResourceAsStream("/image/card/"+某個參數+".png")); ImageView imageView = new ImageView(image); imageView.setFitWidth(100); imageView.setFitHeight(150); StackPane root = new StackPane(imageView); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("Image Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` ### 按鈕的動作事件 ![image](https://hackmd.io/_uploads/S1gU9IeByg.png) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class test4 extends Application { @Override public void start(Stage primaryStage) { Button button = new Button("Click Me"); button.setOnAction(e -> System.out.println("Button Clicked!")); StackPane root = new StackPane(button); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("Button Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` --- ## HW8_2 (15.3) 編寫一個程式,可以在面板中移動球。你應該定義一個面板類來顯示球,並提供將球向左、向右、向上和向下移動的方法,如圖15.26c所示。檢查邊界以防止球完全移出視野。 ![image](https://hackmd.io/_uploads/Syy1i8gr1x.png) ![image](https://hackmd.io/_uploads/BkgbjUxSJx.png) ### 按鈕與事件處理 ![image](https://hackmd.io/_uploads/SkWwo8gSkg.png) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; public class test extends Application { @Override public void start(Stage primaryStage) { Pane pane = new Pane(); Circle circle = new Circle(100, 75, 20); circle.setFill(Color.LIGHTCORAL); pane.getChildren().add(circle); Button btnUp = new Button("Up"); btnUp.setOnAction(e -> circle.setCenterY(circle.getCenterY() - 10)); BorderPane borderPane = new BorderPane(); borderPane.setCenter(pane); borderPane.setBottom(btnUp); Scene scene = new Scene(borderPane, 300, 200); primaryStage.setTitle("Move Circle"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` --- ## HW8_3 (15.4) 編寫一個程式來執行加法、減法、乘法和除法運算,如圖15.27a所示。 ![image](https://hackmd.io/_uploads/BJKRsLxr1x.png) ### TextField 與 Label ![image](https://hackmd.io/_uploads/Bkpaa8eHyg.png) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.scene.control.Button; public class test extends Application { @Override public void start(Stage primaryStage) { TextField textField = new TextField(); Label label = new Label("Enter something:"); Button button = new Button("Click me"); button.setOnAction(e -> label.setText("You entered: " + textField.getText())); VBox vbox = new VBox(10, label, textField, button); Scene scene = new Scene(vbox, 300, 200); primaryStage.setTitle("TextField Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` --- ## HW8_4 ![image](https://hackmd.io/_uploads/HJJskDxr1l.png) ![image](https://hackmd.io/_uploads/SkmHkveBkl.png) ![image](https://hackmd.io/_uploads/HkAU1wlS1l.png) ![image](https://hackmd.io/_uploads/SyWF1wlrkg.png) ![image](https://hackmd.io/_uploads/Hk-AJweSkx.png) ### 隨機數生成 ![image](https://hackmd.io/_uploads/HJdZ1Plrkx.png) ```java import java.util.Random; public class test { public static void main(String[] args) { Random random = new Random(); int num = random.nextInt(20); // 生成 0 到 19 的隨機數 System.out.println("Generated number: " + num); } } ``` ### 遊戲狀態管理 ```java private boolean gameStarted = false; private void test() { if (!gameStarted) { gameStarted = true; System.out.println("Game started!"); } else { System.out.println("Game already started!"); } } ``` ### 錯誤處理與輸入驗證 ```java try { int guess = Integer.parseInt(txtInput.getText()); // 判斷邏輯 } catch (NumberFormatException ex) { lblMessage.setText("請輸入有效的數字"); lblMessage.setTextFill(Color.BLACK); } ``` --- ## run.java ``` import javafx.application.Application; public class run { public static void main(String[] args) { test.main(args); } } ```