如何在For循环中创建一个睡眠线程?

时间:2014-03-14 19:29:14

标签: java android multithreading loops sleep

我正在制作一个纸牌游戏应用程序,我完成了基本的东西,现在我试图让它看起来很专业。 我想要做的第一件事是卡的分配效果, 我想制作一个洗牌效果。 当一张牌给玩家时,我希望与下一张分发给他的牌相差至少500毫秒。 想法? 这是我代码中的一部分..

    private void SetTheGame() {
    SetShuffleSound();
    for ( int i = 0; i < Imagename.length;i++) {
        Imagename[i] = (ImageView) findViewById(WTF[i]);
        CountCards();
        Random = getRandom();
        SwitchImages SwitchMe = new SwitchImages(myNewArray[Random]);
        int first = SwitchMe.ChangeImages();
        Imagename[i].setImageResource(myNewArray[Random]);
        Imagename[i].setVisibility(View.VISIBLE);
        CardsCount valueOfCard = new CardsCount(myNewArray[Random]);
        int a = valueOfCard.WhatsMyValue();
        String b = valueOfCard.TheFamily();
        switch (i) {
        case 0:
            if (first != 0) {
                Imagename[0].setImageResource(first);
            }
            FirstColumnComputer.add(a);
            FirstColumnComputerFAMILY.add(b);

            break;
        case 1:
            if (first != 0) {
                Imagename[1].setImageResource(first);
            }
            SecondColumnComputer.add(a);
            SecondColumnComputerFAMILY.add(b);

            break;
        case 2:
            if (first != 0) {
                Imagename[2].setImageResource(first);
            }
            ThirdColumnComputer.add(a);
            ThirdColumnComputerFAMILY.add(b);


            break;
        case 3:
            if (first != 0) {
                Imagename[3].setImageResource(first);
            }
            FourColumnComputer.add(a);
            FourColumnComputerFAMILY.add(b);

            break;
        case 4:
            if (first != 0) {
                Imagename[4].setImageResource(first);
            }
            FifthColumnComputer.add(a);
            FifthColumnComputerFAMILY.add(b);

            break;
        case 5:
            FirstColumnPlayer.add(a);
            FirstColumnPlayerFAMILY.add(b);

            break;
        case 6:
            SecondColumnPlayer.add(a);
            SecondColumnPlayerFAMILY.add(b);

            break;
        case 7:
            ThirdColumnPlayer.add(a);
            ThirdColumnPlayerFAMILY.add(b);

            break;
        case 8:
            FourColumnPlayer.add(a);
            FourColumnPlayerFAMILY.add(b);

            break;
        case 9:
            FifthColumnPlayer.add(a);
            FifthColumnPlayerFAMILY.add(b);

            break;

        }
        Cards.remove(Random);
  //        MakeTheCardPause();
    }
    SentTheLinkedList();
}  

MakeTheCardPause()是问题......

       private void MakeTheCardPause() {
      Thread Timer = new Thread()
    {
        public void run()
        {
            try{
                sleep(1000);
            }catch(InterruptedException e)
            {
            e.printStackTrace();
            }finally
            {
            //do something...   
            }

        }
    };  
    Timer.start();
}

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以通过多种方式做到这一点。 Thread.sleep(500)是你建议的方式,但它不是我推荐的。这是两个选择

Message Handler

一个例子

Handler mHandler = new Handler(){           
            public void handleMessage(Message msg){
                super.handleMessage(msg);
                switch(msg.what){
                    case shuffle:
                        // Do something
                        break;
                    case doneShuffle:
                      //Do something
                }
            }       
        };

Asynch Tasks

以下是一个例子:

private class shuffleCards extends AsyncTask<Card, Integer, Long> {
     protected Long doInBackground(Card card) {
         //Do something
            //shuffle deck
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return deck;
     }

     protected void onProgressUpdate(Integer... progress) {
         //Number of shuffled cards??
     }

     protected void onPostExecute(Long result) {
        //Show card
     }
 }

请记住,这只是显示结果的后台任务。您的主线程将处理实际的卡值并将它们交给Asynch任务。

祝你好运

答案 1 :(得分:0)

这个怎么样?你需要在工作线程中进行休眠,上面的代码创建一个新线程并告诉它休眠,这对用户没有明显的影响。

private void SetTheGame() {
    SetShuffleSound();
    for ( int i = 0; i < Imagename.length;i++) {
        Imagename[i] = (ImageView) findViewById(WTF[i]);
        CountCards();
        Random = getRandom();
        SwitchImages SwitchMe = new SwitchImages(myNewArray[Random]);
        int first = SwitchMe.ChangeImages();
        Imagename[i].setImageResource(myNewArray[Random]);
        Imagename[i].setVisibility(View.VISIBLE);
        CardsCount valueOfCard = new CardsCount(myNewArray[Random]);
        int a = valueOfCard.WhatsMyValue();
        String b = valueOfCard.TheFamily();
        switch (i) {
        case 0:
            if (first != 0) {
                Imagename[0].setImageResource(first);
            }
            FirstColumnComputer.add(a);
            FirstColumnComputerFAMILY.add(b);

            break;
        case 1:
            if (first != 0) {
                Imagename[1].setImageResource(first);
            }
            SecondColumnComputer.add(a);
            SecondColumnComputerFAMILY.add(b);

            break;
        case 2:
            if (first != 0) {
                Imagename[2].setImageResource(first);
            }
            ThirdColumnComputer.add(a);
            ThirdColumnComputerFAMILY.add(b);


            break;
        case 3:
            if (first != 0) {
                Imagename[3].setImageResource(first);
            }
            FourColumnComputer.add(a);
            FourColumnComputerFAMILY.add(b);

            break;
        case 4:
            if (first != 0) {
                Imagename[4].setImageResource(first);
            }
            FifthColumnComputer.add(a);
            FifthColumnComputerFAMILY.add(b);

            break;
        case 5:
            FirstColumnPlayer.add(a);
            FirstColumnPlayerFAMILY.add(b);

            break;
        case 6:
            SecondColumnPlayer.add(a);
            SecondColumnPlayerFAMILY.add(b);

            break;
        case 7:
            ThirdColumnPlayer.add(a);
            ThirdColumnPlayerFAMILY.add(b);

            break;
        case 8:
            FourColumnPlayer.add(a);
            FourColumnPlayerFAMILY.add(b);

            break;
        case 9:
            FifthColumnPlayer.add(a);
            FifthColumnPlayerFAMILY.add(b);

            break;

        }
        Cards.remove(Random);
        long sleepMax = 1000L;
        Random r = new Random();
        long delay = (long) (r.nextDouble() * range);
        Thread.sleep(delay);
    }
    SentTheLinkedList();
}