2015-06-14 44 views
0

我正在试图制作一款纸牌游戏,将从甲板上取2张牌并同时翻转它们以揭示哪张牌只有几秒钟,然后将它们翻转过来,但是即时消息在获得卡片时知道他们有正面和背面。现在我有一张牌和2张牌,但他们都是正确的,我需要甲板面朝下,2张牌也面朝下安装,然后翻转。但是,当我加载后面的图片,它只是使所有的卡片相同的图片。我知道我必须在甲板课上用某种标志设置它,但是不知道如何?如何制作双面图像

public class Deck 
    { 
     private Random random = new Random(); 
     protected Card cards[] = new Card[52] ; 

     private ImageIcon back = new ImageIcon("card bitmaps/back.GIF"); 
     protected boolean flip = false; 
     protected int numcards = 0; 

     public Deck() 
     { 
      int i = 0; 
      for (int s = 1; s<5 ; s++) 
      { 
       for (int n=1; n<14 ; n++) 
       { 
        cards[i] = new Card(n,s); 
        i++; 
        numcards = numcards + 1; 
       } 
      } 

     } 

     public void giveslapZone (Deck d) 
     { 
      numcards = numcards - 1; 
      d.takecardslapZone(cards[numcards]); 
      return; 
     } 

     public void takecardslapZone(Card c) 
     { 
      cards[numcards] = c; 
      numcards = numcards + 1; 

     } 



     public void shuffle() 
     { 

      for (int i = 0; i<numcards; i++) 
      { 
       int j = random.nextInt(numcards); 
       Card temp = cards[i]; 
       cards[i] = cards[j]; 
       cards[j] = temp; 

      } 
     } 



     public void draw (Container c ,Graphics g, int x , int y ) 
     { 
      for (int i = 0; i<numcards; i++) 
      { 
       cards[i].draw(c, g, x,y) ; 
       if (flip==false) 
       back.paintIcon(c,g,x,y); 
      } 

     } 

    } 

回答

0

通过在现实世界中思考。哪一个物体在两边都有图像? Card。所以你的目标对象是Card而不是Deck。 现在,如何设计可以有图像的课Card?只需添加引用到的图像应该保持为:

public class Card { //extends/implements etc 
    private Image frontImage; //Image with number etc. 
    private Image backImage; //Image shown when the card is faced down. 
    //--and so on.. 

现在,在翻转动画,您需要使用图片视达两边哪一边显示给用户绘制的卡。另外,一个简短的说明。鉴于大部分卡片的背面图像都是相同的,请使用静态最终图像来保存全局背景图像并在所有卡片上重新使用它。

+0

那么为什么有一个实际的实例字段首先指向后面的图像? – RealSkeptic

+0

你必须用一张卡封装一张卡片的财产。通过将这些信息放在外部,它的开放性可以从任何地方改变 - 就像这个例子一样,这就是它为两张卡片绘制相同图像的原因。 –

+0

我并不是说它应该在Card类之外,或者它应该是公开的。我说它不应该是*实例*字段。注意:我不是OP。 – RealSkeptic