gpt4 book ai didi

Java内存游戏卡牌翻转不起作用

转载 作者:行者123 更新时间:2023-12-01 09:13:15 27 4
gpt4 key购买 nike

我正在开发一个java内存游戏,但是我有一个问题,我无法解决。如果我点击任何一张卡,它就会出现,然后我点击第二张卡,但它不会出现。如果检查后它们匹配,则第二张卡会翻转。

卡片类

public class Card{

private int img_x, img_y;
private Img img;
private boolean flipped = false;
private boolean flippable = true;

private static Img back_img;
private static int WIDTH, HEIGHT;

public Card(int img_x, int img_y, img img) {
this.img_x = img_x;
this.img_y = img_y;
this.img = img;
}

public void draw(Graphics g) {
if (flipped) {
g.drawImage(img.getimg(), img_x, img_y, WIDTH, HEIGHT, null);
} else {
g.drawImage(back_img.getimg(), img_x, img_y, WIDTH, HEIGHT, null);
}
}

public void flip() {
if (flippable) {
this.flipped = !flipped;
}
}

ClickEvent

 public void clickEvent(int x, int y) {
for (Card card : cards) {
if ((card.getImg_x() < x) && (card.getImg_x() + card.getWIDTH() > x)
&& (card.getImg_y() < y) && (card.getImg_y() + card.getHEIGHT() > y)) {
if (card.isFlippable()) {
card.flip();
selectedCards.add(card);
}
break;
}
}
gamePanel.reapint();
if (selectedCards.size() == 2) { // if 2 card flipped up
checkFlippedCards(); //check the 2 cards' images name, if matched it lock the cards to not flippable
}
gamePanel.reapint();
}

我花了两天时间解决这个问题,但我不知道为什么它不起作用。当我单击任何卡但只有一张卡按预期翻转时,会运行相同的方法。

检查翻转卡片

private void checkFlippedCards() {

int name1 = selectedCards.get(0).getImgName();
int name2 = selectedCards.get(1).getImgName();
if (name1 == name2) {
score++;
selectedCards.get(0).setFlippable(false);
selectedCards.get(1).setFlippable(false);
}

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Vezerlo.class.getName()).log(Level.SEVERE, null, ex);
}

selectedCards.get(0).flip();
selectedCards.get(1).flip();

kivalasztottKartyak.clear();
}

最佳答案

如果我正确理解您的代码,您将翻转第二张卡,然后检查两张卡是否相等,如果相等,则它们保持翻转状态。

问题在于它们不存在,因为在重新绘制面板之前它们会再次翻转回来。

事实上,您有一个 Thread.sleep 并不意味着它会刷新,因为重新绘制也是在 hibernate 的同一个线程中完成的。

我的建议是将卡片的检查翻转到另一个线程上,这样您就可以刷新主线程,而不会干扰重新绘制。

另一种解决方案是当卡片不相等时不自动翻转卡片。因此,比如说,它们应该在下一次点击时翻转回来。这可以通过移动来完成

selectedCards.get(0).flip();
selectedCards.get(1).flip();

kivalasztottKartyak.clear();

clickEvent并检查是否selectedCards.size() == 2。在这种情况下,您只需翻转两张卡片,而不会在这次点击中执行任何其他操作并摆脱 sleep

关于Java内存游戏卡牌翻转不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40784595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com