ftp.nice.ch/pub/next/developer/objc/appkit/DeckofCards.Nbs.tar.gz#/DeckofCards/Include/Deck.h

This is Deck.h in view mode; [Download] [Up]

/*
	Deck.h
	Version 0.0		6/21/90		Ernest N. Prabhakar
	Version 0.1		6/29/90		Ernest N. Prabhakar
	Version 1.0		7/12/90		Ernest N. Prabhakar
	
*/

#define DECK_VERSION 1
#define DECK_UNMARKED NX_NOT_IN_LIST

#import <objc/List.h>

@interface Deck : List
 /* 
  * Deck implements a collections of Cards as a subclass of List.
  * It provides the usual operations used in card games.
  * It adds a marker so one Deck can be used for both draw and discard.
  * Instances can also be used as hands in a game.
  * It was designed originally for use with memory cards.
  * Deck expects cards to receive the following messages
  *	- (STR) findSTR:(STR)aString (returns string or nil)
  *		or can use the compiled regex
  *	- (int) compare:aCard (-,0,+ if self <,=,> aCard)
  * And fo the same reasons, expects "activeFace" and "sortFlag" status
  * variables in the Card factory object.
  * For manipulating in greater detail, use the List class methods.
  */
{
@public	
	unsigned	marker;	//separates drawn from discarded
}
 /*
  * METHOD TYPES
  * Creating and freeing a Deck object
  * Archiving
  * Setting and clearing marker
  * Giving random position in deck before marker.
  * Drawing and discarding
  * Shuffling, Cutting, and Dealing into hands (deck instances)
  * Finding and sorting cards
  */

+ new;
 /*
  * TYPE: Creating; Returns a new Deck object
  *
  * Returns a new Deck.
  */


+ initialize;
 /*
  * TYPE: Creating; Set initial parameters
  *
  * Sets up a new Deck.
  */

- copy;
 /*
  * TYPE: Creating.  Returns a copy of the deck pointing to same cards.
  */

- setMarkerAt:(unsigned)index;
- setMarkerAtEnd;
 /*
  * TYPE: Manipulating marker; Sets at index
  *
  * Defaults to setting marker at end if index > numElements.
  */
  
- (unsigned) marker;
 /*
  * TYPE: Manipulating marker; Returns marker location without changing it
  *
  * Returns marker, or DECK_UNMARKED if none was set.
  */
  
- clearMarker;
 /*
  * TYPE: Manipulating marker; clears
  *
  * Sets marker to DECK_UNMARKED
  */

- giveCard;
- giveCardAt:(unsigned)index;
 /*
  * TYPE: Removes from Deck; Returns the object at \fIindex\fR
  *
  * Defaults to first object
  * Removes and Returns the \fBid\fR of the object located at slot \fIindex\fR.
  * if \fIindex\fR is beyond marker or end of Deck, return nil
  */
  
- takeCard:anObject;
 /*
  * TYPE: Adds to Deck; Places anObject at end.
  *
  */

- (unsigned) dealTo:(List *)handList;
- (unsigned) dealTo:(List *)handList each:(int)numCards;
 /*
  * TYPE: Removes from Deck; Takes a list of hands, and distributes cards
  * evenly among them.
  * The default numCards is numElements of Deck/ numHands of handList.
  * Excess cards are left in the Deck.  The marker is set to the back.
  * The number of cards left is returned.
  */

- emptyTo:(Deck *)hand;
 /*
  * TYPE: Removes from Deck; Gives hand all its contents (up to marker)
  *
  * Empties deck, adding contents to hand. 
  */

- cutAt:(unsigned)index;
 /*
  * TYPE: Permute Deck; Cuts at specified index
  *
  * Makes card at index new top card, and returns its id.
  * Cards above it are rolled back
  * If index is invalid (e.g. < 0), returns nil.
  * Sets marker at End.
  */

/* Target-action methods */

- shuffle:sender;
 /*
  * TYPE: Permute Deck
  *
  * Randomly permutes deck.
  * Sets marker at End.
  */

- sort:sender;
- reverse:sender;
 /*
  * TYPE: Permute Deck;  Sorts cards by some criterions
  *
  * Sort rearranges the deck according to the 'rankRelativeTo' method.
  * Each Card-type implements this differently, but must do something.
  *	'reverse' merely inverts the order of the deck.
  * Sets marker at End.
  */

- flipAll:sender;
 /*
  * TYPE: Permute Cards;  Exchanges Faces
  *
  * Make the top face of all the cards the new bottom face.
  *
  */

- findSTR:(const char *)aString;
- findAllSTR:(const char *)aString;
 /*
  * TYPE: Select cards; cards containing string; Returns their index;
  *
  * Find returns the id of the first card which contains string.
  * FindAll returns a Deck containing all such cards (even if one).
  * Does NOT remove them from the Deck.
  * Both return nil if there is no match.
  */

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.