4

我正在创建的游戏是一款文字益智游戏。您从一个菜单开始,用户可以在其中决定是单人游戏还是多人游戏。如果他们选择单人游戏,那么他们可以选择玩 3 种不同的模式。

  • 实践

没有计时器

  • 压力

玩家必须在 10 秒内重复做一个谜题,直到它无法在 10 秒内做完谜题而他们“死亡”

  • 时间战

玩家有 2 分钟的时间做尽可能多的谜题。

你看,实际的游戏玩法并没有改变,但唯一改变的是时间的管理方式。我阅读了您的文章,发现状态模式非常适合,现在我唯一的问题是如何实现该模式。

我应该像在菜单状态抽象和游戏抽象中那样制作子状态,还是应该只创建一个通用游戏状态抽象然后忽略像“ handleMenuSelection ”这样的调用?

我在 cocos2d 中找不到任何好的在线教程。我可以找到很多小演示,但是当我以前从未接触过除 OOP 设计之外的设计模式时,很难将其转换为大型应用程序。

顺便提一句。你的链接对我的新想法很有帮助:)

4

2 回答 2

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 个单独的类时,将来需要在所有文件中更新一个.. 尽可能多地使用通用代码很好.

于 2013-06-29T17:13:41.947 回答
2

鉴于信息很少,很难提出一个好的设计指南。尝试猜测一下,我建议您阅读策略设计模式状态设计模式另一个链接),因为它可能适合您正在做的事情,并且这将是管理多种游戏模式的一种干净的方式.

于 2013-06-27T16:46:21.157 回答