This is Puzzle.m in view mode; [Download] [Up]
/* * STANDARD DISCLAIMER: * You may freely copy, distribute and reuse the code in this program. * Trirex disclaims any warranty of any kind, expressed or implied, as to * its fitness for any particular use. */ /* Generated by Interface Builder */ #import "Puzzle.h" #import <appkit/Matrix.h> #import <libc.h> @implementation Puzzle - init { [super init]; blankPieceRow = blankPieceCol = 3; return self; } - appDidInit:sender { [window makeKeyAndOrderFront: NULL]; return self; } - movePiece:sender { id piece; int dx, dy; int oldRow = [sender selectedRow]; int oldCol = [sender selectedCol]; /* Make sure that it's a legal move */ dx = abs(oldRow - blankPieceRow); dy = abs(oldCol - blankPieceCol); if (dx > 1 || dy > 1) return self; if (dx == 1 && dy ==1) return self; /* Get the id of the button on which the user clicked */ piece = [sender selectedCell]; /* Swap the blank piece with the piece on which the user clicked */ [matrix putCell:piece at:blankPieceRow :blankPieceCol]; [matrix putCell:blank at:oldRow :oldCol]; [matrix display]; // Remember where the blank piece is located blankPieceRow = oldRow; blankPieceCol = oldCol; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.