首页 \ 问答 \ 建模游戏难度(Modelling Game Difficulty)

建模游戏难度(Modelling Game Difficulty)

我想知道我的游戏建模难度水平是否合适。

public abstract class AbstractDifficulty {

    public AbstractDifficulty() {

    }

    public abstract int enemyWaves();
    public abstract int enemiesInWave();
    public abstract long enemyWaveIntervalMilis();
}

然后是几个实现这些方法的子类。

public class EasyDifficulty extends AbstractDifficulty {

    @Override
    public int enemyWaves() {
        return 1;
    }

    @Override
    public int enemiesInWave() {
        return 10;
    }

    @Override
    public long enemyWaveIntervalMilis() {
        return 500;
    }
}

我想知道是否有更简单的方法可以做到这一点,但同样简单易用。

编辑:有人可以如此友善地向我解释为什么这个问题得到减去选票。 这段代码或我的解释有问题吗? 谢谢。


I wonder if my aproach into modelling difficulty level for my game is good.

public abstract class AbstractDifficulty {

    public AbstractDifficulty() {

    }

    public abstract int enemyWaves();
    public abstract int enemiesInWave();
    public abstract long enemyWaveIntervalMilis();
}

And then several subclasses which implement those methods, for example.

public class EasyDifficulty extends AbstractDifficulty {

    @Override
    public int enemyWaves() {
        return 1;
    }

    @Override
    public int enemiesInWave() {
        return 10;
    }

    @Override
    public long enemyWaveIntervalMilis() {
        return 500;
    }
}

I wonder if there is a simpler way to do this, but the same easy and clean to use as this.

Edit: Could someone be so kind to explain to me why this question got minus votes. Is something wrong with this code, or my explanation ? Thanks.


原文:https://stackoverflow.com/questions/29122229
更新时间:2019-06-23 01:16

最满意答案

您的设计将完成这项工作,但您希望拥有的是容器类 。 因此,为每个值设置一个方法,有一个带有值的(最终)字段和一个getter。 它们可以在构造函数中设置。

如果您的难度模式已知且很少,请考虑使用枚举 ,这是最终的并且更易于使用。

enum Difficulty {
    EASY(1, 10, 5000),
    MEDIUM(2, 15, 4000),
    HARD(4, 20, 3500);

    private final int enemyWaves;
    private final int enemiesInWave;
    private final long enemyWaveIntervalMilis;

    Difficulty(int enemyWaves, int enemiesInWave, long enemyWaveIntervalMilis ){
        this.enemyWaves = enemyWaves;
        this.enemiesInWave = enemiesInWave;
        this.enemyWaveIntervalMilis = enemyWaveIntervalMilis;
    }

    public int getEnemyWaves() {

        return enemyWaves;
    }
    public int getEnemiesInWave() {

        return enemiesInWave;
    }
    public long getEnemyWaveIntervalMilis() {

        return enemyWaveIntervalMilis;
    }

}

Your design will do the job, but it seems what you want to have is a container class. So instead having a method for each value, have a (final) field with the value and a getter. They can be set e.g. in the constructor.

If your difficulty modes are known and few, consider having an enum, which are final and easier to use.

enum Difficulty {
    EASY(1, 10, 5000),
    MEDIUM(2, 15, 4000),
    HARD(4, 20, 3500);

    private final int enemyWaves;
    private final int enemiesInWave;
    private final long enemyWaveIntervalMilis;

    Difficulty(int enemyWaves, int enemiesInWave, long enemyWaveIntervalMilis ){
        this.enemyWaves = enemyWaves;
        this.enemiesInWave = enemiesInWave;
        this.enemyWaveIntervalMilis = enemyWaveIntervalMilis;
    }

    public int getEnemyWaves() {

        return enemyWaves;
    }
    public int getEnemiesInWave() {

        return enemiesInWave;
    }
    public long getEnemyWaveIntervalMilis() {

        return enemyWaveIntervalMilis;
    }

}
2015-03-18

相关问答

更多

概念性难度c ++卡片组(Conceptual Difficulty c++ Deck of Cards)

好吧,拥有一个Card class或struct以及一个充当专用容器的DeckOfCards类是正确的方法(正如@Thomas的回答中所提到的): struct Card { enum Suit_Type { Diamonds, Hearts, Spades, Clubs, } suit; enum Value_Type { Two = 2, // <<<<<<<<< Note starts at 2 Three ...

谁有GAME开发教程?要免费的

这篇是挺实用的教程, 不过有些观点还是值得商榷 我觉得服务器定时器用计划任务调用脚本就可以实现,比如linux下用crontab定时执行某个php脚本,更新数据就可以。 研究所有点缺乏资料啊。讨论的问题怪怪的。只有很少是能用到的。 一、简单的程序框架。 webgame程序构成: 三大部分。 第一是数据流程。第二是程序。第三是美术。 其中,数据流程包括了功能。也只有在功能中才能体现数据流程。 数据流程相当的麻烦,后面再讨论。 比如最简单的卖买产品。 要实现这个功能。 那么需要有产品基础表、产品详细表 ...

Rust递归型难度(Rust recursive type difficulty)

你有一个乒乓球在这里,没有尽头。 调用TSW<E>::write_end<W>(&mut self, w : &mut W) 调用MCW<W, TSW<E>>::write_end_all(&mut self) 它调用TSW<E>::write_end<MCW<W, TCW<E>>>(&mut self, w: &mut ) 哪个叫...... 每个新级别的递归都会在新类型上堆积,这就是为什么错误消息中的类型如此之大。 rustc编译器,而不是进入无限循环,告诉你,你可能不想实例化无数个函数。 这 ...

OpenGL和游戏实体(OpenGL and Game Entities)

因此,如果我有N个实体,我有N个VAO / VBO? 在体面的游戏引擎中,如果你有几千个具有相同几何形状的物体(比如废弃的子弹或其他东西),那么只有一个装载到游戏引擎中的几何/网格实例(VAO / VBO /其他)。 该对象使用的对象和网格是两个不同的东西。 多个对象可以使用相同的网格实例。 我能否在渲染fn中使用glBegin / glEnd-style OpenGL以及VAO / VBO? 是的,尽管有些人坚持认为,因为OpenGL 3/4可用,您应该避免使用glBegin / glEnd和类 ...

游戏开发:你如何制作故事游戏?(Game Development: How do you make a story game?)

通常这些游戏使用一组标志来管理特定角色的行为并设置棋子。 这与有限状态机非常相似(通常直接等价),这是一个稍微更一般和更强大的解决问题的方法。 FSM追踪特定任务的“进度” - 所投入的开关,所进行的对话等等 每个NPC都有一个密码管理器来跟踪该NPC的信息状态 - 每个状态与游戏中NPC弧段内的特定阶段相关,通常以随机引用状态结束。 作为一个例子,保存的游戏可以跟踪游戏世界中每个对象的状态。 重要的部分是不仅要设计状态,还要设计转换,以便尽可能方便地连接。 Normally these game ...

Game Center身份验证在iOS 8中不起作用(Game Center authentication doesn't work in iOS 8)

在iOS8中也碰到了我 。 只需要在设置 - >游戏中心 - >沙盒中启用沙盒。 Happened to me as well in iOS8. Just need to enable Sandbox in Settings--> Game Center --> Sandbox.

你如何在Phaser游戏中旋转“玩家”?(How do you rotate the 'player' in a Phaser game?)

我无法正确理解你的问题,但我认为这段代码可能对你有帮助。你可以使用左右键来旋转汽车精灵和向上键来移动前言。 function preload(){ game.load.image('car', 'assets/sprites/car90.png'); } var car ; function create(){ game.physics.startSystem(Phaser.Physics.ARCADE); car = game.add.sprite(g ...

如何将WPF应用程序项目连接到Windows Game项目?(How to connect WPF Application project to Windows Game project?)

System.Diagnostics.Process.Start(@"c:\game\Game1.exe"); 尝试上面的路径。 更多信息: http : //msdn.microsoft.com/en-us/library/53ezey2s.aspx System.Diagnostics.Process.Start(@"c:\game\Game1.exe"); Try the above with your path. More here: http://msdn.microsoft.com ...

相关文章

更多

最新问答

更多
  • Android宽度:100%修复(网站接管问题)(Android width:100% fix (website takeover issue))
  • C ++函数/方法设计的良好实践(Good practice in C++ function/method design)
  • 计算其他表中不存在的所有记录 - SQL查询(Count all records that does not exist to other table - SQL Query)
  • 为什么我要用JPA共享ID?(Why do I get shared Ids with JPA?)
  • asp.net - 如何显示来自html格式的数据行的字段(asp.net - how to display a field from data row that is in html format)
  • 我们如何使用ActiveRecord从连接表中删除行?(How can we delete rows from a join table by using ActiveRecord?)
  • ng-class搞乱了类的顺序(ng-class messing with the order of classes)
  • oracle 12g无效数字错误(oracle 12g invalid number error)
  • 更改ng-src值onclick(Change ng-src value onclick)
  • 如何在android中自动添加自定义依赖项以创建新项目?(How to add custom dependencies automatically in android for ever a new project is created?)
  • datetime函数在PHP中(datetime function in php)
  • 在javascript中获取会话数组的值(in javascript get the value of a session array)
  • 如何在UTF8中编译LaTeX?(How can I compile LaTeX in UTF8? [closed])
  • Rspec:“array.should == another_array”,但不用担心订单(Rspec: “array.should == another_array” but without concern for order)
  • Logcat错误:无法在android片段中加载视图(Logcat error: unable to load view in android fragments)
  • JavaFX的。(JavaFX. Adding items to the list in different threads is not working)
  • 从GDATA日历资源迁移到Google Calendar Resource api(Migrate from GDATA calendar resource to Google Calendar Resource api)
  • SSRS 2008 - 以零情景处理分割(SSRS 2008 - Dealing with division by zero scenarios)
  • 我如何以编程方式添加一个listView列标题的点击事件(How can I add a listView column header a click event programmatically)
  • Wxpython:无法检索有关列表控件项XXX的信息(Wxpython: Couldn't retrieve information about list control item XXX)
  • 使用Tortoise SVN在SVN存储库中移动目录(Move Directory across SVN repository using Tortoise SVN)
  • 天蓝色服务结构集群中的web api无状态服务是否在一段时间不活动后进入休眠状态?(Do web api stateless services in azure service fabric cluster go to sleep after a period of inactivity?)
  • 我可以设置intelliJ来突出显示PHP编码风格吗?(Can I set intelliJ to highlight php coding style?)
  • 用javafx创建一个Truetype字体文件(Creating a Truetype Font file with javafx)
  • Spring ftp配置错误(Spring ftp configuration is wrong)
  • 使用gsub去除多个字符(Using gsub to strip multiple characters)
  • 续订推送证书并保持当前的App Store App正常工作(Renew Push certificate and keep current App Store App working)
  • js:ES5和ES6之间关于'this'关键字用法的一个令人困惑的观点(js: one confusing point about 'this' keyword usage between ES5 and ES6)
  • window.onload vs $(document).ready()(window.onload vs $(document).ready())
  • 在Swift中,如何声明一个符合一个或多个协议的特定类型的变量?(In Swift, how can I declare a variable of a specific type that conforms to one or more protocols?)