banansplitt™ Skrevet 19. september 2013 Del Skrevet 19. september 2013 (endret) Har tenkt og tenkt men ikke kommet fram til noen god løsning. Jeg lager et memory-spill. Spillet har f.eks. 4x4 ruter, med like tall gjemt rundt på brettet. Man kan "snu" 2 brikker av gangen, er de like, så skal de forbli "åpnet". Jeg har kommet til at brikkene snus når man trykker på dem, men jeg har ikke funnet noen løsning for hvordan jeg skal snu dem tilbake om de ikke er like. Idéer? (Legger bare ved klassen NumberPanel) private class NumberPanel extends JPanel implements ActionListener { private int cols, rows; private JButton[][] btnNumbers; private int[][] values; private boolean[][] open; public NumberPanel(int rows, int cols) { this.rows = rows; this.cols = cols; setLayout(new GridLayout(rows, cols)); // Lager en arraylist med 2 stk av hvert tall som skal være med i spillet, for deretter å shuffle rekkefølgen på dem ArrayList<Integer> valueList = new ArrayList<Integer>(); for(int i = 1; i <= rows * cols / 2; i++) { valueList.add(i); valueList.add(i); } Collections.shuffle(valueList); // Legger tallene på brikkene values = new int[rows][cols]; int c = 0; for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { values[row][col] = valueList.get(c); c++; } } // Legger brikkene ut på brettet btnNumbers = new JButton[rows][cols]; for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { btnNumbers[row][col] = new JButton(); btnNumbers[row][col].setPreferredSize(new Dimension(100, 100)); btnNumbers[row][col].addActionListener(this); add(btnNumbers[row][col]); } } } public void actionPerformed(ActionEvent e) { // Finnes hvilken brikke som er trykket, og "snur" den for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { if(e.getSource() == btnNumbers[col][row]) { btnNumbers[col][row].setText("" + values[row][col]); btnNumbers[col][row].setEnabled(false); } } } } } Endret 19. september 2013 av banansplitt™ Lenke til kommentar
Gjest Slettet-8xZzkwHK Skrevet 2. oktober 2013 Del Skrevet 2. oktober 2013 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; public class Main { public static void main(String[] args) { final Selection selection = new Selection(); final JFrame frame = new JFrame(); frame.setPreferredSize(new Dimension(400, 400)); frame.setLayout(new GridLayout(2, 2)); frame.add(new MemoryButton(selection, 1)); frame.add(new MemoryButton(selection, 1)); frame.add(new MemoryButton(selection, 2)); frame.add(new MemoryButton(selection, 2)); frame.pack(); frame.setVisible(true); } private static void check(Selection selection, MemoryButton button) { if (selection.wait) { selection.first.setEnabled(true); selection.first.setText(""); selection.first = null; selection.second.setEnabled(true); selection.second.setText(""); selection.second = null; selection.wait = false; } else if (selection.first == null) { selection.first = button; selection.first.setText(String.valueOf(selection.first.value)); selection.first.setEnabled(false); } else { selection.second = button; selection.second.setText(String.valueOf(selection.second.value)); selection.second.setEnabled(false); if (selection.first.value == button.value) { selection.first = null; selection.second = null; } else { selection.wait = true; } } } public static class Selection { public boolean wait = false; public MemoryButton first; public MemoryButton second; } public static class MemoryButton extends JButton { public final int value; public MemoryButton(final Selection selection, int value) { super(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { check(selection, (MemoryButton) e.getSource()); } }); this.value = value; } } } Litt grisete, men den gjør det den skal. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå