Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;初学者游戏编程:跟踪对象、清单、不同AMNT对象/字符数组等_C++ - Fatal编程技术网

C++ C++;初学者游戏编程:跟踪对象、清单、不同AMNT对象/字符数组等

C++ C++;初学者游戏编程:跟踪对象、清单、不同AMNT对象/字符数组等,c++,C++,我只是在玩一个旧的SNES RPG(魔法的秘密,如果有人在乎的话),我想知道一些关于游戏编程的一般事情 很抱歉,我提出了一些脑死的问题,我真的是个初学者 这些问题相当普遍,但使用SNES风格的RPG作为“模板”,了解我的意思: 游戏如何跟踪其“世界”中的所有对象、触发事件等?例如,它如何跟踪哪些宝箱已经打开,哪些门已经锁上,哪些故事事件已经触发 它是否基本上创建了一个元素数组,每个元素对应一个箱子/门/事件/等,并在打开/触发时“标记”每个元素(将其值从0更改为1)?如果有多种方法,它们是什么

我只是在玩一个旧的SNES RPG(魔法的秘密,如果有人在乎的话),我想知道一些关于游戏编程的一般事情

很抱歉,我提出了一些脑死的问题,我真的是个初学者

这些问题相当普遍,但使用SNES风格的RPG作为“模板”,了解我的意思:

  • 游戏如何跟踪其“世界”中的所有对象、触发事件等?例如,它如何跟踪哪些宝箱已经打开,哪些门已经锁上,哪些故事事件已经触发

    它是否基本上创建了一个元素数组,每个元素对应一个箱子/门/事件/等,并在打开/触发时“标记”每个元素(将其值从0更改为1)?如果有多种方法,它们是什么

  • 如何处理“变量列表”?例如,如果你有一个游戏,你可以有一个巨大的库存的对象(即:盔甲,剑),并有X的每个对象,这是如何做到的

    我猜:有一个结构,它有一个大数组,每个可能的对象都有一个点(一个X整数数组,其中X是可能拥有的对象的数量),其中每个元素的值表示该对象的数量,然后每个对象都有一个巨大的枚举,这样一个对象就匹配到相应的索引,并访问它,比如:numberofswarks=inventory[swarks],其中swarks是枚举的一部分,并且有一些整数与之关联。我离这里有多近

  • 如果对象的数量可能不同,情况如何?也就是说,如果我有一个游戏,我在屏幕上有一些敌人,他们可以在任何时候被杀死/产生新的敌人,在我看来,我需要一系列“敌人”对象来循环和处理,但元素的数量在任何时候都会有所不同。通常的做法是什么?链表


  • 非常感谢您的帮助/提示/指点。

    基本上,您的答案离您的答案不远,事情可以按照您提到的方式进行。然而,空间和处理能力可以发挥作用,因此,您可能希望将其缩小为打开和关闭的位,并使用逐位运算符进行掩蔽,以查看您在故事情节中的位置,或者是否显示您所在的宝箱,而不是一系列的布尔值来跟踪您在事件链中的位置或距离即将显示为打开或关闭

    对于库存,与其跟踪玩家拥有的每件物品的数量,不如为玩家能够获得的每件物品都设置一个基本物品;武器、盔甲甚至金钱。然后,您可以制作一个仅包含玩家拥有的物品的链接列表。使用您提到的项目枚举,然后使用该项目的数量。这将允许对事物进行排序,并且只在内存中保存玩家角色实际拥有的物品。您可以扩展此数据结构,以跟踪是否装备了该项。您可能会在items表中保留更通用的项所做的事情排序信息

    敌人可能会更复杂一些,因为你需要对他们做更多的事情。不过,这里的链接列表仍然可能是您的最佳选择。通过这种方式,从列表中移除一个对象会稍微容易一些(当玩家杀死他们或在列表中任何需要的地方添加一个新的敌人时,可以简单地移除链接等)

    老实说,没有一个答案,这取决于很多事情。最好的办法就是简单地尝试一下。。对于一个简单的“如果我这样做是为了这个怎么办”来说,它真的不需要花那么长的时间来给它一个旋转,看看你能走多远。如果你开始遇到问题,你可以开始考虑其他选项:

    希望这有帮助


    编辑:只想添加到www.codesampler.com的链接。一般来说,更多的是面向DirectX的教程网站,但作为初学者,它可以让你开始思考,或者给你一系列的起点。作为一个额外的好处,许多DirectX SDK示例/示例的格式与本网站教程的格式非常相似。可以帮助你轻松了解整件事。

    除了James的精彩帖子外,还有一些关键词供你在谷歌上搜索

    • 数据结构
      • 链表
      • 双链表
      • 排队
    动态内存管理理论

    另外,让我分享我的标准推荐链接,供在基本c++上寻求帮助的人使用:


    对于初学者来说,这是一个相当高级的问题

    我想用SILO的回应来回应你在学习这个问题之前应该学习C++语言基础。 为了给您一个起点,您应该了解容器类(链表、向量、哈希表/字典、队列等)及其工作方式。因为标准模板库(STL)是相当标准化的,所以对于初学者来说,这将是一个很好的起点

    您还应该了解继承以及如何构建类的层次结构

    例如,您在角色扮演游戏中询问了有关库存的问题: 首先,我将定义一个InventoryItem类,该类定义或设置一个接口,用于项目参与库存系统所需的所有代码。 比如:

    class InventoryItem { private: std::string description; // A description of the item bool inInventory; // True if in the players inventory, false if on the ground etc... int weight; // How much the item weighs int size; // How much space the item takes in inventory // etc... }; 类目录项 { 私人: std::string description;//项的描述 bool inInventory;//如果在玩家清单中为True,如果在地面上为false等。。。 int-weight;//物品的重量 int size;//项目在库存中占用的空间大小 //等等。。。 }; 在InventoryItem类中,还需要定义将InventoryItem放置在所选容器类中所需的成员函数和数据

    同样的情况也适用于触发物品、地面物品等