Beispiel #1
0
 // Metoden createLabels - Skapar de grafiska komponenterna för scorelistan
 public void createLabels() {
   // Om det är fler än en spelare, sortera listan efter score
   if (players.size() > 1) {
     players = sortPlayers(players);
   }
   // Lägg till labels med förbestämd text
   for (int i = 0; i < 3; i++) {
     panel.add(new JLabel(labeltext[i]));
   }
   // Lägg till labels med placering, nick och poäng för spelarna
   for (int i = 3; i < 7; i++) {
     if (players.size() > i - 3) {
       panel.add(new JLabel(labeltext[i]));
       panel.add(new JLabel(players.get(i - 3).nick));
       panel.add(new JLabel(players.get(i - 3).score + ""));
     }
   }
   // Lägger till några tomma labels i panelen för att skapa mellanrum och symetri
   for (int i = 0; i < 4; i++) {
     panel.add(new JLabel(" "));
   }
   // Lägger till avslutaknappen
   panel.add(exit);
   exit.addActionListener(this);
 }
Beispiel #2
0
 // Metoden turnCards - Plockar bort alla kort som är tagna och vänder tillbaka alla kort som inte
 // är tagna
 public void turnCards() {
   for (int i = 0; i < cards.size(); i++) {
     cards.get(i).setIcon(bk);
     cards.get(i).setBorder(new LineBorder(Color.WHITE, 1));
     if (cards.get(i).taken == true) {
       cards.get(i).setVisible(false);
     }
   }
 }
Beispiel #3
0
 public Scorelist(LinkedList<Player> players) {
   super("Scores");
   this.players = players;
   panel = new JPanel(new GridLayout((3 + players.size()), 3));
   createLabels();
   this.add(panel);
   this.setVisible(true);
   this.setSize(300, 30 * (3 + players.size()));
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
Beispiel #4
0
 // Metoden isCards - Kollar om det finns kort kvar, genom att kolla spelarnas sammanlagda poäng
 public boolean isCards() {
   int sum = 0;
   for (int i = 0; i < players.size(); i++) {
     sum += players.get(i).score;
   }
   // Om den sammanlagda summan av poäng spelarna har är mindre än 32, finns det kort kvar
   if (sum < 32) {
     return true;
   } else {
     return false;
   }
 }
Beispiel #5
0
 // Skapar de grafiska komponenterna för menyn
 public void createLabels() {
   // Skapar textfält för nick och intellegens och lägger till dem i en lista
   for (int i = 0; i < 4; i++) {
     textfields.add(new JTextField(20));
     intfields.add(new JTextField(20));
   }
   // Skapar checkboxes för att bestämma om spelaren är ett AI och lägger till den i en lista
   for (int i = 0; i < 4; i++) {
     boxes.add(new JCheckBox());
     boxes.get(i).addActionListener(this);
   }
   // Lägger till labels med förbestämd text i panelen
   for (int i = 0; i < 4; i++) {
     panel.add(new JLabel(labeltext[i]));
   }
   // Lägger till textfields och checkboxes i panelen
   for (int i = 4; i < 8; i++) {
     panel.add(new JLabel(labeltext[i]));
     panel.add(textfields.get(i - 4));
     panel.add(boxes.get(i - 4));
     panel.add(intfields.get(i - 4));
     intfields.get(i - 4).setVisible(false);
   }
   // Lägger till några tomma labels i panelen för att skapa mellanrum och symetri
   for (int i = 0; i < 5; i++) {
     panel.add(new JLabel(" "));
   }
   // Lägger till knapparna och lägger actionlisteners på dem
   panel.add(go);
   go.addActionListener(this);
   panel.add(help);
   help.addActionListener(this);
 }
 /** highlight a route (maybe to show it's in use...) */
 public void highlightRoute(String src, String dst) {
   Iterator i = rows.iterator();
   while (i.hasNext()) {
     Map temp = (Map) i.next();
     if (temp.get("Address").equals(dst) && temp.get("Pivot").equals(src)) {
       temp.put("Active", Boolean.TRUE);
     }
   }
 }
 /** show the meterpreter routes . :) */
 public void setRoutes(Route[] routes) {
   Iterator i = rows.iterator();
   while (i.hasNext()) {
     Map temp = (Map) i.next();
     for (int x = 0; x < routes.length; x++) {
       Route r = routes[x];
       if (r.shouldRoute(temp.get("Address") + "")) temp.put("Pivot", r.getGateway());
     }
   }
 }
Beispiel #8
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;
     }
   }
 }
  public void end() {
    final int[] selected = table.getSelectedRows();

    model.clear(rows.size());
    Iterator i = rows.iterator();
    while (i.hasNext()) {
      model.addEntry((Map) i.next());
    }
    rows.clear();

    if (SwingUtilities.isEventDispatchThread()) {
      SwingUtilities.invokeLater(
          new Runnable() {
            public void run() {
              model.fireListeners();
              fixSelection(selected);
            }
          });
    } else {
      model.fireListeners();
      fixSelection(selected);
    }
  }
  public Object addNode(String id, String label, String description, Image image, String tooltip) {
    if (id == null || label == null) return null;

    HashMap map = new HashMap();
    map.put("Address", id);

    if (description.indexOf(id) > -1) description = description.substring(id.length());
    map.put("Label", label);
    map.put("Description", description);
    map.put("Tooltip", tooltip);
    map.put("Image", image);
    map.put(" ", tooltip);
    map.put("Pivot", "");
    map.put("Active", Boolean.FALSE);
    rows.add(map);
    return map;
  }
Beispiel #11
0
 // Metoden sortPlayers - Sorterar spelarlistan, bubblesort används då det är en liten lista
 public LinkedList<Player> sortPlayers(LinkedList<Player> tosort) {
   boolean isSorted = false;
   Player replace;
   // Kär så länge listan inte är färdigsorterad
   while (isSorted == false) {
     for (int i = 1; i < players.size(); i++) {
       if (tosort.get(i - 1).score < tosort.get(i).score) {
         replace = tosort.get(i);
         tosort.remove(i);
         tosort.add(i - 1, replace);
       }
     }
     // Kollar om listan är sorterad
     for (int i = 1; i < players.size(); i++) {
       if (tosort.get(i - 1).score < tosort.get(i).score) {
         isSorted = false;
         break;
       } else {
         isSorted = true;
       }
     }
   }
   return tosort;
 }
Beispiel #12
0
 // Metoden updateLabels - Uppdaterar labels med vems tur det är samt poängställningen
 public void updateLabels(boolean in) {
   for (int i = 0; i < players.size(); i++) {
     // Om spelaren vars tur det är väljer rätt kort ges en poäng, och spelaren får försöka en gång
     // till
     if (players.get(i).myTurn && in) {
       players.get(i).score++;
       scorelabels.get(i).setText(players.get(i).score + "");
       // Om det finns kort kvar,  starta AIHandlern för att eventuellt AI ska göra sitt drag
       if (isCards()) {
         AIh.interrupt();
       } else {
         this.dispose();
         new Scorelist(players);
       }
       break;
     }
     // Om spelaren vars tur det är väljer fel kort blir det nästa spelares tur
     else if (players.get(i).myTurn && !in) {
       players.get(i).myTurn = false;
       players.get((i + 1) % players.size()).myTurn = true;
       playerlabels.get(i).setForeground(Color.BLACK);
       playerlabels.get((i + 1) % players.size()).setForeground(Color.GREEN);
       // Starta AIHandlern
       AIh.interrupt();
       break;
     }
   }
 }
Beispiel #13
0
 // Metoden makeBoard - Skapar de grafiska komponenterna för spelplanen
 public void makeBoard() {
   int k = 0;
   // Laddar in bilderna för kortens baksida till programmet
   for (int j = 1; j < 33; j++) {
     for (int i = 0; i < 2; i++) {
       bilder.add(new ImageIcon("Memorypics/" + j + ".gif"));
     }
   }
   // Skapar korten med bilder och id, blandar sedan korten
   for (int i = 0; i < 64; i++) {
     cards.add(new Card(bilder.get(i), k));
     if (i % 2 == 1) {
       k++;
     }
     Collections.shuffle(cards);
   }
   // Lägger ut korten på spelplanen
   for (int i = 0; i < 64; i++) {
     panel.add(cards.get(i));
     cards.get(i).addActionListener(this);
     cards.get(i).setBorder(new LineBorder(Color.WHITE, 1));
     cards.get(i).pos = i;
   }
   // Lägger till labels för nick och poängställning
   for (int i = 0; i < players.size(); i++) {
     playerlabels.add(new JLabel(players.get(i).nick + ": "));
     scorelabels.add(new JLabel(players.get(i).score + ""));
     panel.add(playerlabels.get(i));
     panel.add(scorelabels.get(i));
   }
 }
Beispiel #14
0
 // Action - vad som händer om man klickar på de olika knapparna
 public void actionPerformed(ActionEvent e) {
   // Om man trycker på startknappen
   if (e.getSource() == go) {
     for (int i = 0; i < 4; i++) {
       // Skapar spelare och AI, beroende på om textfälten och checkboxarna är ifyllda
       if (textfields.get(i).getText().length() > 0) {
         // Om checkboxen är itryckt, skapa ett AI
         if (boxes.get(i).isSelected()) {
           try {
             if (Integer.parseInt(intfields.get(i).getText()) >= 0) {
               players.add(
                   new AI(
                       textfields.get(i).getText(), Integer.parseInt(intfields.get(i).getText())));
             }
             // Om intellegensen är angivet negativt använder vi ett minne av storleken 0.
             else {
               players.add(new AI(textfields.get(i).getText(), 0));
             }
           }
           // Om intellegensen inte är angiven i siffror, använd standardintellegensen på 20 korts
           // minne
           catch (NumberFormatException ex) {
             players.add(new AI(textfields.get(i).getText(), 20));
           }
         }
         // Om spelaren inte är ett AI, lägg till en vanlig spelare
         else {
           players.add(new Player(textfields.get(i).getText()));
         }
       }
     }
     // Stänger ner menyn och startar spelet, skickar med spelarinfon
     if (players.size() >= 1) {
       this.dispose();
       f.dispose();
       new Memory(players);
     }
   }
   // Om man trycker på hjälpknappen visas en ruta med lite instruktioner
   if (e.getSource() == help) {
     f.setVisible(true);
     f.setBounds(300, 200, 500, 200);
     f.setResizable(false);
     String text =
         "<html>Om inställningar:<br>Skriv in spelarnas namn för att lägga till dem.<br>"
             + "Om AI önskas: Klicka i rutan och ange intellegens. (Antal kort AIn kommer ihåg.)<br>"
             + "Tryck på 'Starta' för att starta spelet.<br><br>"
             + "Hur man spelar:<br>Spelaren vars tur det är får sitt namn markerat med grön färg längst ner.<br>"
             + "För att göra ditt drag, tryck på korten. Du kan inte välja samma kort två gånger<br><br>"
             + "Det är ett vanligt memory, lets go!</html>";
     f.add(new JLabel(text), BorderLayout.NORTH);
   }
   for (int i = 0; i < boxes.size(); i++) {
     // Om checkboxarna är ikryssade lägger den till ett eget namn för AIn som ska skapas och visar
     // rutan för intellegensbestämning
     if (boxes.get(i).isSelected()) {
       textfields.get(i).setText("AI " + (i + 1));
       textfields.get(i).setEnabled(false);
       intfields.get(i).setText("" + 20);
       intfields.get(i).setVisible(true);
     }
     // Om checkboxarna blir urklickade igen, nollställ textfälten, och ta bort rutan för
     // intellegensbestämning
     else if (!boxes.get(i).isSelected()) {
       if (textfields.get(i).getText().indexOf("AI") != -1) {
         textfields.get(i).setText("");
         intfields.get(i).setVisible(false);
       }
       textfields.get(i).setEnabled(true);
     }
   }
 }
Beispiel #15
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;
     }
   }
 }