Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Her er fullstendig kode for klasser Memory-klassen:

Code Block
languagejava
collapsetrue
public class Memory<T> {
    private List<T> possibleItems;
    private List<T> expectedItems;
    private int acceptedCount;
    
    public Memory(Collection<T> possibleItems) {
        this.possibleItems = new ArrayList<>(possibleItems);
        expectedItems = new ArrayList<T>();
        acceptedCount = 0;
    }
    public Memory(T... possibleItems) {
        this(Arrays.asList(possibleItems));
    }
    
    public T nextItem() {
        int index = (int) (Math.random() * possibleItems.size());    // generate random index
        T nextItem = possibleItems.get(index);                        // look up value
        expectedItems.add(nextItem);    // add to sequence
        acceptedCount = 0;                // reset accepted counter
        return nextItem;                // return new item
    }
    public Collection<T> nextItems(int count) {
        Collection<T> items = new ArrayList<T>();
        while (count > 0) {
            items.add(nextItem());
        }
        return items;
    }
    
    public int getItemCount() {
        return expectedItems.size();
    }
    
    public int getItemsLeft() {
        return expectedItems.size() - acceptedCount;
    }
    public Boolean acceptItem(T item) {
        // is acceptItem called after sequence is completed
        if (acceptedCount >= expectedItems.size()) {
            return false;
        }
        // is the number input by the user correct
        if (! expectedItems.get(acceptedCount).equals(item)) {
            // if they are not the same, we indicate this by returning false object
            return Boolean.FALSE;
        }
        acceptedCount++;    // correct number, so increment counter
        // is this the last number
        if (acceptedCount == expectedItems.size()) {
            // return true object
            return Boolean.TRUE;
        }
        // otherwise return null, indicating correct value, but not finished
        return null;
    }
}

...

  • nextItems(int)-metoden gir muligheten til å utvide sekvensen med flere elementer om gangen
  • konstruktøren Memory(T...) bruker såkalte varargs og gjør det enklere å lage et Memory-objekt med et spesifikt sett mulige verdier

I versjon 3 brukes denne Memory-klassen i et hukommelsesspill med grafisk grensesnitt basert på JavaFX.