public Memory(LinkedList<Player> players) { super("Memory -"); this.players = players; makeBoard(); this.add(panel); this.setVisible(true); this.setSize(640, 720); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ger den första spelaren turen players.get(0).myTurn = true; playerlabels.get(0).setForeground(Color.GREEN); // Startar endast tråden för AI-hantering om det finns något AI med i spelet for (int i = 0; i < players.size(); i++) { if (players.get(i).getClass() == ai.getClass()) { AIh.start(); break; } } }
// Actionevent - vad som händer om man klickar på ett kort public void actionPerformed(ActionEvent e) { for (int i = 0; i < cards.size(); i++) { if (e.getSource() == cards.get(i)) { // Lägger till de vända korten i minnet for (int k = 0; k < players.size(); k++) { // Lägger endast till kort om spelaren är ett AI if (players.get(k).getClass() == ai.getClass()) { // Kort ska inte läggas till minnet om det redan finns i minnet if (players.get(k).cardmemory.indexOf((Card) e.getSource()) == -1) { players.get(k).cardmemory.add((Card) e.getSource()); } // Om det finns fler kort i minnet än minnets storlek, ta bort det första while (players.get(k).cardmemory.size() > players.get(k).mem) { players.get(k).cardmemory.removeFirst(); } } } // Om det är det första kortet spelaren väljer, vänd kortet if (cardsturned == 0) { cards.get(i).setIcon(cards.get(i).back); cards.get(i).setBorder(new LineBorder(Color.RED, 3)); saveid = cards.get(i).id; savepos = i; cardsturned = 1; } // Om det är det andra kortet spelaren väljer, och det är likadant som det första else if (saveid == cards.get(i).id && savepos != i && cardsturned == 1) { cards.get(i).setIcon(cards.get(i).back); cards.get(i).setBorder(new LineBorder(Color.GREEN, 3)); cards.get(savepos).setBorder(new LineBorder(Color.GREEN, 3)); cardsturned = 3; cards.get(i).taken = true; cards.get(savepos).taken = true; // Startar timer för att vända tillbaka eller ta bort kort, samt uppdatera labels timer.start(); // Om en spelare har gissat rätt tar AIn bort korten från minnet, genom att ta bort alla // tagna kort ur minnet for (int k = 0; k < cards.size(); k++) { if (cards.get(k).taken == true) { for (int j = 0; j < players.size(); j++) { players.get(j).cardmemory.remove(cards.get(k)); } } } } // Om det är det andra kortet spelaren väljer, och det inte är likadant som det första else if (saveid != cards.get(i).id && savepos != i && cardsturned == 1) { cards.get(i).setBorder(new LineBorder(Color.RED, 3)); cards.get(i).setIcon(cards.get(i).back); cardsturned = 2; // Startar timer för att vända tillbaka eller ta bort kort, samt uppdatera labels timer.start(); } // Om spelaren väljer samma kort igen händer ingenting (Ursprungligen en utskrift i // konsollen här) // Jag har helt enkelt valt att spelet inte ens ska reagera om man väljer samma kort igen // (Signalerar dock att det inte går att välja) else if (savepos == i) { } } // När två kort är valda som inte är likadana startas en timer som bestämmer när korten ska // vändas tillbaka if (e.getSource() == timer) { timer.stop(); // Om spelaren gissat fel vänds korten tillbaka, labels uppdateras med indatan true if (cardsturned == 2) { updateLabels(false); } // Om spelaren gissat rätt tas korten bort, labels uppdateras med indatan true else if (cardsturned == 3) { updateLabels(true); } turnCards(); cardsturned = 0; } } }