【问题标题】:(Processing) Removing Previously Used Object in Array(处理)删除数组中以前使用的对象
【发布时间】:2014-11-24 03:10:46
【问题描述】:

很抱歉标题的措辞很糟糕。我正在为我的编程课在处理中创建一个“战争”游戏。我需要更改我的代码,以便从卡组/阵列中删除每张使用的卡。我偶然发现了一些提到“ArrayList”的帖子和谷歌搜索结果,但我还是有点不知所措。

以下代码显示两张独立的随机牌,并在单击鼠标时显示两张新的随机牌。

(第一个标签“战争”)

void draw(){
image(card[imageIndex],40,150);
image(card2[imageIndex2],340,150);
}

void mousePressed(){
imageIndex = int(random(card.length));
imageIndex2 = int(random(card2.length));
}

(第二个标签“卡片”)

PImage[] card = new PImage[13];
PImage[] card2 = new PImage[13];
int imageIndex = int(random(0,12)),
imageIndex2 = int(random(0,12));

void setup(){
size(500,500);
card[0] = loadImage("2_of_clubs.jpg");
card[1] = loadImage("3_of_clubs.jpg");
card[2] = loadImage("4_of_clubs.jpg");
card[3] = loadImage("5_of_clubs.jpg");
card[4] = loadImage("6_of_clubs.jpg");
card[5] = loadImage("7_of_clubs.jpg");
card[6] = loadImage("8_of_clubs.jpg");
card[7] = loadImage("9_of_clubs.jpg");
card[8] = loadImage("10_of_clubs.jpg");
card[9] = loadImage("jack_of_clubs.jpg");
card[10] = loadImage("queen_of_clubs.jpg");
card[11] = loadImage("king_of_clubs.jpg");
card[12] = loadImage("ace_of_clubs.jpg");

card2[0] = loadImage("2_of_clubs.jpg");
card2[1] = loadImage("3_of_clubs.jpg");
card2[2] = loadImage("4_of_clubs.jpg");
card2[3] = loadImage("5_of_clubs.jpg");
card2[4] = loadImage("6_of_clubs.jpg");
card2[5] = loadImage("7_of_clubs.jpg");
card2[6] = loadImage("8_of_clubs.jpg");
card2[7] = loadImage("9_of_clubs.jpg");
card2[8] = loadImage("10_of_clubs.jpg");
card2[9] = loadImage("jack_of_clubs.jpg");
card2[10] = loadImage("queen_of_clubs.jpg");
card2[11] = loadImage("king_of_clubs.jpg");
card2[12] = loadImage("ace_of_clubs.jpg");
}

【问题讨论】:

  • 也许这篇文章能有所帮助。它已被移动,我只能找到这个未格式化的版本。无论如何值得一读;)archive-org.com/page/4420950/2014-08-17/http://…
  • 是的,您可能应该为此使用 ArrayList。当您在 Google 上搜索“ArrayList 教程”时发生了什么?您可以使用数组并将要删除的索引也设置为 null。

标签: arrays arraylist processing


【解决方案1】:

使用 ArrayList 看起来或多或少像:

// gonna use strings instead of images
// just to show the idea. I don't have all this images...
ArrayList<String> card = new ArrayList<String>();
ArrayList<String> card2;

int imageIndex, imageIndex2;

String display1, display2;

void setup() {
  size(500, 500);
  card.add("2_of_clubs.jpg");
  card.add("3_of_clubs.jpg");
  card.add("4_of_clubs.jpg");
  card.add("5_of_clubs.jpg");
  card.add("6_of_clubs.jpg");
  card.add("7_of_clubs.jpg");
  card.add("8_of_clubs.jpg");
  card.add("9_of_clubs.jpg");
  card.add("10_of_clubs.jpg");
  card.add("jack_of_clubs.jpg");
  card.add("queen_of_clubs.jpg");
  card.add("king_of_clubs.jpg");
  card.add("ace_of_clubs.jpg");

  card2 = new ArrayList<String>(card);


  imageIndex = int(random(card.size()));
  imageIndex2 = int(random(card2.size()));

  display1 = card.get(imageIndex);
  display2 = card2.get(imageIndex2);

  card.remove(imageIndex);
  card2.remove(imageIndex2);

  println("\ncard draw from card : "+ display1);
  println("card draw from card2: "+ display2 + "\n");
}

void draw() {
}

void mousePressed() {
  if (card.size() > 0) {
    imageIndex = int(random(card.size()));
    imageIndex2 = int(random(card2.size()));

    display1 = card.get(imageIndex);
    display2 = card2.get(imageIndex2);

    card.remove(imageIndex);
    card2.remove(imageIndex2);

    println("\ncard draw from card : "+ display1);
    println("card draw from card2: "+ display2 + "\n");
  } else {
    println("The deck is empty...");
  }
}

【讨论】:

    【解决方案2】:

    如果您必须使用数组,那么您将不得不执行类似于以下代码的操作:

    PImage[] removeCardFromDeck(PImage deck, int index){
      PImage[] newdeck = new PImage[deck.length -1];
      int count=0;
      for(int i =0 ; i<newdeck.length;i++){
        if(count==index) count++;
        newdeck[i] = deck[count];
        count++;    
      }
      return newdeck;
    }
    

    但对于这个任务,最好使用 ArrayLists。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2015-06-14
      相关资源
      最近更新 更多