Coverage Summary for Class: CharacterDeckGenerator (it.polimi.ingsw.Model)
Class |
Method, %
|
Line, %
|
CharacterDeckGenerator |
50%
(1/2)
|
80%
(4/5)
|
CharacterDeckGenerator$CharacterCardGenerator |
Total |
50%
(1/2)
|
80%
(4/5)
|
1 package it.polimi.ingsw.Model;
2
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Random;
7
8 /**
9 * Any {@link it.polimi.ingsw.Model.Enums.GameMode#ADVANCED} game must start with a selection of 3 different {@link CharacterCard}s
10 * and this class is the generator of such cards. <br>
11 */
12 public class CharacterDeckGenerator {
13 /**
14 * Generate a random list of 3 Character cards (ensured to be non repeating in the list)
15 *
16 * @param context each generated {@link CharacterCard} needs a reference to the {@link Model} in order to work.
17 * @return a list of 3 randomly generated cards, in no specific order.
18 */
19 public static List<CharacterCard> generateCardSet(Model context) {
20 List<CharacterCardGenerator> deck = Arrays.asList(
21 Card01::new,
22 Card02::new,
23 Card03::new,
24 Card04::new,
25 Card05::new,
26 Card06::new,
27 Card07::new,
28 Card08::new,
29 Card09::new,
30 Card10::new,
31 Card11::new,
32 Card12::new);
33 Collections.shuffle(deck, new Random(System.currentTimeMillis()));
34 return deck.subList(0, 3).stream()
35 .map(gen -> gen.build(context)).toList();
36 }
37
38 /**
39 * in order to construct each card, the constructor must fall under an interface to be used in a lambda call.
40 * This interface is just for that.
41 */
42 private interface CharacterCardGenerator {
43 /**
44 * the constructor of a {@link CharacterCard} has the same signature as this method
45 *
46 * @param ctx the reference to {@link Model}
47 * @return a {@link CharacterCard}
48 */
49 CharacterCard build(Model ctx);
50 }
51 }