gpt4 book ai didi

java - 内存游戏随机颜色

转载 作者:行者123 更新时间:2023-12-02 07:50:08 25 4
gpt4 key购买 nike

大家好,我正在创建一个使用 4x4 2Darray 的内存游戏。

我在 4x4 中填充了一对 0-7 的整数,它们是随机分散的。我想为每一对分配一种颜色,因此当鼠标单击该方 block 时,分配的颜色将根据整数出现,您必须根据其相应的匹配颜色找到另一个整数。我的 setColor 方法遇到了一些问题。我将包含我的整个代码,以防我在其他地方搞砸,这就是原因。目前,如果我单击每个方 block 一次,我就会使用分配两次的所有 8 种颜色,但某些颜色与另一个图 block 上相同整数的位置不匹配。另外,当我多次单击同一个图 block 时,它会在 2-3 种颜色之间变化,我不确定我做错了什么。

我需要建议的部分是我分配的 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 static void fillRect(Graphics g, int x, int y, int width, int length)
{
g.setColor(Color.BLACK);
width = 100;
length = 100;
x = (int)xMouse/100;
y = (int)yMouse/100;
}

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)
{

/*int xGuess = (int)xMouse/100;
int yGuess = (int)yMouse/100;
board[xGuess][yGuess] = guess1;
int xGuess2 = (int)xMouse/100;
int yGuess2 = (int)yMouse/100;
board[xGuess2][yGuess2] = guess2;

if (guess1 == guess2)
{
setColor(g);
centerHit(xMouse, yMouse);
g.fillOval(xMouse, yMouse, 40, 40);
}
else
g.fillRect(guess1, guess2, width, length);
g.setColor(Color.BLACK);*/
setColor(g);
centerHit(xMouse, yMouse);
g.fillOval(xMouse, yMouse, 40, 40);
}

public void setColor(Graphics g)
{

centerClick(x1,y1);
//int x = xMouse;
//int y = yMouse;
colorIndex = board[row][column];
board[row][column] = board[x1][y1];
board[x1][y1] = colorIndex;


switch(colorIndex)
{
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;
}
}
public void centerClick(int centerX, int centerY)
{
{
if ((xMouse > 0) && (xMouse <=100))
x1 = 0;
else if ((xMouse > 100) && (xMouse <=200))
x1 = 1;
else if ((xMouse > 200) && (xMouse <=300))
x1 = 2;
else if ((xMouse > 300) && (xMouse <=400))
x1 = 3;
}
{
if ((yMouse > 0) && (yMouse <=100))
y1 = 0;
else if ((yMouse > 100) && (yMouse <=200))
y1 = 1;
else if ((yMouse > 200) && (yMouse <=300))
y1 = 2;
else if ((yMouse > 300) && (yMouse <=400))
y1 = 3;
}
}

}

最佳答案

要防止颜色发生变化,请更改此代码

    colorIndex = board[row][column];
board[row][column] = board[x1][y1];
board[x1][y1] = colorIndex;

    colorIndex = board[x1][y1];

颜色匹配问题是因为您构建了板子两次:首先是在 paint 方法的firstRun 上打印数组,然后在 init 方法上打印数组板被覆盖,因此您会看到不同的值

要解决这个问题,您应该只在 init 方法中构建一次板,然后调用 print2DArray 来检查它,所以

 buildBoard(4);
print2DArray(board); //<-- add this line to verify colors

并且您可以省略 firstRun 标志和所有关联的代码。

评论或删除此代码:

/*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
{*/

关于java - 内存游戏随机颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322944/

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