私が作ろうとしているこの血色の良いゲームについて、私はここで何度も質問をしました。私はテキストベースのアドベンチャーゲームに取り組んでいます。最初にJavaで作成したのは、それがゲームのクラスを学んでいたからです。今私はobjective-cを必要とするiOS開発を学ぼうとしています。Lynda Essentialsコースを受講した後は、Objective Cにかなり満足しています(もちろん、以前のJavaの経験が役に立ちました)。とにかく私はこのゲームに取り組んでいて、ObjectiveCにかなり特有のように見える問題に遭遇しています。
Javaでは、複数のクラスがある場合、他のクラスでそれらを使用するには、それらが同じディレクトリにある必要があります。これはObjective-Cには当てはまりません...クラスBでクラスAを使用する場合は、ヘッダーファイルをインポートする必要があります。このゲームでは、LocationクラスとExitクラスの2つのカスタムクラスがあります。Locationクラスは、Exitが何であるかを知る必要があり(したがって、Exit.hを使用する場合は、Exit.hをインポートする必要があります)、Exitは、接続されている場所を知る必要があります(Location.hをインポートする必要があります)。循環参照(またはそのようなもの)と呼ばれるもののために、これを行うことができないようです。ただし、これを行わないと、「予期されたタイプ」エラーが発生します。だから私は何をすべきか分かりません。以下にコードを示します。
Exit.h
#import <Foundation/Foundation.h>
#import "Location.h"
#define NORTH 0
#define SOUTH 1
#define EAST 2
#define WEST 3
@interface Exit : NSObject
@property NSString * dirName;
@property NSString * dirShortName;
@property int direction;
@property Location * connection;
-(id)initWithConnection:(Location *) loc andDirection:(int) dir;
@end
Exit.m
#import "Exit.h"
@implementation Exit
@synthesize dirName;
@synthesize dirShortName;
@synthesize direction;
@synthesize connection;
-(id)initWithConnection:(Location *)loc andDirection:(int)dir {
self = [super init];
if(self) {
direction = dir;
switch(direction) {
case 0:
dirName = @"North";
dirShortName = @"N";
break;
case 1:
dirName = @"South";
dirShortName = @"S";
break;
case 2:
dirName = @"East";
dirShortName = @"E";
break;
case 3:
dirName = @"West";
dirShortName = @"W";
break;
}
connection = loc;
}
return self;
}
@end
Location.h
#import <Foundation/Foundation.h>
@interface Location : NSObject
@property NSString * title;
@property NSString * desc;
@property NSMutableDictionary * exits;
@property BOOL final;
-(id) initWithTitle:(NSString *) _title;
-(id) initWithDescription:(NSString *) _desc;
-(id) initWithTitle:(NSString *) _title andDescription:(NSString *) _desc;
-(void) addExit:(Exit *) _exit;
@end
Location.m
#import "Location.h"
@implementation Location
@synthesize title;
@synthesize desc;
@synthesize exits;
@synthesize final;
-(void) addExit:(Exit *) _exit {
NSString * tmpName = [_exit dirName];
NSString * tmpShortName = [_exit dirShortName];
[exits setObject:tmpName forKey:tmpShortName];
}
-(NSString *)description {
NSString * tmp = [[NSString alloc] initWithFormat:@"%@\n%@\n",self.title,self.desc];
for(NSString * s in exits) {
[tmp stringByAppendingFormat:@"\n%@",s];
}
return tmp;
}
// Initialization Methods
-(id) init {
self = [super init];
if(self) {
title = @"";
desc = @"";
}
return self;
}
-(id) initWithTitle:(NSString *) _title {
self = [super init];
if(self) {
title = title;
desc = @"";
exits = [[NSMutableDictionary alloc] initWithObjectsAndKeys:nil];
}
return self;
}
-(id) initWithDescription:(NSString *) _desc {
self = [super init];
if(self) {
title = @"";
desc = desc;
exits = [[NSMutableDictionary alloc] initWithObjectsAndKeys:nil];
}
return self;
}
-(id)initWithTitle:(NSString *) _title andDescription:(NSString *)_desc {
self = [super init];
if(self) {
title = title;
desc = desc;
exits = [[NSMutableDictionary alloc] initWithObjectsAndKeys:nil];
}
return self;
}
@end
不可能なことをやろうとしないことを本当に望んでいます。また、私のコードが理解できることを願っています。ここでは、自分を馬鹿にしすぎないようにしています;)アドバイスをありがとうございます。