# 12/18 正課作業8
## HW8_1 (15.1)
編寫一個程式,讓使用者可以點擊「刷新」按鈕,從一副52張牌的牌組中顯示四張隨機牌,如圖15.26a所示。(請參考程式設計練習14.3中的提示,了解如何獲取四張隨機牌。)

### 使用 GridPane 布局管理器

```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 操作

```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 張
}
}
```
### 圖片的載入與顯示

```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);
}
}
```
### 按鈕的動作事件

```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所示。檢查邊界以防止球完全移出視野。
 
### 按鈕與事件處理

```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所示。

### TextField 與 Label

```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
    
### 隨機數生成

```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);
}
}
```