Java 随机化图像视图以使游戏随机
我已经创建了一个配对游戏,它都可以运行,但正如你所看到的,它是以一种固定的方式制作的。我在代码中添加了4个按钮,总共有24个按钮。我想知道是否有一种方法可以将游戏随机化,例如,是否可以将按钮名称随机化pic1 pic2 pic3 pic4或ids imageview1 2我做了很多搜索,所以这不是一个急迫的问题,如果我不明白,请耐心等待,并请用我的代码告诉我,这样我就知道我在哪里,但代码不适合我Java 随机化图像视图以使游戏随机,java,android,Java,Android,我已经创建了一个配对游戏,它都可以运行,但正如你所看到的,它是以一种固定的方式制作的。我在代码中添加了4个按钮,总共有24个按钮。我想知道是否有一种方法可以将游戏随机化,例如,是否可以将按钮名称随机化pic1 pic2 pic3 pic4或ids imageview1 2我做了很多搜索,所以这不是一个急迫的问题,如果我不明白,请耐心等待,并请用我的代码告诉我,这样我就知道我在哪里,但代码不适合我 public class MainActivity extends Activity {
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView pic1 = (ImageView ) findViewById(R.id.imageView1);
final ImageView pic2 = (ImageView ) findViewById(R.id.imageView2);
final ImageView pic3 = (ImageView ) findViewById(R.id.imageView3);
final ImageView pic4 = (ImageView ) findViewById(R.id.imageView4);
pic1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pic1.setTag("beck");
if (pic1.getTag()==("beck")) {pic1.setBackgroundResource(R.drawable.becks);}
if (pic2.getTag()==("beck")){
pic1.setVisibility(View.INVISIBLE);
pic2.setVisibility(View.INVISIBLE);}
if (pic3.getTag()==("rob") || pic4.getTag()==("rob")) {
pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); }
}});
pic2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pic2.setTag ("beck");
if (pic2.getTag()==("beck")){pic2.setBackgroundResource(R.drawable.becks);}
if (pic1.getTag()==("beck")) {
pic1.setVisibility(View.INVISIBLE);
pic2.setVisibility(View.INVISIBLE); }
if (pic3.getTag()==("rob") || pic4.getTag()==("rob")) {
pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); }
}});
pic3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pic3.setTag("rob");
if (pic3.getTag()==("rob")){pic3.setBackgroundResource(R.drawable.robs);}
if (pic4.getTag()==("rob")){
pic3.setVisibility(View.INVISIBLE);
pic4.setVisibility(View.INVISIBLE); }
if (pic1.getTag()==("beck") || pic2.getTag()==("beck")) {
pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); }
}});
pic4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pic4.setTag ("rob");
if (pic4.getTag()==("rob")){pic4.setBackgroundResource(R.drawable.robs);}
if (pic3.getTag()==("rob")){
pic3.setVisibility(View.INVISIBLE);
pic4.setVisibility(View.INVISIBLE); }
if (pic1.getTag()==("beck") || pic2.getTag()==("beck")) {
pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); }
}});
}}
这是否更接近于解决我的问题?如果是,我如何将图像分配给ImageView的背景
ArrayList<Integer> objects = new ArrayList<Integer>();
array(R.drawable.becks);
array(R.drawable.jordboots);
array(R.drawable.becks);
array(R.drawable.robs);
array(R.drawable.robs);
Collections.shuffle(objects);
ArrayList objects=new ArrayList();
阵列(R.drawable.becks);
数组(R.drawable.jordboots);
阵列(R.drawable.becks);
阵列(R.drawable.robs);
阵列(R.drawable.robs);
集合。洗牌(对象);
我有点明白你在这里做什么,但我认为你的方法非常奇怪
您应该有一个支持您的模型的数据结构。您的数据模型应该表示每一个可能的对(甚至是单个项)。该对象必须具有唯一标识符,并且还必须具有类型(beck、boot等)。应该有一种方法可以为每种类型引用正确的图像(即:beck使用R.drawable.beck)
然后,您应该有一种生成“随机”数据的方法。即:您的数据结构(数组)包含所有分幅或“imageviews数据”
从那里开始应该容易得多
重新思考你的问题。这并不难,但我认为你的方法让它变得超级复杂 我就是这么做的。使用列表保存id信息,然后添加shuffle方法,像往常一样命名按钮
List<Integer> objects = new ArrayList<Integer>();
objects.add(R.id.imageView1);
objects.add(R.id.imageView2);
objects.add(R.id.imageView3);
objects.add(R.id.imageView4);
// Shuffle the collection
Collections.shuffle(objects);
ImageView pic1 = (ImageView ) findViewById(objects.get(0));
ImageView pic2 = (ImageView ) findViewById(objects.get(1));
ImageView pic3 = (ImageView ) findViewById(objects.get(2));
ImageView pic4 = (ImageView ) findViewById(objects.get(3));
List objects=new ArrayList();
添加(R.id.imageView1);
添加(R.id.imageView2);
对象。添加(R.id.imageView3);
对象。添加(R.id.imageView4);
//洗牌
集合。洗牌(对象);
ImageView pic1=(ImageView)findViewById(objects.get(0));
ImageView pic2=(ImageView)findViewById(objects.get(1));
ImageView pic3=(ImageView)findViewById(objects.get(2));
ImageView pic4=(ImageView)findViewById(objects.get(3));
if(pic1.getTag()=(“beck”))似乎不正确,应该是if(String.valueOf(pic1.getTag()).equals(“beck”)?我的意思是你所有的if语句似乎都不正确。如果你唯一的问题是这个。我,对标签字符串等非常陌生,目前我的大部分逻辑都是基于Int的,我只学习youtube等,根本没有教授的帮助。网上有几个例子,有字符串和一个洗牌方法,我想远离Int,因为它们的用途有限,但无法在网上获得更多信息。我会知道很多单词,但还没有一行代码告诉我该怎么做,我会很感激,因为我没有得到你的解释好(数据结构)??我认为标签是唯一的id或按钮名称pic1等可以随机选择,记住我是一个初学者,请保持耐心:-)你正在制作一个双人游戏,你看到一块有瓷砖的棋盘,你点击一块瓷砖,它会翻转(显示图像),然后点击另一块,它也会翻转。如果它们是相同的,则两者都保持翻转,否则它们会再次隐藏?是的,我几乎是这样,但在第二张图像显示它们从屏幕上消失后,没有任何东西会取代它们pic1.setTag(R.drawable.becks);根本不起作用必须有“”,pic1.setTag(“becks”)和上面的没有区别除了不再命名之外没有区别这对随机化有什么帮助???Michael,你看过LibGDX了吗?(理解它可能需要几天时间,但使用专用的游戏框架/引擎会非常容易)。每张卡片都是你场景中的一个演员,你可以在这些演员身上表演“动作”。更好的性能(OpenGL!),更容易处理;)