Это мой первый раз с помощью этого сайта, чтобы не идти тяжело на менякарты перетасовать в GridLayout, когда я нажимаю на кнопку в сетке
Я пытаюсь сделать свою собственную карточную игру и в игре , карты помещаются в 6 x 9 gridlayout. Все остальное, что я могу обработать, но есть одна особенность в игре, в которой у меня возникают проблемы, и если я смогу заставить ее работать, я закончу. Это для моего окончательного проекта, и это должно быть примерно через 5 дней.
Я пытаюсь перетащить карты, когда пользователь нажимает на карту White Joker. Когда этот Белый Джокер щелкнут, карты с открытыми карточками и другие покерные карты, с которыми сталкиваются, тоже перетасовываются. Мне не нужны никакие дубликаты карт в сетке
Чтобы быть более явным, я покажу свою проблему визуально, потому что то, что я пытаюсь сделать, сложно объяснить словами, а также сложно сделать код для него.
Когда пользователь нажимает на одну или несколько лицевых карт, это '; что-то вроде этого:
Когда щелкнул белый джокер, он был перетасован, и я не хочу, чтобы он перетасовался. Я хочу, чтобы все остальное было перетасовано, пока Белый Джокер остается в этом месте.
Вот мой код метода тасования. Ниже я хочу, чтобы этот метод перетасовал JButtons, но не White Joker. Белый Joker один должен остаться
public JButton[] whiteJokerShuffle(JButton[] button)
{
//shuffles using fisher yates shuffle BUT ONLY White Joker does not
//shuffle
//FIX THISSSSSSSSSSSSSSSSSSSSSSS
Random rand = new Random();
int randomCard;
JButton randomValue;
for (int i = 0; i<button.length; i++)
{
randomCard = rand.nextInt(button.length);
//can't find a way to check for White Joker and make it stay
randomValue = button[randomCard];
button[randomCard] = button[i];
button[i] = randomValue;
}
return button;
}
И снова я не хочу видеть повторяющиеся карты покер, когда я перетасовать карты и нажмите на кнопку. я продолжаю делать, что происходит каждый раз, когда я пытаюсь, и я не знаю, как это исправить, так вот мой другой код, который создает рамку и материал:
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
/**
*
* @author elngo
*/
public class GameFrame extends JFrame {
private final int FRAME_WIDTH = 900;
private final int FRAME_HEIGHT = 730;
private int _attempts = 0;
private GridLayout _buttonMatrix;
private ImageIcon _image;
private ImageIcon _faceDownImage;
private JButton[] _button;
private ActionListener _listener;
private JPanel _gridPanel;
private JOptionPane _introduction; //this pops up BEFORE the gamem starts
private JOptionPane _endGameResult; //this ONLY pops up when the game ENDS
//using the Cards class
private Cards _cards;
private String[] _pokerDeck;
private JButton _whiteJoker;
final int GRID_ROWS = 6;
final int GRID_COLUMNS = 9;
//Constructor
/**
*
*/
public GameFrame()
{
frameComponents();
setSize(FRAME_WIDTH, FRAME_HEIGHT);
}
/**
*
*/
private void frameComponents()
{
_cards = new Cards(); //invokes Cards class
String[] faceDown = _cards.getFaceDown();
_pokerDeck = _cards.getPokerDeck();
//makes a matrix of JButtons
_button = new JButton[_pokerDeck.length];
_gridPanel = new JPanel(_buttonMatrix = new GridLayout(GRID_ROWS, GRID_COLUMNS));
_listener = new ClickListener();
//places FACE DOWN cards in the 6x9 grid first
for (int i = 0; i<faceDown.length; i++)
{
_faceDownImage = new ImageIcon(faceDown[i]);
_gridPanel.add(_button[i] = new JButton(_faceDownImage)); //adds to grid
_button[i].addActionListener(_listener);
}
add(_gridPanel);
//shuffle poker cards
//comment this randomizer out UNTIL I find a way to make WhiteJoker work
//_cards.shuffleDeck(_pokerDeck);
}
public class ClickListener implements ActionListener{
@Override
/**
*
*/
public void actionPerformed(ActionEvent event)
{
for (int i=0; i<_button.length; i++)
{
if (event.getSource() == _button[i])
{
_image = new ImageIcon(_pokerDeck[i]);
_button[i].setIcon(_image);
_attempts++;
System.out.println("Attempts: " + _attempts); //delete later
//***THE WHITE JOKER SHUFFLE PROBLEM STARTS HERE***
if (_pokerDeck[i] == "WJ.png") //if White Joker clicked
{
//FIX THISSSSSSSSSSSSSSSsssSSSSSSSSSssssSs
System.out.println("White Joker found"); //delete later
//save off Joker Spot so iterate through _buttonMatrix
String whiteJoker = _pokerDeck[i];
for (int j = 0; j<_button.length; j++)
{
if (_button[j] != null)
{
//***THE SHUFFLE METHOD I SHOWED IS USED BELOW***
_cards.whiteJokerShuffle(_button);
}
}
_gridPanel.removeAll();
for (JButton button : _button)
{
_gridPanel.add(button);
}
_gridPanel.revalidate();
_gridPanel.repaint();
}
//***PROBLEM STOPS HERE***
мне действительно нужна помощь по этому вопросу. Только эта сложная проблема, и как только она будет решена, я буду убирать свой код, и я закончу.
Несколько общих советов: (1) Не используйте символы подчеркивания ('_') в именах переменных Java, если они не являются константами. (2) Не переустанавливайте размер рамки. Мой экран не имеет высоты 730 пикселей. Пусть менеджер компоновки рассчитает размер. – user1803551
"* не может найти способ проверить White Joker и заставить его оставаться *« У вас есть доступ к кнопкам, представляющим карты, почему вы не можете читать с кнопок какие карты они показывают? – user1803551