2013-06-27 34 views
4

我創建的遊戲是一個字益智遊戲。你從一個菜單開始,在那裏用戶決定去單人或多人遊戲。 如果他們選擇單人遊戲,那麼他們可以選擇播放3種不同的模式。使用狀態設計模式爲cocos2d遊戲

  • 實踐

沒有計時器

  • 應力

玩家要反覆做10秒鐘內一個謎,直到它deosn't設法在10秒內完成謎題,他們「死亡」

  • 時間戰鬥

選手有2分鐘做盡可能多的難題成爲可能。

你看,實際的遊戲玩法並沒有改變,但唯一改變的是時間管理。 我看了你的文章,發現國家模式很適合,現在唯一的問題是我如何實現這種模式。

我應該讓子狀態作爲一個菜單狀態抽象和遊戲的抽象,或者我應該只創建一個通用的遊戲狀態的抽象,然後忽略像「handleMenuSelection」電話?

我在cocos2d上找不到任何好的在線教程。我可以找到很多小型演示,但是除了OOP設計之前,我從來沒有碰到過設計模式,所以很難將其轉化爲大型應用程序。

Btw。你的鏈接是非常有幫助的打開我的想法,爲新的想法:)

回答

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; 

@屬性(非原子,分配)INT高分;

+(MyGame*)sharedGameObject; 

//在MyGame中。毫米

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種單獨的類爲3types然後改變一個需要更新所有文件在將來..所以儘可能有通用代碼。

+1

這就是我個人會用到的 - 我相信你可以從中獲取設置的單例是實現你想要的最簡單的方法。 –

+0

我認爲這很有用,但是最終會出現很多if和switch,代碼會變成口袋裏的耳機。我以後也會在遊戲中支持多人遊戲。我會在遊戲管理器中佈置一個布爾值來告訴它是否是多人遊戲?多人遊戲將以回合爲基礎,因此除了只允許部分遊戲模式外,遊戲不會依賴遊戲。 (不需要無盡的練習模式,當多人模式時) – chrs

+0

是的,就像highScore,你可以使用一個更多的布爾變量來維護關於多人遊戲的狀態或不是..希望你有想法。你也需要在遊戲開始和結束時保存並加載NSUserDefaults中的這些統計數據。 – Guru