2017-02-17 141 views
1

目前,我正在研究一個簡單的俄羅斯輪盤應用程序。Android Studio - - MainActivity中只有1個按鈕播放聲音

它有三個按鈕:

  • 自旋 - 剛剛起着紡絲筒的聲音(這個工程目前)。

  • 插入回合 - 將一顆子彈放入左輪手槍(尚未得到)並播放聲音(作品)。

  • 玩法 - 根據機會以及左輪手槍中有多少子彈,使用布爾型失火或發射一輪(如果發射一發圓,從子彈中取出子彈)。目前我使用的是1到6之間的隨機數字,0是您在啓動應用程序時的默認輪次(因此它包括在左輪手槍中沒有輪次的機制)。

這裏是我的活動是什麼樣子:

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.media.MediaPlayer; 

import java.util.Random; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    //Buttons of Main-activity displayed 
    Button one = (Button) findViewById(R.id.spinner); 
    one.setOnClickListener(this); 
    Button two = (Button) findViewById(R.id.insert_Round); 
    two.setOnClickListener(this); 
    Button three = (Button) findViewById(R.id.fire_weapon); 
    three.setOnClickListener(this); 
    int rounds_left = 0; 
} 

//Let's make addition. 
public static int add(int i) { 
    i++; 
    return i; 
} 

@Override 
public void onClick (View v) { 
    int rounds_left = 0; 
    switch (v.getId()) { 
     case R.id.spinner: 
      //play spinner sound 
      final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.spinnersound); 
      mp1.start(); 
      break; 
     case R.id.insert_Round: 
      //play insert_round sound 
      final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.insert_round_sound); 
      mp2.start(); 
      //Adds one round into chamber (I need help here) 
      break; 
     case R.id.fire_weapon: 
      //Random number between 1 and 6... *Click* or *Fire* 
      Random rand = new Random(); 
      int play_chances = rand.nextInt(7) + 1; 
      if (play_chances < rounds_left) { 
       final MediaPlayer mp4 = MediaPlayer.create(this, R.raw.fire_sound); 
       mp4.start(); 
       //Take a bullet away (need help here too) 
      } else { 
       final MediaPlayer mp3 = MediaPlayer.create(this, R.raw.misfire_sound); 
       mp3.start(); 
      } 
      break; 
    } 
} 

} 

而且this是怎麼樣子至今。


我有兩個問題:

  1. 如何讓這個當我按下插入圓形按鈕,我可以添加1輪我rounds_left

    我能夠創建一個添加方法(這就是所謂的?),使這種增加發生。我試圖多次應用它無濟於事。

    public static int add(int i) { 
        i++; 
        return i; 
    } 
    
  2. 我如何採取輪從我rounds_left離開我已經履行了子彈後?

+0

您想先將int rounds_left成爲一個成員變量(將它放置在類的頂部和方法之外)。否則,每次點擊該按鈕時它將被重置爲0,並且在onClick之外無用 – codeMagic

+0

我已更改int rounds_left,以便它位於onClick之外。我把它一直放在課堂上。 – Soulvirtue

回答

0

1:R.id.insert_Round內箱子:

case R.id.insert_Round: 
    if(rounds_left < 6) 
    rounds_left++; 

2:R.id.fire_weapon內箱子:

case R.id.fire_weapon: 
    if(rounds_left > 1){ 
     //do stuff 
     rounds_left--; 
    } else { 
     //play empty chamber sound 
    } 

未經請求的建議:

而不是one.setOnClickListener(this);我建議做更類似的事情:

one.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      whateverMethodOrCodeYouWantToTriggerWhenUserClicksOne(); 
     } 

two.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      whateverMethodOrCodeYouWantToTriggerWhenUserClicksTwo(); 
     } 

您的代碼將更容易閱讀和維護。

另外:

public static int add(int i) { 
    i++; 
    return i; 
} 

這樣的代碼將會困擾你還是差一些維護者一天。這種方法沒有必要。它的名字不清楚,而且會產生一些人可能不期待的副作用。在適當的情況下只需增加i而不用自定義方法。