ftp.nice.ch/pub/next/games/network/Splat.1.0.s.tar.gz#/Splat-1.0/Board.h

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

/*
 * Board
 * description: the object that stores the state of a Splat Board
 * history:
 *	2/15/93 [Erik Kay] - created
 *	< I wasn't keeping track of my changes here >
 *	6/8/93 [Erik Kay] - added bycopy support
 */

#import <appkit/appkit.h>
#import <remote/transport.h>

#define BOARD_EXTENSION "sboard" // the extension for a splat board file

// a couple of useful macros
#define IS_MOVE(mv) ((abs(mv.from.col - mv.to.col) < 2) && (abs(mv.from.row - mv.to.row) < 2)) ? YES : NO
#define IS_JUMP(mv) ((abs(mv.from.col - mv.to.col) == 2) || (abs(mv.from.row - mv.to.row) == 2)) ? YES : NO

// structures defining moves and sequences of moves
typedef struct _location {
    int col;
    int row;
} location;

typedef struct _move {
    location from;
    location to;
} move;

typedef struct _move_list {
    move mv;
    struct _move_list *prev;
    struct _move_list *next;
} move_list;

// the board is stored as an array of square_states
// it can either be empty, blocked, have a player 1 piece, a player 2 piece
// or have an error.
typedef enum _square_state 
{ SQUARE_ERROR, SQUARE_EMPTY, SQUARE_BLOCKED, SQUARE_ONE, SQUARE_TWO } square_state;

@interface Board:Object <NXTransport>
{
    // Everything is made public for optimization reasons.
    // I don't like breaking these abstraction barriers, but you have to do
    // what you have to do.
@public
    square_state *board;
    int maxRow, maxCol;
    move currentMove;
    int numone, numtwo;
    int score;
    char *filename;
}

// how to load from a .board file
+ newFromFile:(const char *)filename;
- reloadFromFile;
- setFilename:(const char *)filename;
- (const char *)filename;

- initCols:(int)c Rows:(int)r;

// addressing individual locations
- (square_state)pieceAt:(int)col :(int)row;
- (square_state)pieceAt:(location *)loc;
- setPiece:(square_state)value at:(int)col :(int)row;
- setPiece:(square_state)value at:(location *)loc;

// query other info about the board
- (int)rows;
- (int)cols;
- (int)numberOfPiece:(square_state)type;
- (location *)pieces:(square_state)type;
// score is a weight used by the computer player
- (int)score;
- setScore:(int)s;

// board utilities
- trueCopy;
- clearBoard;
- fillEmptyWith:(square_state)type;

// keeping track of the last move on the board
- setCurrentMove:(move *)mv;
- (move *)currentMove;

// Transport protocol
- encodeRemotelyFor:(NXConnection *)connection freeAfterEncoding:(BOOL *)flagp 		isBycopy:(BOOL)isBycopy;
- encodeUsing:(id <NXEncoding>)portal;
- decodeUsing:(id <NXDecoding>)portal;

@end

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