簡體   English   中英

如何在For循環中創建一個睡眠線程?

[英]How to make a sleep thread in For loop?

我正在制作一個紙牌游戲應用程序,我完成了基本的東西,現在我想讓它看起來很專業。 我想要做的第一件事是卡的分配效果,我想做一個隨機卡片效果。 當一張牌給玩家時,我希望與下一張分發給他的牌相差至少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();
}

謝謝!

你可以用很多方法做到這一點。 Thread.sleep(500)是你建議的方式,但它不是我推薦的。 這有兩種選擇

消息處理程序

一個例子

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任務

這是一個例子:

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任務。

祝好運

那這個呢? 你需要在工作線程中進行休眠,上面的代碼是創建一個新線程並告訴它睡眠,這對用戶沒有明顯的影響。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM