- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题背景
我正在开发一款类似战舰的基本衍生游戏,我希望随着时间的推移继续使用 C++ 添加功能(无图形)。目前我有一个 50 x 75 的游戏板,用当前类型为 char 的 2D vector (称为 GameBoard)表示。我创建了一个游戏板并用“.”设置了每个位置。字符。当您猜测坐标时,之前猜测的位置标有“-”,命中标有“X”
我在程序方面的进展情况
我决定修改游戏以启用更多功能。我并没有走得太远,但是用伪代码勾勒出一个设计开始让我更多地思考如何才能进行这次升级。
我正在创建一个名为 Block 的类,而不是 GameBoard(棋盘上的空白区域),它现在有一个 x 和 y 坐标变量,以及一个 char 变量以直观地显示正确的 char。 Block 能够容纳对象“Feature”,它分解为“feature”的派生类。您可以滚动到最底部以了解有关这些类的更多详细信息。
我的类层次结构树是这样的:
feature
item vehicle
gold nuke plane
我需要什么帮助
我基本上已经为我想做的事情设置了大纲/结构。现在我只需要一些帮助来启动它,让一切都连接起来。我很难确定何时以及如何使用指针。
A.) 我应该更改 GameBoard 以保存 Block 类的指针吗?还是实际的Block 对象?- Block 会保存指向Feature 或实际Feature 对象的指针吗?
B.) 如何添加可以为空或给定值的 Feature 变量?我只是将它设置为 NULL 吗?
C.) 我是否需要自定义复制构造函数来交换 Block 的 Feature 值?
D.) 如果玩家使用 Feature 对象,我该如何从 Block 中移除它?
E.) 偶尔在一个 block 上可以有超过1个特征吗?
F.) 我如何声明Block 和Feature 类以便Block 可以包含Feature并且 Feature 已经派生自另一个类(不包含在本文中)。
关于我的类(class)的额外细节
因此 GameBoard 是存储 block 的 vector 。 block 本质上是板上的各个空间。 Block 包含其位置的坐标、表示它的字符以及包含 Feature 对象的可能性,但大多数情况下 Block 不会包含要素. Feature 源自 Block,在游戏中充当奖励。因此,Feature 分支为另外 2 个派生类,一个 Item Feature 或 Vehicle。等等。
当玩家选择坐标时,一个方法将转到 GameBoard 上/中的那个 Block,并首先检查 char 值是否表示以前未使用过的有效空间。然后它检查此 block 的内容以查找功能。 Feature 可能为空或包含派生的 Feature 对象。
好的,我的小说到此结束。抱歉写了这么多。我认为获得帮助的最佳方式是让帮助者知道发生了什么。请不要回应告诉我“切入正题”。我知道我知道.. 如果我遗漏了细节,请告诉我。谢谢!
最佳答案
我假设您想保留您的类(class)结构。在您的抽象点上,我建议通过(C++11 或 Boost)使用共享指针和唯一指针。如果您不擅长指针,请了解 uniqe 和共享指针的工作原理并尝试坚持使用它们。请记住尽可能缩短对象的生命周期。
A.) Should I change GameBoard to hold pointers of the Block class? Or actual Block objects? And would Block hold a pointer to a Feature or the actual Feature object?
我想将此 GameBoard 元素保留为不可变的唯一指针或保留实际实例。
B.) How do I add a Feature variable that can be empty or given a value? Do I just set it to NULL?
您已决定将 Feature 保留在 Block 中 - 好的。如果是这样,请将其保留为共享指针。如果没有特征共享指针将为空。
C.) Do I need a custom copy constructor to swap the Feature value of Block?
仅当 Feature 中有一些动态/不寻常的东西时。该功能将包含什么?
D.) How do I go about removing the Feature object from Block if the player uses it?
如果您使用共享指针,则没有问题。即使 Feature 在处理之前的 Feature 期间发生了变化,Feature 也会被正确处理并在 GameBoard 不再需要时销毁。
E.) Can there be more than 1 Feature on a single Block occasionally?
您必须问自己这个问题 - 您的游戏是否需要处理这种情况?如果是这样,只需保存指向特征的共享指针的 vector/ map /设置/数组(取决于您的要求)。
F.) How do I declare the Block and Feature classes such that Block can hold a Feature and Feature is already derived from another class (not included in this post).
我不确定我是否理解正确:
class Feature : public GameElement {
/* Feature implementation */
}
class Block {
shared_ptr<Feature> mFeature;
/* Block implementation */
};
它是否回答了您的问题?
关于c++ - 类对象还是指向它们对象的指针?类对象组合与实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15823942/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!