MinGW向けのSDLライブラリを、公式サイトからゲット。
で、ここを参考にコードを書く。
しばらく触ってなかったせいか、SDLの流儀的なものをすっかり忘れている。
チュートリアルサイトのコードがないと書けないとか、一時期SDLに取り組んでたとは思えない低能っぷり。実に恥ずかしいな。
#import <SDL/SDL.h>
#import <stdio.h>
#import <objc/Object.h>
#define SCR_WIDTH 640
#define SCR_HEIGHT 480
#define SCR_BPP 32
#define CAPTION "SDL Hello"
SDL_Surface *gScreen;
@interface Game : Object
- (BOOL)Initialize;
- (void)End;
- (BOOL)PollEvent;
@end
@implementation Game
-(BOOL) Initialize {
if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) return NO;
SDL_WM_SetCaption( CAPTION, NULL );
gScreen = SDL_SetVideoMode(
SCR_WIDTH,
SCR_HEIGHT,
SCR_BPP,
SDL_SWSURFACE);
SDL_ShowCursor( SDL_DISABLE );
return YES;
}
-(void) End {
SDL_Quit();
}
-(BOOL) PollEvent {
SDL_Event ev;
SDLKey *key;
while(SDL_PollEvent(&ev)) {
switch(ev.type) {
case SDL_QUIT:
return NO;
break;
case SDL_KEYDOWN: {
key = &(ev.key.keysym.sym);
if( *key == 22 ) {
return NO;
}
}
break;
}
}
return YES;
}
@end
int main(int argc, char* argv[])
{
id G = [Game new];
if( ![G Initialize] ) {
printf("Initialized fail.\n");
[G free];
return 1;
}
while( 1 ) {
if( ![G PollEvent] ) break;
}
[G End];
[Game free];
return 0;
}
全然Objective-Cっぽくないという。
まぁ、Objective-Cの機能を使ったコードが通るってことを実証したかったわけで。
最初、BOOL型をboolとして怒られ、YESをtrueやTRUEとして怒られ、NOをfalseやFALSEとして怒られた。
文化の違いってやつだと思う。Booleanなのに、真偽じゃなく、YES/NOって……。
(どうでもいいけど、Accessだったっけか?YES/NO型ってのがあるの。)
ともかく、ざっくりと上記のようなコードを書き上げて、
gcc [filename] -lobjc -lmingw32 -lSDLmain -lSDL -mwindows
とかしてコンパイルしてやる。
もちろん、手元では-lobjcじゃ通らないから、直接ライブラリファイルを指定してるわけだけど、パスを書くのが面倒だから、ここでは-lobjcで代用しとく。
当然?とでも言うかのように、エラーも警告無くコンパイルが通って、exeファイルが生成される。
必要なDLLがそろってるディレクトリに移動させて、起動してやると、図のようなウィンドウが出た。
うん。OKなんじゃない?
もっとうまく、オブジェクト指向なコーディングが出来れば、なお使いやすそう。
お遊びに使うには十分すぎる性能を持っていると言えるカモね。
0 件のコメント:
コメントを投稿