amoebaxmain.m
来自「Source code (C++) of the Amoebax game fo」· M 代码 · 共 144 行
M
144 行
// Cross-platform free Puyo-Puyo clone.// Copyright (C) 2006, 2007 Emma's Software// Based on the work of Darrel Walisser <dwaliss1@purdue.edu> and// Max Horn <max@quendi.de>.//// 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.//#import <sys/param.h> // for MAXPATHLEN. */#import <unistd.h>#import <SDL.h>#import "AmoebaxMain.h"#if defined (main)#undef main#endif // main// Global variables where the command line arguments gets stored,// so we can pass them to SDL_main later.static int g_argc;static char **g_argv;@interface Amoebax: NSApplication@end@implementation Amoebax////// \brief Posts a SQL_QUIT event.////// This is called from the `Quit' menu item.///- (void)terminate: (id)sender{ SDL_Event quitEvent; quitEvent.type = SDL_QUIT; SDL_PushEvent (&quitEvent);}////// \brief Ignores keystrokes which doesn't use the the Command key.///-(void)sendEvent: (NSEvent *)event{ if ( NSKeyDown == [event type] || NSKeyUp == [event type] ) { if ( NSCommandKeyMask == ([event modifierFlags] & NSCommandKeyMask) ) { [super sendEvent: event]; } } else { [super sendEvent: event]; }}@end@implementation AmoebaxMain////// \brief Sets the working directory to the bundle's resource directory.///- (void)setupWorkingDirectory: (BOOL)shouldChdir{ if ( shouldChdir ) { char resourcesDirectory[MAXPATHLEN]; CFURLRef resourcesUrl = CFBundleCopyResourcesDirectoryURL (CFBundleGetMainBundle ()); if ( CFURLGetFileSystemRepresentation (resourcesUrl, true, (UInt8 *)resourcesDirectory, MAXPATHLEN) ) { assert ( chdir (resourcesDirectory) == 0 ); } CFRelease (resourcesUrl); }}////// \brief Gets called when the internal event loop has just started running.///- (void)applicationDidFinishLaunching: (NSNotification *)note{ [self setupWorkingDirectory:true]; int status = SDL_main (g_argc, g_argv); // Done! exit (status);}@end////// \brief Shows an alert.////// \param title The alert's title./// \param error The error message.///voidOSXAlert (const char *title, const char *error){ NSRunAlertPanel ([NSString stringWithCString: title], [NSString stringWithCString: error], [NSString stringWithCString: "OK"], nil, nil);}////// \brief Main entry point of executable. Should *not* be SDL_main!///intmain (int argc, char **argv){ // This is passed if we are launched by double-clicking. */ if ( 2 <= argc && strncmp (argv[1], "-psn", 4) == 0 ) { g_argc = 1; g_argv = (char **)SDL_malloc (sizeof (char *) * 2); g_argv[0] = argv[0]; g_argv[1] = NULL; } else { int currentArgument = 0; g_argc = argc; g_argv = (char **)SDL_malloc (sizeof (char *) * (argc + 1)); for ( currentArgument = 0 ; currentArgument <= argc ; ++currentArgument ) { g_argv[currentArgument] = argv[currentArgument]; } } [Amoebax poseAsClass:[NSApplication class]]; NSApplicationMain (argc, (const char **)argv); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?