Ejemplo n.º 1
0
 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;
     }
   }
 }
Ejemplo n.º 2
0
 // 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;
     }
   }
 }