How to check whether the jigsaw puzzle is completed or not?

后端 未结 4 1645
面向向阳花
面向向阳花 2021-01-26 00:40

i am preparing one small game like jigsaw , for that i am using 9 imageview\'s with 9 different images in the layout. set the images to imageview at the time of starting those a

相关标签:
4条回答
  • When you use == operator they are checking if both the objects are referencing the same object. But in your case they are 2 different objects.

    You should set a tag to both the actual image and the other image. And check if they are both the same. That should work in your if condition.

    For the drawable class i did notice a method setLevel and getLevel. You might be able to use this for your requirement.

    0 讨论(0)
  • 2021-01-26 01:17

    why don't you use a gridView? and after each change, just check the items to see that images are in desired order

    0 讨论(0)
  • 2021-01-26 01:20

    I have a simple solution. Set serial number Integer tags to ImageViews using View.setTag(index) before jumbling(before preparing the puzzle.) Then everytime the user makes a move, loop through all the imageviews and check if they are in order. If out of order then puzzle is not completed yet.

    class PuzzleItem {
       Drawable puzzlepartImage;
       int correctPosition;
    
       public PuzzleItem(Drawable d, int index) {
          puzzlepartImage = d;
          correctPosition = index;
       }
    }
    
    ArrayList<PuzzleItem> list = new ArrayList<PuzzleItem>();
    for (int i = 0; i < 9; i++) {
        list.add(new PuzzleItem(drawables[i], i)); 
    }
    Collections.shuffle(list);
    
    //Create the views from this list and add to the layout serially.
    // set the last view as emptyview.
    

    On every move:

    void onClick(View v) {
        /* swap drawables */
        Drawable clickedDrawable = v.getDrawable();
        v.setDrawable(null);
        mEmptyView.setDrawable(clickedDrawable);
        mEmptyView = v;
    
        /* swap tag integers */
        Integer temp = (Integer)mEmptyView.getTag();
        mEmptyView.setTag(v.getTag());
        v.setTag(temp);
    
    }
    

    After every move check for completion:

    for (int i = 0; i < 9; i++) {
        if (imgView[i].getTag() != i) break;
    }
    if (i == 9)// puzzle completed.
    
    0 讨论(0)
  • 2021-01-26 01:21

    Ok, here is what you do for the solution.

    1. maintain a new set of drawables marking them as original drawables that you had initially. may be like

    drawable og11 = imageView11.getDrawable(); do this part before shuffling. now you have original drawables, stored in the form of drawables.

    1. After every click , check if og11 == imageView11.getDrawable(),... and so on for all the images in the jigsaw, if they match , it matches, else, they don't.

    HTH.

    0 讨论(0)
提交回复
热议问题