Skip to content

Commit 43a8651

Browse files
committed
feat: 添加选择关卡页面,未完成,保存代码
1 parent 816f351 commit 43a8651

File tree

8 files changed

+140
-52
lines changed

8 files changed

+140
-52
lines changed

src/main/java/org/i7606/jigsaw_puzzle/commons/EntityType.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.i7606.jigsaw_puzzle.commons.utils;
2+
3+
import javafx.scene.image.Image;
4+
import javafx.scene.image.ImageView;
5+
import org.i7606.jigsaw_puzzle.commons.AppConsts;
6+
7+
import java.io.InputStream;
8+
9+
/**
10+
* @Author SingleKey
11+
* @Date 2023/9/19 15:59
12+
*/
13+
public class ImageUtil {
14+
15+
public static ImageView getHomeButton(String imagePath) {
16+
ImageView imageView = getImageView(imagePath);
17+
imageView.setFitWidth(AppConsts.HOME_BUTTON_WIDTH);
18+
imageView.setFitHeight(AppConsts.HOME_BUTTON_HEIGHT);
19+
return imageView;
20+
}
21+
22+
public static ImageView getImageView(String imagePath) {
23+
InputStream urlStream = UrlUtil.getURLStream(imagePath);
24+
Image image = new Image(urlStream);
25+
return new ImageView(image);
26+
}
27+
28+
}

src/main/java/org/i7606/jigsaw_puzzle/window/play/PlayWindow.java

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import javafx.scene.layout.AnchorPane;
99
import javafx.stage.Stage;
1010
import org.i7606.jigsaw_puzzle.commons.AppConsts;
11+
import org.i7606.jigsaw_puzzle.commons.utils.ImageUtil;
1112
import org.i7606.jigsaw_puzzle.commons.utils.UrlUtil;
1213
import org.i7606.jigsaw_puzzle.window.play.level.LevelBuild;
14+
import org.i7606.jigsaw_puzzle.window.play.scenes.SelectionGameScene;
1315

1416
import java.io.InputStream;
1517

@@ -27,10 +29,13 @@ public class PlayWindow extends Stage {
2729
private LevelBuild factory;
2830
private AnchorPane anchorPane;
2931
private Scene scene;
32+
private Scene gameSelectionScene;
3033

3134
public PlayWindow() {
3235
initWindow();
33-
initHomeUi();
36+
scene = new SelectionGameScene();
37+
setScene(scene);
38+
// initHomeUi();
3439
}
3540
private void initWindow() {
3641
setTitle("拼图画板");
@@ -45,22 +50,22 @@ private void initHomeUi() {
4550
scene = new Scene(anchorPane);
4651
setScene(scene);
4752

48-
ImageView homeIconView = getImageView("images/home_icon.png");
53+
ImageView homeIconView = ImageUtil.getImageView("images/home_icon.png");
4954
homeIconView.setFitHeight(AppConsts.HOME_ICON_SIZE);
5055
homeIconView.setFitWidth(AppConsts.HOME_ICON_SIZE);
5156
homeIconView.setLayoutX(AppConsts.HOME_ICON_LOCATION_X);
5257
homeIconView.setLayoutY(AppConsts.HOME_ICON_LOCATION_Y);
5358

5459
final int LOCATION_Y_OFFSET = 60;
55-
ImageView playButton = getHomeButton("images/play.png");
60+
ImageView playButton = ImageUtil.getHomeButton("images/play.png");
5661
playButton.setLayoutX(AppConsts.HOME_BUTTON_LOCATION_X);
5762
playButton.setLayoutY(AppConsts.HOME_BUTTON_LOCATION_Y);
5863
playButton.setOnMouseClicked(mouseEvent -> {
5964
// 还有选择关卡步骤,做个弹窗选择关卡...
6065
initGameUI();
6166
});
6267

63-
ImageView closeButton = getHomeButton("images/close.png");
68+
ImageView closeButton = ImageUtil.getHomeButton("images/close.png");
6469
closeButton.setLayoutX(AppConsts.HOME_BUTTON_LOCATION_X);
6570
closeButton.setLayoutY(AppConsts.HOME_BUTTON_LOCATION_Y + LOCATION_Y_OFFSET);
6671
closeButton.setOnMouseClicked(mouseEvent -> {
@@ -70,18 +75,7 @@ private void initHomeUi() {
7075
anchorPane.getChildren().addAll(homeIconView, playButton, closeButton);
7176
}
7277

73-
private ImageView getHomeButton(String imagePath) {
74-
ImageView imageView = getImageView(imagePath);
75-
imageView.setFitWidth(AppConsts.HOME_BUTTON_WIDTH);
76-
imageView.setFitHeight(AppConsts.HOME_BUTTON_HEIGHT);
77-
return imageView;
78-
}
7978

80-
private ImageView getImageView(String imagePath) {
81-
InputStream urlStream = UrlUtil.getURLStream(imagePath);
82-
Image image = new Image(urlStream);
83-
return new ImageView(image);
84-
}
8579

8680
private void initGameUI() {
8781
// tring levelNamme = "level-001";
@@ -96,6 +90,20 @@ private void initGameUI() {
9690
// optionButtons.setSpacing(10);
9791
// optionButtons.set
9892

93+
// 添加操作按钮
94+
InputStream urlCloseGameStream = UrlUtil.getURLStream("images/close_game.png");
95+
Image closeGameImage = new Image(urlCloseGameStream);
96+
ImageView closeGameImageButton = new ImageView(closeGameImage);
97+
closeGameImageButton.setFitHeight(IMAGE_BUTTON_SIZE - 3);
98+
closeGameImageButton.setFitWidth(IMAGE_BUTTON_SIZE - 3);
99+
closeGameImageButton.setLayoutX(10);
100+
closeGameImageButton.setLayoutY(10);
101+
closeGameImageButton.setOnMouseClicked(mouseEvent -> {
102+
setScene(scene);
103+
factory = null;
104+
System.gc();
105+
});
106+
99107
// 添加操作按钮
100108
InputStream urlResetStream = UrlUtil.getURLStream("images/reset.png");
101109
Image image = new Image(urlResetStream);
@@ -125,7 +133,8 @@ private void initGameUI() {
125133
factory.getReferenceImage().setVisible(false);
126134
});
127135

128-
anchorPane.getChildren().addAll(resetButton, promptButton);
136+
anchorPane.getChildren()
137+
.addAll(closeGameImageButton, resetButton, promptButton);
129138
}
130139

131140
}

src/main/java/org/i7606/jigsaw_puzzle/window/play/level/LevelBuild.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private int getCardSize() {
189189
} else if (num == 16) {
190190
cardSize = (AppConsts.BORDER_SIZE - (AppConsts.BORDER_WEIGHT << 1)) / 4;
191191
} else {
192-
throw new RuntimeException("暂不支持该num数量");
192+
throw new RuntimeException("暂不支持该num数量");
193193
}
194194
}
195195
return cardSize;
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.i7606.jigsaw_puzzle.window.play.scenes;
2+
3+
import cn.hutool.core.util.StrUtil;
4+
import javafx.scene.Scene;
5+
import javafx.scene.image.ImageView;
6+
import javafx.scene.layout.AnchorPane;
7+
import org.i7606.jigsaw_puzzle.commons.AppConsts;
8+
import org.i7606.jigsaw_puzzle.commons.utils.ConfigUtil;
9+
import org.i7606.jigsaw_puzzle.commons.utils.ImageUtil;
10+
11+
import java.util.ArrayList;
12+
import java.util.HashMap;
13+
14+
/**
15+
* @Author SingleKey
16+
* @Date 2023/9/19 15:20
17+
*/
18+
public class SelectionGameScene extends Scene {
19+
20+
private AnchorPane anchorPane;
21+
22+
private final int TEXT_IMAGE_WIDTH = 150;
23+
private final int TEXT_IMAGE_HEIGHT = 37;
24+
private final int TEXT_IMAGE_LOCATION_X = (AppConsts.WINDOW_WIDTH - TEXT_IMAGE_WIDTH) >> 1;
25+
private final int TEXT_IMAGE_LOCATION_Y = 50;
26+
private final int BORDER_SIZE = 100;
27+
28+
/**
29+
* 用户选择的关卡
30+
*/
31+
private String[] levels;
32+
private ArrayList<String> levelPreImages;
33+
private String userSelect;
34+
public SelectionGameScene() {
35+
super(new AnchorPane());
36+
anchorPane = (AnchorPane) getRoot();
37+
init();
38+
}
39+
40+
private void init() {
41+
loadConfig();
42+
addTitle();
43+
addGames();
44+
}
45+
46+
private void loadConfig() {
47+
HashMap<String, Object> levelsConfig = ConfigUtil.getLevelsConfig();
48+
levels = (String[]) levelsConfig.get("levels");
49+
if (levels == null || levels.length == 0) {
50+
throw new RuntimeException("请添加关卡资源!");
51+
}
52+
levelPreImages = new ArrayList<>();
53+
for (int i = 0; i < levels.length; i++) {
54+
if (StrUtil.isNotBlank(levels[i])) {
55+
String levelName = levels[i];
56+
HashMap<String, Object> config = ConfigUtil.getConfig(levelName);
57+
String preView = (String) config.get("reference");
58+
String levelCnName = (String) config.get("name");
59+
if (StrUtil.isBlank(preView)) {
60+
throw new RuntimeException("关卡" + levelCnName + "缺失参考图!");
61+
}
62+
// TODO:将所有组件封装起来
63+
levelPreImages.add("levels/" + levelName + "/" + preView);
64+
}
65+
}
66+
}
67+
68+
private void addTitle() {
69+
ImageView textImage = ImageUtil.getImageView("images/tips.png");
70+
textImage.setFitWidth(TEXT_IMAGE_WIDTH);
71+
textImage.setFitHeight(TEXT_IMAGE_HEIGHT);
72+
textImage.setLayoutX(TEXT_IMAGE_LOCATION_X);
73+
textImage.setLayoutY(TEXT_IMAGE_LOCATION_Y);
74+
anchorPane.getChildren().add(textImage);
75+
}
76+
77+
private void addGames() {
78+
ImageView border = ImageUtil.getImageView("images/border.png");
79+
border.setFitWidth(BORDER_SIZE);
80+
border.setFitHeight(BORDER_SIZE);
81+
}
82+
83+
}
4.56 KB
Loading

src/main/resources/images/tips.png

4.97 KB
Loading

src/main/resources/levels.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"levels": [
3-
"level-test:数字",
4-
"level-001:油画美女",
5-
"level-002:天空"
3+
"level-test",
4+
"level-001",
5+
"level-002"
66
]
77
}

0 commit comments

Comments
 (0)