// Example code for CS 361.  Copyright 2013 by Tom Hayes.
// Important note: This file contains working code for implementing
// retrograde analysis for general games.  It is provided for informational
// purposes only.  You may play around with it and study it to help 
// yourself learn what needs to be done.  However, you may not copy
// any part of the source code to turn in for assignment 5.

import java.util.*;

public abstract class GamePosition<T extends GamePosition<T>> {

    GamePlayer whoseMove, winner;

    public GamePlayer whoseMove( ) {
	return whoseMove;
    }

    public abstract Set<T> successorPositions( );

    public abstract boolean gameOver( );
    
    public GamePlayer winner( ) {
	return winner;
    }

    void setWinner( GamePlayer winner ) {
	this.winner = winner;
    }

}