关于我正在尝试制作的这款红润游戏,我已经在这里问了很多次问题。我正在开发基于文本的冒险游戏。首先,我用 Java 制作它,因为这就是我正在学习的游戏课程。现在我正在尝试学习需要objective-c的iOS开发。参加完 Lynda Essentials 课程后,我对 Objective c 感觉很舒服(当然,以前的 Java 经验有帮助)。无论如何,我正在开发这款游戏,但我遇到了一个对目标 c 来说似乎非常独特的问题。
在 Java 中,当我有多个类时,它们只需要在同一个目录中,以便我在其他类中使用它们。在 Objective-C 中不是这种情况...如果我想在 B 类中使用 A 类,我必须导入头文件。对于这个游戏,我有两个自定义类,一个 Location 类和一个 Exit 类。Location 类需要知道它有什么出口(所以如果我想使用它们,我必须导入 Exit.h)并且出口需要知道它连接到哪个位置(所以我必须导入 Location.h)。由于称为循环引用(或类似的东西)的东西,我似乎不能这样做。但是,如果我不这样做,则会收到“预期类型”错误。所以我不知道该怎么做。我将在下面显示代码。
退出.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
退出.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
位置.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
位置.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
我真的希望我不会尝试做一些不可能的事情。我也希望我的代码可以被理解,并且我不会在这里自欺欺人;)感谢您的任何建议。