gnustep-gmines-0.2/000075500000000000000000000000001227734174600143335ustar00rootroot00000000000000gnustep-gmines-0.2/ChangeLog000064400000000000000000000004121227734174600161020ustar00rootroot000000000000002011-06-02 Riccardo Mottola * main.m removed warnings and memory leaks 2011-05-30 Riccardo Mottola Imported project with permission of the original author. Converted the project to be a ProjectCenter project and fixed minor things. gnustep-gmines-0.2/Controller.h000064400000000000000000000010341227734174600166250ustar00rootroot00000000000000#import #import #import "Views.h" @interface Controller : NSObject { NSWindow *window; NSTextField *timeField, *markField; Square *fields[8][8]; int uncovered; BOOL atStart; NSDate *startDate; } -(void)applicationDidFinishLaunching:(NSNotification *)aNotification; - makeGameWindow; - newGame:(id)sender; - uncoverRegion:(Square *)item; - uncoverAll:(Square *)item; - uncovered:(Square *)item; - marked:(Square *)item; - (int)markCount; - start; - tick; @end gnustep-gmines-0.2/Controller.m000064400000000000000000000151571227734174600166450ustar00rootroot00000000000000 #import #import "Controller.h" @implementation Controller - (void)applicationDidFinishLaunching:(NSNotification *)aNotification; { NSInvocation *inv; inv = [NSInvocation invocationWithMethodSignature: [self methodSignatureForSelector: @selector(tick)]]; [inv setSelector:@selector(tick)]; [inv setTarget:self]; [inv retain]; [NSTimer scheduledTimerWithTimeInterval:1.0 invocation:inv repeats:YES]; window = nil; srand48(time(NULL)); [self makeGameWindow]; [self newGame:nil]; } - makeGameWindow { NSRect frame; NSView *view; int m = NSTitledWindowMask; int row, col; NSBox *boardBox; NSRect contentRect; view = [[NSView alloc] initWithFrame: NSMakeRect(0, 0, DIMENSION*8, DIMENSION*8)]; for(row=0; row<8; row++){ for(col=0; col<8; col++){ NSPoint spoint = NSMakePoint(row*DIMENSION, col*DIMENSION); Square *field = [[Square alloc] initAtPoint:spoint row:row col:col controller:self]; [view addSubview:field]; fields[row][col] = field; } } markField = [[NSTextField alloc] initWithFrame: NSMakeRect(0, DIMENSION*8+SEPARATOR, 3*DIMENSION, DIMENSION)]; [markField setEditable:NO]; [markField setSelectable:NO]; [markField setBackgroundColor:[NSColor blackColor]]; [markField setTextColor:[NSColor redColor]]; [view addSubview:markField]; timeField = [[NSTextField alloc] initWithFrame: NSMakeRect(DIMENSION*5, DIMENSION*8+SEPARATOR, 3*DIMENSION, DIMENSION)]; [timeField setEditable:NO]; [timeField setSelectable:NO]; [timeField setBackgroundColor:[NSColor blackColor]]; [timeField setTextColor:[NSColor redColor]]; [view addSubview:timeField]; boardBox = [[NSBox alloc] initWithFrame: NSMakeRect(0, 0, DIMENSION*8, DIMENSION*8)]; [boardBox setContentView:view]; [boardBox setContentViewMargins:NSMakeSize(MARGIN, MARGIN)]; [boardBox setTitle:@"Board"]; [boardBox setBorderType:NSGrooveBorder]; [boardBox sizeToFit]; frame = [NSWindow frameRectForContentRect:[boardBox frame] styleMask:m]; window = [[NSWindow alloc] initWithContentRect:frame styleMask:m backing: NSBackingStoreRetained defer:NO]; [window setMinSize:frame.size]; [window setTitle:@"Mines"]; [window setDelegate:self]; [window setFrame:frame display:YES]; [window setMaxSize:frame.size]; [window setContentView:boardBox]; [window setReleasedWhenClosed:YES]; // RELEASE(view); [window center]; [window orderFrontRegardless]; [window makeKeyWindow]; [window display]; return self; } - newGame:(id)sender { int row, col, mrow, mcol, index; for(row=0; row<8; row++){ for(col=0; col<8; col++){ [fields[row][col] setDefaults]; } } for(index=0; index<10; index++){ do { mrow = lrand48()%8; mcol = lrand48()%8; } while([fields[mrow][mcol] mine]==YES); [fields[mrow][mcol] setMine:YES]; } for(row=0; row<8; row++){ for(col=0; col<8; col++){ int sx, sy, nb; nb = 0; for(sx=-1; sx<=1; sx++){ for(sy=-1; sy<=1; sy++){ int cx = row+sx, cy = col+sy; if(!(sx==0 && sy==0) && (0<=cx && cx<8) && (0<=cy && cy<8)){ if([fields[cx][cy] mine]==YES){ nb++; } } } } if(nb>0){ [fields[row][col] setNeighbors:nb]; } } } [markField setIntValue:10]; [timeField setStringValue:@""]; uncovered = 0; atStart = YES; return self; } - uncoverRegion:(Square *)item { int row, col, sx, sy, cx, cy; if([item covered]!=COV_COVERED || [item marked]==YES){ return self; } [item setCovered:COV_UNCOVERED]; uncovered++; if([item neighbors]>0){ return self; } row = [item row]; col = [item col]; for(sx=-1; sx<=1; sx++){ for(sy=-1; sy<=1; sy++){ cx = row + sx; cy = col + sy; if(!(sx==0 && sy==0) && (0<=cx && cx<8) && (0<=cy && cy<8)){ [self uncoverRegion:fields[cx][cy]]; } } } return self; } - uncoverAll:(Square *)item { int row, col; for(row=0; row<8; row++){ for(col=0; col<8; col++){ Square *other = fields[row][col]; if(other!=item){ [other setCovered:COV_UNCOVERED]; } } } atStart = YES; return self; } - uncovered:(Square *)item { BOOL win; [self start]; if(![item neighbors] && [item mine]==NO){ [self uncoverRegion:item]; } else if([item mine]==NO){ uncovered++; } win = ((uncovered==(64-10) && ![markField intValue]) ? YES : NO); if([item mine]==YES || win==YES){ [self uncoverAll:item]; } if([item mine]==YES){ NSRunAlertPanel(@"Game over.", @"You lose.", @"Ok", nil, nil); } else if(win==YES){ NSRunAlertPanel(@"Congratulations!", @"You win.", @"Ok", nil, nil); } return self; } - marked:(Square *)item { BOOL win; int marks = [markField intValue]; [markField setIntValue:marks+([item marked]==YES ? -1 : 1)]; [self start]; win = ((uncovered==(64-10) && ![markField intValue]) ? YES : NO); if(win==YES){ [self uncoverAll:nil]; NSRunAlertPanel(@"Congratulations!", @"You win.", @"Ok", nil, nil); } return self; } - (int)markCount { return [markField intValue]; } - start { if(atStart==YES){ startDate = [NSDate date]; [startDate retain]; atStart = NO; } return self; } - tick { if(atStart==NO){ int delta = -[startDate timeIntervalSinceNow]; NSString *timeStr = [NSString stringWithFormat:@"%06d:%02d", delta/60, delta%60]; [timeField setStringValue:timeStr]; } return self; } @end gnustep-gmines-0.2/GMines.pcproj/000075500000000000000000000000001227734174600170115ustar00rootroot00000000000000gnustep-gmines-0.2/GMines.pcproj/PC.project000064400000000000000000000033421227734174600207050ustar00rootroot00000000000000{ APPLICATIONICON = "GMines.tiff"; "APP_DOCUMENT_BASED" = NO; "APP_TYPE" = GORM; "BUILDER_TARGETS" = ( all, install, uninstall, clean, distclean, dist ); "CLASS_FILES" = ( "Controller.m", "Views.m" ); COMPILEROPTIONS = ""; CPPOPTIONS = ""; "CREATION_DATE" = "2011-05-30 14:34:12 +0200"; "DOCU_FILES" = ( ); FRAMEWORKS = ( ); "HEADER_FILES" = ( "Controller.h", "Views.h" ); IMAGES = ( "GMines.tiff" ); INSTALLDIR = "$(HOME)/GNUstep"; INTERFACES = ( ); LANGUAGE = English; LIBRARIES = ( "gnustep-base", "gnustep-gui" ); LINKEROPTIONS = ""; "LOCALIZED_RESOURCES" = ( ); MAININTERFACE = ""; MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; "OBJC_COMPILEROPTIONS" = ""; "OTHER_RESOURCES" = ( ); "OTHER_SOURCES" = ( "main.m" ); "PRINCIPAL_CLASS" = NSApplication; "PROJECT_AUTHORS" = ( "Marko Riedel" ); "PROJECT_COPYRIGHT" = "Copyright (C) 2002-2011 Free Software Foundation, Inc"; "PROJECT_COPYRIGHT_DESC" = "Released under GPL v2"; "PROJECT_CREATOR" = "Riccardo,,,"; "PROJECT_DESCRIPTION" = "GNUstep minesweeper game"; "PROJECT_DOCUMENTTYPES" = ( ); "PROJECT_GROUP" = "No group avaliable!"; "PROJECT_MAINTAINER" = "Riccardo,,,"; "PROJECT_NAME" = GMines; "PROJECT_RELEASE" = "0.2"; "PROJECT_SUMMARY" = "No summary avaliable!"; "PROJECT_TYPE" = Application; "PROJECT_URL" = "http://gap.nongnu.org/gmines/"; "SEARCH_HEADER_DIRS" = ( ); "SEARCH_LIB_DIRS" = ( ); SUBPROJECTS = ( ); "SUPPORTING_FILES" = ( "GNUmakefile.preamble", GNUmakefile, "GNUmakefile.postamble", "GMinesInfo.plist" ); "USER_LANGUAGES" = ( English ); }gnustep-gmines-0.2/GMinesInfo.plist000064400000000000000000000010001227734174600173750ustar00rootroot00000000000000{ ApplicationDescription = "GNUstep minesweeper game"; ApplicationIcon = "GMines.tiff"; ApplicationName = GMines; ApplicationRelease = "0.2"; Authors = ( "Marko Riedel" ); Copyright = "Copyright (C) 2002-2011 Free Software Foundation, Inc"; CopyrightDescription = "Released under GPL v2"; FullVersionID = "0.2"; NSExecutable = GMines; NSIcon = "GMines.tiff"; NSPrincipalClass = NSApplication; NSRole = Application; URL = "http://gap.nongnu.org/gmines/"; }gnustep-gmines-0.2/GNUmakefile000064400000000000000000000015141227734174600164060ustar00rootroot00000000000000# # GNUmakefile - Generated by ProjectCenter # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif include $(GNUSTEP_MAKEFILES)/common.make # # Application # VERSION = 0.2 PACKAGE_NAME = GMines APP_NAME = GMines GMines_APPLICATION_ICON = GMines.tiff # # Resource files # GMines_RESOURCE_FILES = \ Resources/GMines.tiff \ # # Header files # GMines_HEADER_FILES = \ Controller.h \ Views.h # # Class files # GMines_OBJC_FILES = \ Controller.m \ Views.m # # Other sources # GMines_OBJC_FILES += \ main.m # # Makefiles # -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble gnustep-gmines-0.2/GNUmakefile.preamble000064400000000000000000000010701227734174600201710ustar00rootroot00000000000000# # GNUmakefile.preamble - Generated by ProjectCenter # # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to Objective C compiler ADDITIONAL_OBJCFLAGS += # Additional flags to pass to C compiler ADDITIONAL_CFLAGS += # Additional flags to pass to the linker ADDITIONAL_LDFLAGS += # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += # Additional GUI libraries to link ADDITIONAL_GUI_LIBS += gnustep-gmines-0.2/Resources/000075500000000000000000000000001227734174600163055ustar00rootroot00000000000000gnustep-gmines-0.2/Resources/GMines.tiff000064400000000000000000000160561227734174600203510ustar00rootroot00000000000000II*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆøüøøüøøüøpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøpŒˆpŒˆpŒˆpŒˆpŒˆøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88À88À88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88øüøøüøøüøøüøÀ88À88øüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88øüøøüøøüøøüøøüøøüøøüøøüøøøøøüøøüøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøøøüøøüøøüøøüøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøøøüøøüøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88À88À88À88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøÀ88À88À88À88À88À88À88À88øüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøøøøøøøøøøøøøøøøøøøøøüøÿÿÿøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøþ00Î JÔ@&(/home/multix/gnustep-cvs/gap/user-apps/Games/GMines/Resources/GMines.tiffHHgnustep-gmines-0.2/Views.h000064400000000000000000000014351227734174600156040ustar00rootroot00000000000000#import #import #define DIMENSION 24 #define SEPARATOR 10 #define MARGIN 6 typedef enum { COV_COVERED = 0, COV_UNCOVERED, COV_UNCOVERED_BY_CLICK } COV_STATE; @interface Square : NSView { int row, col; BOOL isMine; int neighbors; COV_STATE covered; BOOL marked; id con; } - initAtPoint:(NSPoint)aPoint row:(int)rval col:(int)cval controller:(id)theCon; - (int)row; - (int)col; - setDefaults; - setMine:(BOOL)flag; - setNeighbors:(int)count; - setCovered:(COV_STATE)aState; - setMarked:(BOOL)flag; - (BOOL)mine; - (int)neighbors; - (COV_STATE)covered; - (BOOL)marked; - (void)drawRect:(NSRect)aRect; - (void)mouseDown:(NSEvent *)theEvent; - (void)rightMouseDown:(NSEvent *)theEvent; @end gnustep-gmines-0.2/Views.m000064400000000000000000000104071227734174600156100ustar00rootroot00000000000000 #import "Views.h" #import "Controller.h" @implementation Square - initAtPoint:(NSPoint)aPoint row:(int)rval col:(int)cval controller:(id)theCon { NSRect frame; frame.origin = aPoint; frame.size.width = frame.size.height = DIMENSION; [super initWithFrame:frame]; [self setDefaults]; con = theCon; row = rval; col = cval; return self; } - (int)row { return row; } - (int)col { return col; } - setDefaults { isMine = NO; neighbors = 0; covered = COV_COVERED; marked = NO; [self setNeedsDisplay:YES]; return self; } - setMine:(BOOL)flag; { if(flag!=isMine){ [self setNeedsDisplay:YES]; } isMine = flag; return self; } - setNeighbors:(int)count; { if(count!=neighbors){ [self setNeedsDisplay:YES]; } neighbors = count; return self; } - setCovered:(COV_STATE)aState { if(aState!=covered){ [self setNeedsDisplay:YES]; } covered = aState; return self; } - setMarked:(BOOL)flag; { if(flag!=marked){ [self setNeedsDisplay:YES]; } marked = flag; return self; } - (BOOL)mine; { return isMine; } - (int)neighbors { return neighbors; } - (COV_STATE)covered { return covered; } - (BOOL)marked { return marked; } - (void)drawRect:(NSRect)aRect { PSsetlinewidth(1.0); if(covered==COV_COVERED){ if(marked==YES){ int center = DIMENSION-DIMENSION/3, width = DIMENSION/3+4; [[NSColor blackColor] set]; PSrectfill(center-width/2, 2, width, 4); PSrectfill(center-width/2+2, 6, width-4, 3); PSmoveto(center, 9); PSlineto(center, 5*DIMENSION/6); PSstroke(); [[NSColor redColor] set]; PSrectfill(center-DIMENSION/2, DIMENSION/2, DIMENSION/2, 5*DIMENSION/6-DIMENSION/2); } } else{ if(covered==COV_UNCOVERED_BY_CLICK && isMine==YES){ [[NSColor redColor] set]; } else{ [[NSColor whiteColor] set]; } PSrectfill(0, 0, DIMENSION, DIMENSION); if(isMine==YES || marked==YES){ [[NSColor blackColor] set]; PSarc(DIMENSION/2, DIMENSION/2, DIMENSION/2-3, 0, 360); PSfill(); PSgsave(); PStranslate(DIMENSION/2, DIMENSION/2); PSmoveto(-DIMENSION/2, 0); PSlineto(DIMENSION/2, 0); PSmoveto(0, -DIMENSION/2); PSlineto(0, DIMENSION/2); PSrotate(45); PSmoveto(-DIMENSION/2, 0); PSlineto(DIMENSION/2, 0); PSmoveto(0, -DIMENSION/2); PSlineto(0, DIMENSION/2); PSstroke(); PSgrestore(); [[NSColor whiteColor] set]; PSarc(DIMENSION/2-DIMENSION/8, DIMENSION/2+DIMENSION/8, DIMENSION/10, 0, 360); PSfill(); } if(isMine==NO && marked==YES){ [[NSColor redColor] set]; PSgsave(); PSsetlinewidth(5.0); PSmoveto(3, 3); PSlineto(DIMENSION-3, DIMENSION-3); PSmoveto(3, DIMENSION-3); PSlineto(DIMENSION-3, 3); PSstroke(); PSgrestore(); } if(isMine==NO && marked==NO && neighbors>0){ char str[2] = { '0', 0 }; float comp = ((float)neighbors)/9.0; NSFont *font = [NSFont systemFontOfSize:DIMENSION-6]; [font set]; str[0] += neighbors; PSsetrgbcolor(1.0-comp, comp, comp); PSmoveto(DIMENSION/2-4, DIMENSION/4); PSshow(str); PSstroke(); } } [[NSColor blackColor] set]; PSrectstroke(0, 0, DIMENSION, DIMENSION); [[NSColor whiteColor] set]; PSrectstroke(1, 1, DIMENSION-2, DIMENSION-2); } - (void)mouseDown:(NSEvent *)theEvent { if(covered==COV_COVERED && marked==NO){ [con uncovered:self]; [self setCovered:COV_UNCOVERED_BY_CLICK]; } } - (void)rightMouseDown:(NSEvent *)theEvent { if(covered==COV_COVERED){ if(marked==NO && ![con markCount]){ NSBeep(); return; } [self setMarked:(marked==YES ? NO : YES)]; [con marked:self]; } } @end gnustep-gmines-0.2/main.m000064400000000000000000000051761227734174600154460ustar00rootroot00000000000000/* * main.m: main function of Fractal.app * * Copyright (c) 2002 Free Software Foundation, Inc. * * Author: Marko Riedel * Date: May 2002 * * With code fragments from MemoryPanel, ImageViewer, Finger, GDraw * and GShisen. * * This sample program is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #import #import #import "Controller.h" int main(int argc, const char **argv, char** env) { NSAutoreleasePool *pool; NSApplication *app; NSMenu *mainMenu; NSMenu *menu; NSMenuItem *menuItem; Controller *controller; pool = [NSAutoreleasePool new]; app = [NSApplication sharedApplication]; // // Create the Menu // // Main Menu mainMenu = AUTORELEASE ([NSMenu new]); // Info SubMenu menuItem = (NSMenuItem *)[mainMenu addItemWithTitle: @"Info" action: NULL keyEquivalent: @""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; [menu addItemWithTitle: @"Info Panel..." action: @selector (orderFrontStandardInfoPanel:) keyEquivalent: @""]; [menu addItemWithTitle: @"Preferences..." action: @selector (runPreferencesPanel:) keyEquivalent: @""]; [menu addItemWithTitle: @"Help..." action: @selector (orderFrontHelpPanel:) keyEquivalent: @"?"]; // Game MenuItem. menuItem = (NSMenuItem *)[mainMenu addItemWithTitle: @"New game" action: @selector(newGame:) keyEquivalent: @""]; // Hide MenuItem [mainMenu addItemWithTitle: @"Hide" action: @selector (hide:) keyEquivalent: @"h"]; // Quit MenuItem [mainMenu addItemWithTitle: @"Quit" action: @selector (terminate:) keyEquivalent: @"q"]; [app setMainMenu: mainMenu]; controller = [Controller new]; [app setDelegate: controller]; NSApplicationMain(argc, argv); [[NSUserDefaults standardUserDefaults] synchronize]; [controller release]; [pool release]; /* actually useless */ return 0; }