This is SokoBoard.h in view mode; [Download] [Up]
#ifndef __SokoSave_SokoBoard_h
#define __SokoSave_SokoBoard_h
//-----------------------------------------------------------------------------
// SokoBoard.h
//
// Object representing a single puzzle instance.
//
// Copyright (c), 1997, Paul McCarthy. All rights reserved.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: SokoBoard.h,v 1.2 97/12/10 07:04:58 sunshine Exp $
// $Log: SokoBoard.h,v $
// Revision 1.2 97/12/10 07:04:58 sunshine
// v10.1: Ported to OPENSTEP 4.1 for Mach, OPENSTEP 4.2 for Mach & Windows,
// and Rhapsody Developer Release (RDR) for Mach and Windows (Yellow Box).
// Fixed bug: +nextMaze: was neglecting to send -makeKeyWindow to maze.
// Fixed bug: When opening a saved game with a deferred window, the NSSlider
// did not get drawn. Was incorrectly & unnecessarily sending it a -sizeToFit
// message. For some reason, on deferred windows, this has the side-effect of
// setting the slider's frame size to (0,0).
// Fixed bug: New & Open panels failed to restrict allowed types to .sokomaze
// and .sokosave, respectively. Problem was they were using the inherited
// -setRequiredFileType: method which seems to be ineffectual in NSOpenPanel.
// Now explicitly uses -runModalForDirectory:file:types:.
// Fixed bug: Opening a saved game with no history resulted in a "corrupt
// moves/pushes" error message. Problem was that an earlier fscanf() format
// string was eating the blank line which represented the empty history.
// Fixed bug: Opening a saved game with no history resulted in malloc(0).
// Fixed bug: Opening a saved game would report "corrupt recorded values"
// error in this case: 1) solve and save game, 2) undo two or more moves,
// 3) make a move which is not in the history, meaning no auto-redo, 4) save
// game, 5) close game, 6) re-open game. The problem was that at step 3, the
// history was truncated. Yet the load method was asserting that the
// "recorded" moves/pushes had to be less than the history-length; which,
// after truncation, is an invalid assertion.
// Respects new "auto-save when solved" preference flag.
//
// Revision 1.1 97/11/13 02:56:36 zarnuk
// v9
//-----------------------------------------------------------------------------
extern "Objective-C" {
#import <Foundation/NSObject.h>
@class SokoMatrix, NSBox, NSButton, NSSlider, NSTextField, NSWindow;
}
#define ROWMAX 20
#define COLMAX 40
typedef char BoardArray[ROWMAX][COLMAX+1];
@interface SokoBoard : NSObject
{
NSButton* animateSwitch;
SokoMatrix* cellMatrix;
NSBox* controlBox;
NSButton* moveDownBtn;
NSButton* moveDownLeftBtn;
NSButton* moveDownRightBtn;
NSButton* moveLeftBtn;
NSButton* moveRightBtn;
NSButton* moveUpBtn;
NSButton* moveUpLeftBtn;
NSButton* moveUpRightBtn;
NSTextField* numMovesFld;
NSTextField* numPushesFld;
NSSlider* playbackSlider;
NSButton* redoBtn;
NSTextField* solvedLabel;
NSButton* undoBtn;
NSWindow* window;
NSString* saveFileName;
NSString* mazeFileName;
int NUMROWS;
int NUMCOLS;
int playerRow;
int playerCol;
BoardArray board;
int history_max;
int history_len;
int history_pos;
char* history;
int numMoves;
int numPushes;
int recordedMoves;
int recordedPushes;
BOOL animating;
}
+ (BOOL)nextMaze:(BOOL)required;
+ (SokoBoard*)newMaze:(NSString*)maze;
+ (SokoBoard*)oldMaze:(NSString*)saveName;
+ (BOOL)openFile:(NSString*)filename;
+ (void)new:(id)sender;
+ (void)open:(id)sender;
+ (void)saveAll:(id)sender;
+ (unsigned int)openMazes;
- (void)inspectPlaybackSlider:(id)sender;
- (void)moveDownPressed:(id)sender;
- (void)moveLeftPressed:(id)sender;
- (void)moveRightPressed:(id)sender;
- (void)moveUpPressed:(id)sender;
- (void)redoPressed:(id)sender;
- (void)undoPressed:(id)sender;
- (void)undoMove;
- (void)redoMove;
- (void)save:(id)sender;
- (void)saveAs:(id)sender;
- (void)makeKeyWindow;
- (void)orderFront:(id)sender;
- (NSString*)saveFileName;
@end
#endif // __SokoSave_SokoBoard_h
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.