Как проверить, завершена ли головоломка или нет? - PullRequest
0 голосов
/ 20 сентября 2011

Я готовлю одну маленькую игру, такую ​​как головоломка, для этого я использую 9 изображений с 9 различными изображениями в макете.установите изображения для просмотра изображений во время запуска, это фактические изображения, после того, как пользователь shuffle выполнит скольжение изображений для завершения головоломки, я хочу проверить измененное изображение с фактическим изображением, оно равно или нет, если они равны, всплывающее сообщение, как геймплей.

я пробовал вот так

1.по использованию оператора AND между изображениями (Drawables), но не повезло.

2.Использование setLevel () для изображений, сравните те setLevelзначения со значениями getLevel для изображений после скольжения все еще Не повезло .. здесь проблема в том, что если я нажимаю один раз на просмотр изображений, то getLevel () дает правильное значение, если я нажимаю более одного раза, это дает нулевое значение.Почему это происходит следующим образом ..

Пожалуйста, помогите мне, если вы обнаружите какую-либо ошибку в моем коде, в противном случае наведите меня на хорошую технику ..

Xml code like this
<RelativeLayout
   //9 imageview's  

в коде jave, как это, если пользователь будетнажмите на изображение, оно поменяет местами

 img_View11.setOnClickListener(new View.OnClickListener()  {            
    public void onClick(View v)  { 

        if(img_View21.getDrawable() == default_img || 
                                    img_View12.getDrawable() == default_img) {

            System.out.println("yes");
            ++click;
            Noof_moves.setText("Moves: " +click);
            ImageView iv = (ImageView)v;                 
            d11 = iv.getDrawable();   
            prev_img = prev_imgView.getDrawable();

            la11 = d11.getLevel();
            System.out.println("d11 value is " +la11);                  

            prev_imgView.setImageDrawable(d11);                 

            img_View11.setImageDrawable(prev_img);                
            prev_imgView = img_View11;

            check();
            }
        else { System.out.println("no");  }
        }
    });

void check(){

    System.out.println("in checking condition");
    if((lb11==la11) && (lb12==la12) && (lb13==la13) && (lb21==la21) && (lb22==la22)
        && (lb23==la23) && (lb31==la31) && (lb32==la32) && (lb33==la33)) {
            Context c = getBaseContext();
            System.out.println("gameover");
            Toast.makeText(c, " GameOver ", Toast.LENGTH_SHORT).show();
    }else{ System.out.println(" codition not checked "); }
} 
//here lb=level before sliding
//     la=level after sliding..

Ответы [ 4 ]

5 голосов
/ 23 сентября 2011

Хорошо, вот что вы делаете для решения.

  1. поддерживает новый набор элементов рисования, помечая их как исходные чертежи, которые были у вас изначально. может быть как

drawable og11 = imageView11.getDrawable (); сделать эту часть, прежде чем тасовать. теперь у вас есть оригинальные рисунки, хранящиеся в виде рисунков.

  1. После каждого клика проверяйте og11 == imageView11.getDrawable (), ... и т. Д. Для всех изображений в мозаике, если они совпадают, совпадает, в противном случае они не совпадают.

НТН.

2 голосов
/ 22 сентября 2011

У меня есть простое решение. Установите серийные номера Integer тегов для ImageViews, используя View.setTag (индекс), перед тем как смешивать (перед подготовкой головоломки). Затем каждый раз, когда пользователь делает ход, циклически просматривайте все изображения и проверяйте, в порядке ли они. Если не в порядке, то головоломка еще не завершена.

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.

На каждый ход:

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

}

После каждого хода проверяйте завершение:

for (int i = 0; i < 9; i++) {
    if (imgView[i].getTag() != i) break;
}
if (i == 9)// puzzle completed.
0 голосов
/ 20 сентября 2011

почему вы не используете gridView?и после каждого изменения просто проверяйте пункты, чтобы видеть, что изображения находятся в желаемом порядке

0 голосов
/ 20 сентября 2011

Когда вы используете оператор ==, они проверяют, ссылаются ли оба объекта на один и тот же объект.Но в вашем случае это 2 разных объекта.

Вы должны установить тег как на фактическое изображение, так и на другое изображение.И проверьте, одинаковы ли они оба.Это должно работать в вашем условии if.

Для класса drawable я заметил метод setLevel и getLevel.Вы могли бы использовать это для вашего требования.

...