在益智游戏中移动瓷砖

时间:2016-01-31 07:07:07

标签: java user-interface javafx

我正在尝试制作益智游戏,但问题是我不能做EventHandler setOnMouseClicked.Also我想知道如何重新安排拼图,以便在每个坐标中显示随机图像。这是我有多远。

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class eliss extends Application{

@Override
public void start(Stage primaryStage) {
    ImageView view[][] = new ImageView[5][5];
    Image imag = new Image("http://images.cdn.autocar.co.uk/sites/autocar.co.uk/files/styles/gallery_slide/public/ferrari-laferrari-zfye-059_1.jpg?itok=hfLNxUD9",600,600,false,true);

    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setVgap(2);
    pane.setHgap(2);

    PuzzleImage(view, imag, pane);


    Scene scene = new Scene(pane,1100,1100);
    primaryStage.setTitle("Elis");
    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] x)
  {
    launch(x);
  }

public void PuzzleImage( ImageView view[][],Image imag,GridPane pane)
{
     for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {

    if(j==4 && i==4) view[i][j]=null;
    else{
    view[i][j]=new ImageView(imag);
    Rectangle2D rect = new Rectangle2D(120*i,120*j,120,120);
    view[i][j].setViewport(rect);
    pane.add(view[i][j], i, j);
    }
    }
    }
}
}

2 个答案:

答案 0 :(得分:1)

对于StackOverflow上的问题,您所要求的内容太多了。但是,我有一点闲暇时间,所以我很快起草了一些代码来证明你需要的东西:

$value1 = $_POST['user'];
$query = "SELECT * FROM userdetails WHERE usernamename = '$value1'";
$dbc = mysqli_query($conn,$query);
$counter = mysqli_num_rows($dbc);
if ($counter >= 1){
    echo "duplicate entry";
}else{
    echo "success";
  }

enter image description here

答案 1 :(得分:0)

您可以使用Collections.shuffle生成List的随机排列。这可用于以随机顺序放置切片:

private static final int COLUMN_COUNT = 5;
private static final int ROW_COUNT = 5;

private static void fillGridPane(GridPane pane, ImageView[][] view, Image imag) {
    List<ImageView> images = new ArrayList<>(24);
    for (int i = 0; i < COLUMN_COUNT; i++) {
        for (int j = 0, end = i == (COLUMN_COUNT - 1) ? ROW_COUNT - 1 : ROW_COUNT; j < end; j++) {
            ImageView iv = new ImageView(imag);
            images.add(iv);
            view[i][j] = iv;
            Rectangle2D rect = new Rectangle2D(120 * i, 120 * j, 120, 120);
            iv.setViewport(rect);
        }
    }
    Collections.shuffle(images);
    Iterator<ImageView> iter = images.iterator();
    for (int i = 0; i < COLUMN_COUNT; i++) {
        for (int j = 0, end = i == (COLUMN_COUNT - 1) ? ROW_COUNT - 1 : ROW_COUNT; j < end; j++) {
            pane.add(iter.next(), i, j);
        }
    }
}

onMouseClicked事件处理程序可以附加到GridPaneMouseEvent.getTarget可用于获取被点击的节点:

pane.setOnMouseClicked(event -> {
    if (move(event)) {
        if (checkWin()) {
            new Alert(Alert.AlertType.INFORMATION, "You Win!").show();
        }
    }
});
private int emptyTileX = 4;
private int emptyTileY = 4;

private boolean move(MouseEvent event) {
    Object target = event.getTarget();

    if (target instanceof ImageView) {
        ImageView iv = (ImageView) target;
        int row = GridPane.getRowIndex(iv);
        int column = GridPane.getColumnIndex(iv);

        int dx = Math.abs(column - emptyTileX);
        int dy = Math.abs(row - emptyTileY);

        if ((dx == 0 && dy == 1) || (dx == 1 && dy == 0)) {
            // swap image and empty tile, if they are next to each other
            GridPane.setConstraints(iv, emptyTileX, emptyTileY);
            emptyTileX = column;
            emptyTileY = row;
            return true;
        }
    }
    return false;
}

要查看获胜条件,您只需检查ImageView

GridPane的位置即可
private boolean checkWin() {
    for (int i = 0; i < COLUMN_COUNT; i++) {
        for (int j = 0, end = i == (COLUMN_COUNT - 1) ? ROW_COUNT - 1 : ROW_COUNT; j < end; j++) {
            ImageView iv = view[i][j];
            if (GridPane.getColumnIndex(iv) != i || GridPane.getRowIndex(iv) != j) {
                return false;
            }
        }
    }
    return true;
}