我正在设计Android / Java游戏,到目前为止一切都进展顺利。游戏显示来自52个牌组的随机牌,用户必须确定下一张牌是高还是低。我把我的开关和放大器在我的主类中的情况,我不知道如何重新运行switch和case语句来随机绘制另一张卡。
下面是我的课程,我知道我不需要这么多,但我改变了很多代码,因为我的原始代码试图让它工作。我知道问题不在于我的应用程序,因为我在android方面缺乏经验...查看代码并告诉我你的想法。由于它是一个非常广泛的问题,并且可能有不止一个答案,我会向所有给出相关答案的人投票,天气我是否使用该解决方案。
谢谢,
-Steve
我的主要游戏类:
public class Game extends SwarmActivity {
int cardNum;
Deck d = new Deck();
int x = d.shuffle();
String y = String.valueOf(x);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
Swarm.init(this, 1388, "1e02a1ecfa9483b7b62e7b32c7e055f3");
TextView t = (TextView) findViewById(R.id.score);
ImageView display = (ImageView) findViewById(R.id.display);
switch (x) {
case 0:
display.setImageResource(R.drawable.c_one);
cardNum = 1;
break;
case 1:
display.setImageResource(R.drawable.c_two);
cardNum = 2;
break;
case 2:
display.setImageResource(R.drawable.c_three);
cardNum = 3;
break;
case 3:
display.setImageResource(R.drawable.c_four);
cardNum = 4;
break;
case 4:
display.setImageResource(R.drawable.c_five);
cardNum = 5;
break;
---------- (5-49) ----------
case 50:
display.setImageResource(R.drawable.c_fiftyone);
cardNum = 51;
break;
case 51:
display.setImageResource(R.drawable.c_fiftytwo);
cardNum = 52;
break;
}
ImageView higher = (ImageView) findViewById(R.id.btn_higher);
ImageView lower = (ImageView) findViewById(R.id.btn_lower);
higher.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
lower.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
甲板上课:(最初是在我的游戏课上)
public class Deck {
public int shuffle() {
Shuffle s = new Shuffle();
int[] shuffDeck = s.getShuffle();
int i = 0;
int x = shuffDeck[i];
String y = String.valueOf(x);
return x;
}
}
Shuffle Class :(原来这是我的游戏课程)
public class Shuffle {
public static int[] getShuffle() {
int[] cards = new int[52];
ArrayList<Integer> cards_objs = new ArrayList<Integer>();
for (int i = 0; i < cards.length; i++) {
cards_objs.add(i);
}
Collections.shuffle(cards_objs);
for (int i = 0; i < cards.length; i++) {
cards[i] = cards_objs.get(i);
}
return cards;
}
}
答案 0 :(得分:1)
如果你想更换那个大的开关盒,那么试着命名你的drawables,如card_00.png,card_01.png ... card_51.png。这样,您可以使用反射API(或其他内容)更轻松地访问您的drawable ID,如下所示:
int [] cards = new int [52];
Field [] fields = R.drawable.class.getDeclaredFields();
String [] names = new String[52];
for(int i=0; i<fields.length; i++)
if(fields[i].getName().contains("card_"))
names[i] = fields[i].getName();
Arrays.sort(names);
try
{
for(int i=0; i<names.length; i++)
cards[i] = R.drawable.class.getField(names[i]).getInt(null);
}
catch(Exception ex){}
如果一切顺利,那么现在你已经拥有了一张卡片的所有可绘制ID的数组。现在你的生活变得简单了90%。要设置随机卡,只需使用:
//create a Random object, and an integer
//indicating the current card as a member of your class:
Random random = new Random();
int actual = 0;
//then for random card selection:
actual = random.nextInt(52);
display.setImageResource(cards[actual]);
//for getting a higher card:
actual = actual<51 ? actual+1 : actual;
display.setImageResource(cards[actual]);
//for getting a lower card:
actual = actual>0 ? actual-1 : actual;
display.setImageResource(cards[actual]);