首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建不同游戏模式和设置的游戏,如何处理所有不同的设置?

创建不同游戏模式和设置的游戏,如何处理所有不同的设置?
EN

Stack Overflow用户
提问于 2015-04-26 13:12:41
回答 1查看 843关注 0票数 0

我正在创建一个游戏,在这个游戏中,您可以与计算机或具有多个(高级)设置的人一起玩,当添加新设置时,可能的游戏种类很快就会变大。

我想编写干净的代码和,我面临的问题是,我需要为所有可能的可选/相互排他性选项编写大量“不必要的”检查。没有必要,因为当游戏是用特定的设置创建时,它可能已经知道它的选项,因此哪些检查是多余的。我看不出有什么理由继续检查,例如游戏中是否只有电脑、人或两者兼而有之。

我知道Builder-pattern可以解决将许多参数传递给构造函数的问题,其中许多参数是可选的。当我创建一个游戏时,我可以使用这个。这解决了很难构建游戏的问题。但是,这仍然需要在游戏运行期间进行大量检查,以查看设置了哪些设置,哪些没有设置。

有什么线索让我调查吗?

代码示例(仅说明)

代码语言:javascript
复制
    Mode mode;
    Vocabulary mVocabulary;
    Player[] mPlayers;
    GameLog mGameLog;
    String mCurrentString;
    int mMinimalWordLength = 3;
    int mIndexActivePlayer;
    int mNumberOfActivePlayers;
    boolean mComputers; //[Optional]
    int mNumberOfComputers; //[Required if mComputer is true]
    Difficulty mDifficulty; //[Required if mComputer is true]

    //One of these optionals are required
    boolean mBlueTooth; //[Optional]
    boolean online; //[Optional]
    boolean sameDevice; //[Optional]

    //Here I could use the builder pattern to set all the options
    public Game(Vocabulary vocabulary, int numberOfPlayers, int minimalWordLength, Player[] players) {
        this.mVocabulary = vocabulary;
        this.mMinimalWordLength = minimalWordLength;
        this.numberOfActivePlayers = numberOfPlayers;
        this.mPlayers = players;
    }
}

我正在创建一个游戏,需要一个mVocabulary的文字,一个列表的球员mPlayers和一些可选的设置。每个游戏要么是为计算机或人类创建的,要么是两者兼而有之。每个游戏要么是online,要么通过blue-toot,要么在sameDevice上。

基于这些选项,在整个代码中会发生不同的事情,因此您可以在下面的每个方法中编写一些if else if语句。不过,我想防止这种情况发生。

如果您将您的程序视为一个决策树,其中您在程序中的某个特定时间处于其中,那么您就会知道,一旦以特定的方式创建了一个游戏,您应该在哪里查看,而不应该在哪里查看。,因为您位于树的特定分支中。例如,你创建一个只有人类的游戏,一件奇怪的事情就是不断检查每个回合,如果你知道只有人类玩家,那么你就会继续检查每一个回合,因为这是你最初创建游戏的方式。

我希望这能使我的观点更清楚。虽然没有编写完整的代码示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-26 13:26:04

不确定这是否是最好的方法,但是我通过子类和实现‘钩子’方法来避免太多的检查(实际上,这是我从Rails钩子那里借用的想法)。

例如,假设您有一个ParentGame类以及BlueToothGameOnlineGameSameDeviceGame子类。您可以在ParentGame中实现所有公共逻辑,例如。

代码语言:javascript
复制
public void mainLoop() {
    startOfMainLoop();
    // Some stuff
    checkWinLoseCondition();
}

其中startOfMainLoopcheckWinLoseCondition()可以是要在子类上实现的抽象方法。通过这种方式,您可以封装公共逻辑,并为每个“游戏的种类/配置”实现特定的行为,而不需要对您的主要游戏逻辑进行大量的检查。

当然,最好的方法取决于您当前的场景:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29878081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档