【问题标题】:memory game graphics java记忆游戏图形java
【发布时间】:2012-05-05 20:12:59
【问题描述】:

我正在编写一个 4x4 记忆游戏的程序。在这 16 个框中将是一对从 0 到 7 的整数。我已经将所有这些随机化并正确编码。现在我试图弄清楚每次鼠标单击框时如何将颜色与相应的整数配对。

这里大部分的代码。我知道这个游戏的逻辑还没有开始,但我现在更专注于 displayHit 方法和 setColor 方法。只是发布整个代码,因为也许我在其他地方搞砸了。

/*Sets the background of your memory board to black*/
public void init() 
{
    setSize(400,400);
    setBackground(Color.BLACK);
    buildBoard(4);

}   
/*This is main in java applets
    You may need to add (not change) a couple things in this method
 */
public void paint(Graphics canvas)
{
    if(firstRun) //for the first run we need to build our random board
    {

        print2DArray(board);
        buildBoard(4);
        firstRun = false;
    } 
    else // once our board is built we will display the game
    {
        displayGame(canvas);
        if (mouseClicked) // if the mouse has been clicked
        {
            displayHit(canvas);//find which box the user clicked
            mouseClicked = false;
        }
    }
}

/*
    DO NOT change this method
    determines if the mouse has been pressed
    sets x and y Mouse to the location of the mouse arrow
    redraws the image
 */
public boolean mouseDown(Event e, int x, int y ) 
{
    mouseClicked = true; 
    xMouse = x;
    yMouse = y;
    repaint();
    return true;
}

/*DO NOT change this method
    redraws the scene
 */
public void update ( Graphics g ) 
{
    paint(g);

}

/*
    pre: none
    post: build an array that holds the memory values for a board of size x size
    the board will hold two of each int from 0 to size randomly placed in the array
 */


public void buildBoard(int s)

{
    int a = 4;
    for (int row = 0; row < a; row++)
        for (int column = 0; column < a; column++)
        {

            board[row][column] = count++ % 8;
        }
    for(int row = 0; row < 4; row++)

        for(int column = 0; column < 4; column ++) 
        {
            int x = (int)Math.floor(Math.random()*4);
            int y = (int)Math.floor(Math.random()*4);
            temp = board[row][column];
            board[row][column] = board[x][y];
            board[x][y] = temp;


        }
}
public static void print2DArray(int[][] arr)
{
    for (int row = 0; row < arr.length; row++)
    {
        for (int col = 0; col < arr[row].length; col++)
        {
            System.out.print(arr[row][col] + " ");
        }
        System.out.println();
    }
}





public void displayGame(Graphics canvas)
{
    canvas.setColor(Color.WHITE);

    for(int i =0; i < 400; i+= WIDTH)
        for(int j = 0; j < 400; j+= WIDTH)
            canvas.drawRect(i, j, WIDTH, WIDTH);
}

/*
    Pre: xMouse and yMouse have been initialized
    Post: A circle is displayed in the correct box on the screen
    Currently the circle is displayed at the mouse location
 */
public void displayHit(Graphics g)
{
    buildBoard(temp);
    setColor(g);
    centerHit(xMouse, xMouse);
    g.fillOval(xMouse, yMouse, 40, 40);
}

public void setColor(Graphics g)
{

    switch(temp)
    {
    case 0: g.setColor(Color.RED);
    break;
    case 1: g.setColor(Color.GREEN);
    break;
    case 2: g.setColor(Color.BLUE);
    break;
    case 3: g.setColor(Color.ORANGE);
    break;
    case 4: g.setColor(Color.CYAN);
    break;
    case 5: g.setColor(Color.MAGENTA);
    break;
    case 6: g.setColor(Color.PINK);
    break;
    case 7: g.setColor(Color.YELLOW);
    break;
    }

}
public void centerHit(int centerX, int centerY)
{
    {
        if ((xMouse > 0) && (xMouse <=100))
            xMouse = 33;
        else if ((xMouse > 100) && (xMouse <=200))
            xMouse = 133;
        else if ((xMouse > 200) && (xMouse <=300))
            xMouse = 233;
        else if ((xMouse > 300) && (xMouse <=400))
            xMouse = 333;
    }
    {
        if ((yMouse > 0) && (yMouse <=100))
            yMouse = 33;
        else if ((yMouse > 100) && (yMouse <=200))
            yMouse = 133;
        else if ((yMouse > 200) && (yMouse <=300))
            yMouse = 233;
        else if ((yMouse > 300) && (yMouse <=400))
            yMouse = 333;
    }



}

}

【问题讨论】:

  • 为什么你有两块代码做同样的事情?为什么不直接在temp 上直接switch,打电话给g.setcolor,甚至不用理会color
  • 不确定哈哈我会解决的。我正在查看我之前的实验室,其中包含一个略有不同的 switch 语句。
  • 修复了这个问题并调用了将 0-7 分配给 2Darray 的 buildBoard 方法,但现在它似乎只是在选择随机颜色

标签: java memory graphics colors


【解决方案1】:

从你的代码来看,你在那里做了什么,

但我想你应该尝试以下方法:

1)确保您有一个组件,我们称之为 cmp。

2)确保每次单击该框时都会调用 cmp.repaint()

3)确保从 cmp 的 paintComponent(Graphics g) 中调用 displayHit(g) 函数

应该这样做

另外,温度在哪里被操纵?

这应该会有所帮助:

public class ColorChanger extends JFrame implements MouseListener {
    private Color c =  Color.black;
    private JPanel p = new JPanel () {
        public void paintComponent(Graphics g) {
            g.setColor(c );
            g.drawRect(100, 100, 100, 100);
        }

    };

    public  ColorChanger() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(1024, 700));
        addMouseListener(this);
        this.getContentPane().add(p);
        pack();
        setVisible(true);
    }


    public static void main (String arg[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ColorChanger();
            }
        });
    }
    @Override
    public void mouseClicked(MouseEvent arg0) {
        randomizeColor();
        p.repaint();

    }
    private void randomizeColor() {
        switch ((int)(3*Math.random())) {
        case 0:c=Color.red;return;
        case 1:c=Color.blue;return;
        case 2:c=Color.green;return;
        }
    }
    @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 arg0) {
        // TODO Auto-generated method stub

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

    }

}

【讨论】:

  • 我将 temp 初始化为顶部的私有静态 int
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
相关资源
最近更新 更多