예제 #1
0
파일: Memory.java 프로젝트: mattec92/KTH
 // 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;
     }
   }
 }