Skip to content

Commit aa14890

Browse files
committed
feat: 添加参考图配置
1 parent fe4c891 commit aa14890

File tree

4 files changed

+47
-11
lines changed

4 files changed

+47
-11
lines changed

src/main/java/org/i7606/jigsaw_puzzle/commons/utils/ConfigUtil.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public static HashMap<String, Object> getConfig(String levelName) {
3030
int num = jsonObject.getIntValue("num");
3131
String deletion = jsonObject.getString("deletion");
3232
String name = jsonObject.getString("name");
33+
String reference = jsonObject.getString("reference");
3334
JSONArray answerObjs = jsonObject.getJSONArray("answer");
3435
String[] answer = new String[answerObjs.size()];
3536
for (int i = 0; i < answerObjs.size(); i++) {
@@ -38,6 +39,7 @@ public static HashMap<String, Object> getConfig(String levelName) {
3839

3940
config.put("num", num);
4041
config.put("name", name);
42+
config.put("reference", reference);
4143
config.put("deletion", deletion);
4244
config.put("answer", answer);
4345

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.i7606.jigsaw_puzzle.window.play;
22

3+
import javafx.event.EventHandler;
34
import javafx.scene.image.Image;
45
import javafx.scene.image.ImageView;
6+
import javafx.scene.input.MouseEvent;
57
import javafx.scene.layout.AnchorPane;
68
import javafx.stage.Stage;
79
import org.i7606.jigsaw_puzzle.commons.AppConsts;
@@ -16,6 +18,11 @@
1618
*/
1719
public class PlayWindow extends Stage {
1820

21+
/**
22+
* 图片按钮大小
23+
*/
24+
private final int IMAGE_BUTTON_SIZE = 25;
25+
1926
private LevelBuild factory;
2027

2128
public PlayWindow() {
@@ -30,10 +37,10 @@ private void setUi() {
3037
InputStream urlResetStream = UrlUtil.getURLStream("images/reset.png");
3138
Image image = new Image(urlResetStream);
3239
ImageView resetButton = new ImageView(image);
33-
resetButton.setFitHeight(30);
34-
resetButton.setFitWidth(30);
35-
resetButton.setLayoutX(AppConsts.BORDER_START_X + 200);
36-
resetButton.setLayoutY(AppConsts.BORDER_START_Y - 35);
40+
resetButton.setFitHeight(IMAGE_BUTTON_SIZE - 3);
41+
resetButton.setFitWidth(IMAGE_BUTTON_SIZE - 3);
42+
resetButton.setLayoutX(AppConsts.BORDER_START_X + 230);
43+
resetButton.setLayoutY(AppConsts.BORDER_START_Y - 30);
3744
resetButton.setOnMouseClicked(mouseEvent -> {
3845
manage();
3946
setUi();
@@ -45,12 +52,15 @@ private void setUi() {
4552
InputStream urlPromptStream = UrlUtil.getURLStream("images/prompt.png");
4653
Image promptImage = new Image(urlPromptStream);
4754
ImageView promptButton = new ImageView(promptImage);
48-
promptButton.setFitHeight(30);
49-
promptButton.setFitWidth(30);
50-
promptButton.setLayoutX(AppConsts.BORDER_START_X + 260);
51-
promptButton.setLayoutY(AppConsts.BORDER_START_Y - 35);
52-
promptButton.setOnMouseClicked(mouseEvent -> {
53-
55+
promptButton.setFitHeight(IMAGE_BUTTON_SIZE);
56+
promptButton.setFitWidth(IMAGE_BUTTON_SIZE);
57+
promptButton.setLayoutX(AppConsts.BORDER_START_X + 270);
58+
promptButton.setLayoutY(AppConsts.BORDER_START_Y - 31.5);
59+
promptButton.setOnMousePressed(mouseEvent -> {
60+
factory.getReferenceImage().setVisible(true);
61+
});
62+
promptButton.setOnMouseReleased(mouseEvent -> {
63+
factory.getReferenceImage().setVisible(false);
5464
});
5565

5666
anchorPane.getChildren().add(resetButton);

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class LevelBuild {
3535
private String[] answer;
3636
private String deletion;
3737
private String name;
38+
private String reference;
3839
private HashMap<Group, String> imagesMap = new HashMap<>();
3940
private HashMap<String, Group> gameMap = new HashMap<>();
4041
private ArrayList<Group> entitys = new ArrayList<>();
@@ -45,6 +46,8 @@ public class LevelBuild {
4546

4647
// 窗口组件
4748
private AnchorPane anchorPane;
49+
// 参考图
50+
private ImageView referenceImage;
4851

4952
public LevelBuild(String levelName, Stage stage) {
5053
this.configPath = "levels/" + levelName;
@@ -69,14 +72,26 @@ public void build() {
6972
label.setLayoutX(AppConsts.BORDER_START_X);
7073
anchorPane.getChildren().add(label);
7174

72-
// 添加方块
75+
// 添加边框
7376
ImageView borderImage = new ImageView(new Image(UrlUtil.getURLStream("images/border.png")));
7477
borderImage.setFitHeight(AppConsts.BORDER_SIZE);
7578
borderImage.setFitWidth(AppConsts.BORDER_SIZE);
7679
borderImage.setLayoutX(AppConsts.BORDER_START_X);
7780
borderImage.setLayoutY(AppConsts.BORDER_START_Y);
7881

82+
// 添加提示
83+
final double REFERENCE_IMAGE_SIZE_OFFSET = 12;
84+
final double REFERENCE_IMAGE_LOCATION_OFFSET = 6;
85+
referenceImage = new ImageView(new Image(UrlUtil.getURLStream(configPath + "/" + reference)));
86+
referenceImage.setFitHeight(AppConsts.BORDER_SIZE - REFERENCE_IMAGE_SIZE_OFFSET);
87+
referenceImage.setFitWidth(AppConsts.BORDER_SIZE - REFERENCE_IMAGE_SIZE_OFFSET);
88+
referenceImage.setLayoutX(AppConsts.BORDER_START_X + REFERENCE_IMAGE_LOCATION_OFFSET);
89+
referenceImage.setLayoutY(AppConsts.BORDER_START_Y + REFERENCE_IMAGE_LOCATION_OFFSET);
90+
// 设置不可见,需要按住按钮才可见
91+
referenceImage.setVisible(false);
92+
7993
anchorPane.getChildren().add(borderImage);
94+
8095
for (int i = 0; i < entitys.size(); i++) {
8196
Group group = entitys.get(i);
8297
if (group.getLayoutX() == 0 || group.getLayoutY() == 0) {
@@ -85,6 +100,9 @@ public void build() {
85100
anchorPane.getChildren().add(group);
86101
}
87102

103+
// 最后添加,不然会被小方块覆盖
104+
anchorPane.getChildren().add(referenceImage);
105+
88106
stage.setScene(new Scene(anchorPane));
89107
}
90108

@@ -93,6 +111,7 @@ private void loadResource() {
93111
answer = (String[]) config.get("answer");
94112
deletion = (String) config.get("deletion");
95113
name = (String) config.get("name");
114+
reference = (String) config.get("reference");
96115

97116
// 创建棋盘
98117
createCheckerboard((Integer) config.get("num"));
@@ -241,4 +260,8 @@ public boolean isWin() {
241260
public AnchorPane getAnchorPane() {
242261
return anchorPane;
243262
}
263+
264+
public ImageView getReferenceImage() {
265+
return referenceImage;
266+
}
244267
}

src/main/resources/levels/level-001/config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "《美女油画》",
33
"num": 9,
44
"type": "shuffle",
5+
"reference": "g.png",
56
"answer": [
67
"split/g1.gif",
78
"split/g2.gif",

0 commit comments

Comments
 (0)