Gå til innhold

Løsning på spill - "Memory"


Anbefalte innlegg

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 av banansplitt™
Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse
Gjest Slettet-8xZzkwHK
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...