August 2007
Intermediate to advanced
864 pages
25h 52m
English
Let's imagine that we want to implement a variant of tic-tac-toe
that's more fun to play (an important feature in most games). For
example, one variant of tic-tac-toe only allows players to have three of
their pieces on at any one time, dropping the first move off when the
fourth move is played, dropping the second move when the fifth is
played, and so on. To implement this variant, we need to keep track of
the sequence of moves, with each move represented by a PlayerMove object, as shown in Example 8-19.
Example 8-19. A custom type suitable for tracking tic-tac-toe moves
public class PlayerMove : INotifyPropertyChanged { string playerName; public string PlayerName { get { return playerName; } set { if( string.Compare(playerName, value) == 0 ) { return; } playerName = value; Notify("PlayerName"); } } int moveNumber; public int MoveNumber { get { return moveNumber; } set { if( moveNumber == value ) { return; } moveNumber = value; Notify("MoveNumber"); } } bool isPartOfWin = false; public bool IsPartOfWin { get { return isPartOfWin; } set { if( isPartOfWin == value ) { return; } isPartOfWin = value; Notify("IsPartOfWin"); } } public PlayerMove(string playerName, int moveNumber) { this.playerName = playerName; this.moveNumber = moveNumber; } // INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; void Notify(string propName) { if( PropertyChanged != null ) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } ...