我正在制作的游戏是一款益智游戏。你从菜单开始,用户决定使用单人游戏或多人游戏。 如果他们选择单人游戏,那么他们可以选择玩3种不同的模式。
没有计时器
玩家必须在10秒内反复进行拼图,直到它在10秒钟内完成拼图并且他们“死了”#34;
玩家有2分钟可以做尽可能多的谜题。
你知道,实际的游戏玩法并没有改变,但唯一改变的是如何管理时间。 我读了你的文章,我发现State模式非常适合,现在我唯一的问题就是如何实现这种模式。
我应该在菜单状态抽象和游戏抽象中创建子状态,还是应该创建一个通用游戏状态抽象,然后忽略像" handleMenuSelection " ?
我无法在cocos2d上找到任何有关此内容的好教程。我可以找到很多小型演示,但是除了OOP设计之外,我从未触及过设计模式,因此很难将其转换为大型应用程序。
顺便说一下。你的链接非常有用,让我开始思考新想法:)
答案 0 :(得分:4)
很高兴有一个单一类(共享对象)来维护所有统计数据。
示例:说MyGame用于存储所有游戏统计信息。 //在MyGame.h中
typedef enum
{
kGameMode_Practice = 1001,
kGameMode_Stress,
kGameMode_TimeBattle,
}GameMode;
@interface MyGame: NSObject
{
GameMode mGameMode;
int mHighScore;
}
@property(nonatomic,assign) GameMode gameMode;
@property(nonatomic,assign)int highScore;
+(MyGame*)sharedGameObject;
//在MyGame.mm
static MyGame *gGame = nil;
@implementation MyGame
@synthesize gameMode=mGameMode;
@synthesize highScore=mHighScore;
+(MyGame*)sharedGameObject
{
if(!gGame)
{
gGame = [[MyGame alloc] init];
}
return gGame;
}
-(void)saveData //Call this from applicationWillResignActive
{
NSUserDefaults *userDafs = [NSUserDefaults standardUserDefaults];
[userDafs setInteger:self.highScore forKey:@"highScore"];
[userDafs setInteger:self.gameMode forKey:@"gameMode"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)loadData //call this from UIApplication didFinishLaunchingWithOptions
{
NSUserDefaults *userDafs = [NSUserDefaults standardUserDefaults];
self.highScore = [userDafs integerForKey:@"highScore"]
self.gameMode = (GameMode)[userDafs integerForKey:@"gameMode"]
}
//您可以在选择菜单按钮
时设置游戏模式 [MyGame sharedGameObject].gameMode = kGameMode_Practice
//检查游戏中的任何地方
if([MyGame sharedGameObject].gameMode == kGameMode_Practice)
同时在应用终止时保存这些值,并在应用启动时加载相同值。
[[MyGame sharedGameObject] saveData];
根据游戏模式,您可以更改游戏。使用单一通用类进行游戏玩法逻辑并检查游戏模式并进行调整..当你为3个类设计3个单独的类时,将来需要在所有文件中更新一个更好的...所以尽可能多地使用通用代码
答案 1 :(得分:2)
鉴于信息非常少,很难提出一个好的设计指南。试着猜一下,我建议你阅读Strategy Design Pattern和State Design Pattern(another link),因为它可能适合你正在做的事情,它会是一个干净的方式管理多种游戏模式。