我正在开始一个游戏项目,这是我的第一个项目,它将类似于文明克隆,并且重点放在战争上。我一直使用C#开发业务应用程序(主要是Web应用程序),因此我对如何构建地图定位系统的设计有疑问。
我希望每个单位都知道自己的位置,并且地图知道每个点上的所有单位,这是双向关系,但我不知道最好的建模方式!如果您能提供一些想法和伪代码,我会很感激!
谢谢。
我希望每个单位都知道自己的位置,并且地图知道每个点上的所有单位,这是双向关系,但我不知道最好的建模方式!如果您能提供一些想法和伪代码,我会很感激!
谢谢。
public class MapObjects
{
private Collection<GamePiece> gamePieces;
}
public class GamePiece
{
private MapCoordinate mapCoordinate;
// Other items relevant to a GamePiece.. Health, ItemType, etc
}
public class MapObjects
{
public Collection<GamePiece> GamePiecesAtLocation(MapCoordinate mapCoordinate)
{
// Iterate through gamePieces collection and build a result
// collection of items at specified coordinates.
}
}
祝你好运,听起来是一个充满挑战的有趣项目。
好的设计等于简单的设计。
将地图制作成对象列表。
Object
int X { get; set; }
int Y { get; set; }
Map
List<Object> objects
Add(Object)
Remove(Object)
GetAt(X, Y)
GetInBox(X,Y,Width,Height)
GetInRadius(X,Y,Radius)
这应该是你所需要的全部。如果 Get(..) 查询变得过慢,可以添加缓存或将地图分成区块,并为每个区块保留对象列表,并在它们移动时更新它。如果你有许多静态对象或物体不会太快地从一个区块到另一个区块移动,这将有助于显着提高性能。我猜在回合制游戏中,你根本不需要进行优化。
NSPoint在这种情况下非常有用。每个游戏对象都应该有自己的位置。你可以将这些游戏对象存储在数组中,一个数组为每个玩家,一个数组为整个游戏,这取决于你。
我要警告你,这是一个非常庞大的项目,不仅是代码方面,而且是内容方面,需要大量的反复工作来平衡游戏。在尝试这个项目之前,你应该真正尝试一些较小的游戏。没有什么能阻止你开始,但如果你的第一个游戏是如此庞大的话,你会遇到很多障碍并写出一些严重的混乱代码。我建议从像跳棋这样的东西开始,以掌握回合制的基本概念。
这一切都来自于目前正在编写他的第一个游戏项目——地牢游戏的人。在我的辩护中,它相对简单,但有很多事情我没有预料到,即使是计算视野/战争迷雾考虑到障碍物也使用了复杂的算法。我不后悔选择地牢游戏作为我的第一个游戏,但在看到即使是最基本的概念实现起来也很复杂之后,像回合制策略游戏这样的东西对我来说只是留给专业人士。
如果你目前正在苦恼如何不仅创建单位,而且还要表示地图和存储位置,那么当编写研究、城市、生产、资源收集、随机地图生成器、轨迹计算、命中概率、装甲、机动性、视野范围、随机事件、人工智能等代码时,你该怎么办呢?
我并不是要打击你的梦想,只是提醒你选择的游戏类型比看起来更加复杂。你的大脑会超负荷而爆裂开来。(我可以继续押韵,但我会忍住不说,提醒你应该先尝试一些像跳棋这样的简单游戏。)