什么样的编码理念/抽象/程序设计结构可以使游戏同时(单独)与2D和3D图形一起使用,而无需重新编码游戏逻辑?
我们正在讨论采用相同的代码,更改最少的内容(例如,将2D资产的文件名与3D资产的文件名交换),并可能为每个泛型/模板插入一些基类的专业化知识。
将其置于有意义的真实环境中:想象一个局域网多人游戏,其中有一个一流的,渴望性能的3D客户端,为玩家提供了一些非常好的游戏装备,而一个较不起眼的2D客户端有人在阁楼上发现的满是灰尘的盒子。但这仍然是同一游戏-记录了相同的事件(有人捡了一个硬币),使用了相同的网络协议,世界成比例,等等。
将其置于MVC上下文中:控制器完全相同(按“向上”键会将玩家加速设置为3.5单位/秒),视图完全不同(2D与3D),并且模型相同除了与图形直接相关的所有内容外(每5秒钟对环境进行一次碰撞检查,并且使用相同的算法。请注意,这意味着2D版本中的所有游戏对象都有一个Z坐标,但是只是被忽略或以其他方式显示给用户,例如,当播放器处于空中时,阴影会显示在最左端)。
之所以使这个主题如此吸引人,是因为它将迫使开发人员对他的数据的结构以及控件的流动方式有一个非常清晰的认识。请注意,这并不意味着使用诸如SDL,D3DX或OpenGL之类的图形库以外的任何东西。没有游戏引擎!
由于这是一个主要的理论问题,因此我将省略编程语言,但是如果您要举一个例子,则可以使用任何喜欢的语言,如果想全力以赴,则可以使用C ++;如果您愿意,可以使用Brainfuck。应对挑战(任何具体的答案以及任何抽象的答案都将受到赞赏!)。