0

当我点击它们时,我试图翻转单个卡片。在我点击所有卡片同时翻转的那一刻。

这是我的代码。任何帮助将不胜感激,并提前非常感谢您。

package cards;

import processing.core.PApplet;

public class MemoryGame extends PApplet {

static final int COLS=2;
static final int RAWS=3;
Card[] cards;

public void setup() {
    size(RAWS*Card.WIDTH, COLS*Card.HEIGHT); // card witdth 60*9+(10*9) for the gaps=630
    cards = new Card[COLS*RAWS];
    cards[0] = new Card(11, 0, 0);
    cards[1] = new Card(3, Card.WIDTH, 0);
    cards[2] = new Card(7, 2 * Card.WIDTH, 0);
    cards[3] = new Card(3, 0, Card.HEIGHT);
    cards[4] = new Card(7, Card.WIDTH, Card.HEIGHT);
    cards[5] = new Card(11, 2 * Card.WIDTH, Card.HEIGHT);

}

public void draw() {
    background(204);
    for (int i = 0; i < 6; i++) {
        cards[i].display(this);
    }
}

public void mousePressed() {
    for (int i = 0; i < 6; i++) {
        cards[i].flip();
    }
}

public static void main(String[] args) {
    PApplet.main("cards.MemoryGame");
}
}

++++++++++++++++++++++卡类++++++++++++++++++++++++++++++++++++++++++++++++++++++++

package cards;

import processing.core.PApplet;

public class Card {

boolean shown=false;
static final int WIDTH = 120;
static final int HEIGHT = 180;
static final int gap = 20;
int value;
float x,y;   

Card(int _v, float _x, float _y) {

    value = _v;
    x = _x;
    y = _y;
}

public void display(PApplet applet) {
   applet.stroke(0);
    applet.strokeWeight(2);
    if (shown) {
        applet.fill(100);
        applet.rect(x, y, WIDTH, HEIGHT,WIDTH/5);
       applet.textAlign(applet.CENTER,applet.CENTER);
       applet.textSize(WIDTH/2);
       applet.fill(0);
       applet.text(value,x+WIDTH/2,y+HEIGHT/2);
    } else {
        applet.fill(255);
        applet.rect(x, y, WIDTH, HEIGHT,WIDTH/5);
    }
}



public void flip() {
    shown=!shown;
}
}
4

4 回答 4

1

按下鼠标按钮时,您正在翻转所有卡片。您必须检查鼠标位置是否与卡片相交并按下鼠标,如果是,则翻转该卡片。制作方法 mouseX() 和 mouseY() 为您提供鼠标坐标。只需添加 if(鼠标位置与卡片相交):

    public void mousePressed() {
    for (int i = 0; i < 6; i++) {
        if(mouseX() >= cards[i].x && mouseX() <= cards[i].x+cards[i].width && mouseY() >= cards[i].y && mouseY() <= cards[i].y+card[i].height) {
            cards[i].flip();
        }
    }
}
于 2013-11-04T10:19:38.627 回答
1

您需要在 mousePressed() 方法中获取鼠标事件,这样您就可以确定单击了哪张卡片,以便翻转它。尝试在 MemoryGame 类中实现 java.awt.MouseListener 接口。

于 2013-11-04T10:22:03.267 回答
1

那是因为当你按下一张牌时,你会遍历每张牌。

public void mousePressed() {
    for (int i = 0; i < 6; i++) {
        cards[i].flip();
    }
}

尝试定义您单击的卡片并仅对该卡片使用翻转方法。

于 2013-11-04T10:02:03.660 回答
1

你循环遍历你mousePressed方法中的所有卡片并翻转它们。你期望会发生什么?

我想您想检查用户单击的位置,然后翻转该位置的卡片。

于 2013-11-04T10:02:33.097 回答