当卡片结束时,如何使我的随机扑克牌生成器结束?

时间:2018-06-02 20:08:12

标签: java android-studio random poker playing-cards

Android版:4.2

我正在开发一个Android应用程序。我需要随机生成可绘制文件夹中的图像,并设置文本以说明选择了哪个卡。

我希望我的应用程序能够枚举随机选择的每张卡片而不重复 直到52张牌组结束。

我怎么能实现这个目标?

我的xml代码是:

<ImageView
        android:id="@+id/imageView"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_centerInParent="true"
        android:scaleType="centerInside"
        tools:layout_editor_absoluteX="16dp"
        tools:layout_editor_absoluteY="16dp" />

在我的抽签中,我有52张不同名字的扑克牌图片。

public class MainActivity extends AppCompatActivity {

   ImageView imageView;

   TextView txt1;

   Button button;

   Random r;

   Integer[] images = {
           R.drawable.ace_of_hearts,
           R.drawable.two_of_hearts,
           R.drawable.three_of_hearts,
           R.drawable.four_of_hearts,
           ...

我使用此代码在按钮点击和显示卡名称上生成随机卡。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView = (ImageView) findViewById(R.id.imageView);

    txt1 = (TextView) findViewById(R.id.mytext);

    button = (Button) findViewById(R.id.btn1);

    r = new Random();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //remove duplicates
            do {
                pickedImage = r.nextInt(images.length);
            } while (pickedImage == lastPicked);


            lastPicked = pickedImage;
            //display random image
            imageView.setImageResource(images[pickedImage]);
            txt1.setText(images[pickedImage]);
            }
    });
}

1 个答案:

答案 0 :(得分:1)

不是选择随机卡然后必须处理重复,更简单的方法可能是重新排列数组,然后从那里呈现图像:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView = (ImageView) findViewById(R.id.imageView);
    txt1 = (TextView) findViewById(R.id.mytext);
    button = (Button) findViewById(R.id.btn1);

    List<Integer> shuffledCards = new ArrayList<>(Arrays.asList(images));
    Collections.shuffle(shuffledCards);
    final Iterator<Integer> iter= shuffledCards.iterator();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Stop once all the cards have been displayed
            if (!iter.hasNext()) {
                return;
            }

            image = iter.next();
            imageView.setImageResource(image);
            txt1.setText(image);
        }
    });
}