我怎样才能将数组的值设置为我想通过命令调用的变量的名称(在java中)?

时间:2015-02-25 21:48:00

标签: java arrays

引言

我正在制作一个小型的国际象棋游戏,我用图片来表示所有的棋子,我的所有作品都是通过一个功能来控制它们。所有部分的位置都记录在一个数组中,但是现在我想使用数组中记录的内容来选择板上哪个图块需要什么图像,到目前为止我只有一个99%的工作脚本问题在于它。

主要问题:

java除了我的数组中的内容之外没有选择我之前加载的正确图片:

void tekenstukken(){
  for(int x = 0 ; x < 8 ; x++){
    for(int y = 0 ; y < 8 ; y++){

      image(schaakstukken[y][x], x*blokgroote, y*blokgroote, blokgroote, blokgroote);
      // -------- blokgroote is dutch for blocksize --------
} } }

在这段代码中唯一不起作用的是schaakstukken[y][x]这包含我之前制作的IPmage变量的名称:

String[][] schaakstukken = new String[][]{      //schaakstukken means chesspieces in dutch
  {"Tb","Hb","Rb","Qb","Kb","Rb","Hb","Tb"},    //Tb is my name for the Tower on the Black side, the other names are simulair
  {"Pb","Pb","Pb","Pb","Pb","Pb","Pb","Pb"},
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  {"Pw","Pw","Pw","Pw","Pw","Pw","Pw","Pw"},
  {"Tw","Hw","Rw","Qw","Kw","Rw","Hw","Tw"}
};

这是我的完整代码:

String[][] schaakstukken = new String[][]{
  {"Tb","Hb","Rb","Qb","Kb","Rb","Hb","Tb"},
  {"Pb","Pb","Pb","Pb","Pb","Pb","Pb","Pb"},
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  { "" , "" , "" , "" , "" , "" , "" , "" },
  {"Pw","Pw","Pw","Pw","Pw","Pw","Pw","Pw"},
  {"Tw","Hw","Rw","Qw","Kw","Rw","Hw","Tw"}
};
int breedte = 800;
int hoogte = breedte;
int blokgroote = breedte/8;
int blokkleur1 = #ffffff;
int blokkleur2 = #999999;
PImage Tb;
PImage Hb;
PImage Rb;
PImage Qb;
PImage Kb;
PImage Pb;
PImage Tw;
PImage Hw;
PImage Rw;
PImage Qw;
PImage Kw;
PImage Pw;


void setup(){
  size(breedte, hoogte);
  noStroke();
  Tb = loadImage("Tb.png");
  Hb = loadImage("Hb.png");
  Rb = loadImage("Rb.png");
  Qb = loadImage("Qb.png");
  Kb = loadImage("Kb.png");
  Pb = loadImage("Pb.png");
  Tw = loadImage("Tw.png");
  Hw = loadImage("Hw.png");
  Rw = loadImage("Rw.png");
  Qw = loadImage("Qw.png");
  Kw = loadImage("Kw.png");
  Pw = loadImage("Pw.png");      
  tekenbord();
  tekenstukken();      
}

void draw(){

}

void tekenbord(){
  for(int x = 0 ; x < 8 ; x++){
    for(int y = 0 ; y < 8 ; y++){
      if((x+y)%2 == 0){
        fill(blokkleur1);
      }else{
        fill(blokkleur2);
      }
      rect(x*blokgroote, y*blokgroote, blokgroote, blokgroote);
} } } 

void tekenstukken(){
  for(int x = 0 ; x < 8 ; x++){
    for(int y = 0 ; y < 8 ; y++){    
      image(schaakstukken[y][x], x*blokgroote, y*blokgroote, blokgroote, blokgroote);    
} } }

当我禁用tekenstukken()时,我的代码运行正常,并绘制一个空的棋盘。如果我用schaakstukken[y][x]或其中一个名字替换Tb,我会得到一个装满1种棋子的棋盘。

注意:我的代码还没有完成,我稍后会添加一个功能,根据玩家在棋盘上的变化来更改控制棋子的数组。

2 个答案:

答案 0 :(得分:1)

我不确定这是否真的有必要编写国际象棋程序;)但你可以通过使用Java's Reflection API实现这一点:

Class chessClass = ChessClass.class;
Field[] fields= chessClass.getFields();

for (Field f : fields) {
    // ... assign name to array: array[...] = f.getName();
}

有关详情ORACLEs Java Reflection tutorial

答案 1 :(得分:0)

@Arkadiy为我提供了解决问题的方法:

  

不要在数组中存储字符串,存储PImages: PImage[][] schaakstukken。这让你说{Tb,Hb,Rb,Qb,Kb,Rb,Hb,Tb} - 你只需要在加载图像后填充数组。

感谢帮助和支持!

这是我的工作代码:

int breedte = 800;
int hoogte = breedte;
int blokgroote = breedte/8;
int blokkleur1 = #ffffff;
int blokkleur2 = #999999;
PImage Tb;
PImage Hb;
PImage Rb;
PImage Qb;
PImage Kb;
PImage Pb;
PImage Tw;
PImage Hw;
PImage Rw;
PImage Qw;
PImage Kw;
PImage Pw;
PImage E;
PImage[][] schaakstukken;

void setup(){
  size(breedte, hoogte);
  noStroke();
  Tb = loadImage("Tb.png");
  Hb = loadImage("Hb.png");
  Rb = loadImage("Rb.png");
  Qb = loadImage("Qb.png");
  Kb = loadImage("Kb.png");
  Pb = loadImage("Pb.png");
  Tw = loadImage("Tw.png");
  Hw = loadImage("Hw.png");
  Rw = loadImage("Rw.png");
  Qw = loadImage("Qw.png");
  Kw = loadImage("Kw.png");
  Pw = loadImage("Pw.png");
  E  = loadImage("E.png");
  schaakstukken = new PImage[][]{
  {Tb,Hb,Rb,Qb,Kb,Rb,Hb,Tb},
  {Pb,Pb,Pb,Pb,Pb,Pb,Pb,Pb},
  {E ,E ,E ,E ,E ,E ,E ,E },
  {E ,E ,E ,E ,E ,E ,E ,E },
  {E ,E ,E ,E ,E ,E ,E ,E },
  {E ,E ,E ,E ,E ,E ,E ,E },
  {Pw,Pw,Pw,Pw,Pw,Pw,Pw,Pw},
  {Tw,Hw,Rw,Qw,Kw,Rw,Hw,Tw}};            
  tekenbord();
  tekenstukken();      
}

void draw(){
}    

void tekenbord(){
  for(int x = 0 ; x < 8 ; x++){
    for(int y = 0 ; y < 8 ; y++){
      if((x+y)%2 == 0){
        fill(blokkleur1);
      }else{
        fill(blokkleur2);
      }
      rect(x*blokgroote, y*blokgroote, blokgroote, blokgroote);
} } } 

void tekenstukken(){
  PImage schaakstuk;
  for(int x = 0 ; x < 8 ; x++){
    for(int y = 0 ; y < 8 ; y++){    
      image(schaakstukken[y][x], x*blokgroote, y*blokgroote, blokgroote, blokgroote);    
} } }