【问题标题】:trouble with logic in javajava中的逻辑问题
【发布时间】:2011-04-20 16:34:05
【问题描述】:

我试图让这个程序显示两张图片并检查它们是否是同一张图片,我无法让 bildeSjekk() 执行此操作,它会显示所有图片,如果你双击一张图片,它会删除它,首先我需要存储int i的前一个实例,然后当teller应该变成两个时,当两张图片已经显示时,然后我将在int数组索引中使用当前的int i和int temp并检查值是否相同.这是一个图片记忆游戏。

package prosjekt_1139;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import java.net.URL;


import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Hukommelse extends JPanel implements MouseListener, ActionListener{

//private JLabel[] kort = new JLabel[16];
private JButton nyOmgang = new JButton("Del ut kortene");
private JButton tilbake = new JButton("Tilbake");
private HovedVinduet vindu;
private int[] index = new int[16];
private int teller =0, temp = 0;
private Image img;
private Image[] imgarray;
private Rectangle[] bokser;
private Point point1;
private URL path1, path2[]= new URL[8];
private boolean sjekk[] = new boolean[16];

public Hukommelse(HovedVinduet vindu) throws IOException{
    this.vindu = vindu;

    bokser = new Rectangle[16];
    imgarray = new Image[8];
    point1 = new Point();

    img = null; 
    setBackground(Color.GREEN);
    setPreferredSize(new Dimension(720,690));
    setLocation(0,0);
    nyOmgang.addActionListener(this);
    tilbake.addActionListener(this);
    add(nyOmgang);
    add(tilbake);
    this.addMouseListener(this);
    boks();
}

//  this is my randomisere metode
public void  kortIndex(){
    int temp;

    for (int i = 0;i<index.length;i++){
        index[i] = i/2;
        //System.out.println(index[i]);
    }

    for (int i=0;i<1000;i++){
        int index1 = (int)(Math.random()*16);
        int index2 = (int)(Math.random()*16);
        temp = index[index1];
        index[index1] = index[index2];
        index[index2] = temp;
    }
    //      for (int i = 0; i<index.length;i++)
    //          System.out.print(index[i]+"\t");
    //      System.out.println();
}

public void paintComponent(Graphics g){
    super.paintComponents(g);
    g.setColor(Color.green);

    int j = 0;
    int k = 0;
    for (int i = 0; i<16;i++){
        g.drawImage(img, 20+(k*175), 50+(j*160), 150, 150, this);
        k++;
        if(i == 3 || i == 7 || i == 11 || i == 15){
            j++;
            k = 0;
        }
    }

    for (int i=0; i<bokser.length; i++) {
        if(sjekk[i]){
            g.drawImage(imgarray[index[i]], bokser[i].x, bokser[i].y, bokser[i].width, bokser[i].height, this);
        }
    }
}

//Metode For checking if the image is clicked on
public void bildeSjekk(){

    for (int i = 0;i<bokser.length;i++){
        if(bokser[i].contains(point1)){
            sjekk[i] = true;
            teller++;
            temp = i;
        }
        if(teller >= 2 ){
            sjekk[i] = false;
            sjekk[temp] = false;
            teller = 0;
        }
    }
}

public void boks(){
    int j = 0;
    int k = 0;
    for(int i = 0; i <bokser.length; i++){
        bokser[i] = new Rectangle(20+(j*175), 50+(k*160), 150, 150);
        j++;
        if(i == 3 || i == 7 || i == 11 || i == 15){
            j =0;
            k++;
        }
    }
}

public void bilder() throws IOException{
    img = ImageIO.read(new File("Image/grass.jpg"));

    //repaint();

    imgarray[0] = ImageIO.read(new File("Image/bekk.jpg")); 
    imgarray[1] = ImageIO.read(new File("Image/solnedgang.jpg"));
    imgarray[2] = ImageIO.read(new File("Image/tåge.jpg"));
    imgarray[3] = ImageIO.read(new File("Image/vile.jpg"));
    imgarray[4] = ImageIO.read(new File("Image/fuglekasse.jpg"));
    imgarray[5] = ImageIO.read(new File("Image/gullfugl.jpg"));
    imgarray[6] = ImageIO.read(new File("Image/byen.jpg"));
    imgarray[7] = ImageIO.read(new File("Image/bekk.jpg"));
}


@Override
public void mouseClicked(MouseEvent agr0) {
    // TODO Auto-generated method stub
}

@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub
    System.out.println(e.getX()+"\t"+e.getY());
    point1 = e.getPoint();

    bildeSjekk();
    repaint();
}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Del ut kortene")){  
        try {
            bilder();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        point1 = new Point(0,0);
        for (int i = 0;i<bokser.length;i++){
            sjekk[i] = false;
        }
        teller = 0;
        kortIndex();
        repaint();
    }
    if(e.getSource() == tilbake){
        vindu.setMenyPanelAktivt();
        vindu.setSize(800, 600);
        vindu.setLocation(0,0);
    }
}
}

【问题讨论】:

  • 巨大的代码转储没有那么有用。尝试隔离您的问题,然后仅发布片段
  • 任何你都可以在细节上添加更多的话,你期望你的代码正在做什么。
  • 另外,由于这是一个英文网站,我们甚至不能依靠变量/方法名称来理解发生了什么。评论在这里会很有帮助。
  • 任何特定的变量/方法,因为如果说英语的人大声说出来,大多数情况下听起来也与英语中的同一个词相似。

标签: java swing user-interface


【解决方案1】:

您可能会喜欢这个使用JToggleBUttonUnicode 字形而不是图片的相关memory game

附录:顺便说一句,如果您准备一个不依赖于大量无法访问的图像的sscce,您可能会得到更多有用的答案。例如,RotatableImage 是一个简单的静态类,可以根据需要进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多