0

我对 C++ 编码相当陌生,我正在为我正在开发的文本 RPG 开发菜单系统。您可以查看您的统计数据、查看您的库存、查看项目统计数据和丢弃项目。然而,在物品被丢弃后,被丢弃的物品所在的插槽仍然是空的,在游戏中,丢弃对象 2 是没有意义的,然后对象 3 仍然是对象 3。对象 3 应该变成 2。所以我想知道如何用我当前的代码做到这一点。

#include <iostream>
#include <string>
using namespace std;

bool running = 1;

void titleFunc();
void newGameFunc();
void menuFuncNav();
void menuFuncInfo();
void menuFuncItems();
string itemNames[] = {"Iron Short Sword", "Iron Long Sword", "Iron Two-Handed Sword", "Iron War Hammer", "Iron Mace", "Iron Dagger", "Wooden Staff", "Wooden Shield", "Oak Shortbow", "Oak Longbow", "Oak Crossbow", "Hard Leather Chest-Piece", "Hard Leather Leggings", "Soft Leather Chest-Piece", "Soft Leather Leggings", "Cloak"};
short playerItemCount = 0;
int userInput = 0;
int talkInput = 0;
int playerInfo[3];
int playerLocation = 0;
const int MAX_ITEMS = 100;
int playerItems[MAX_ITEMS][11];




void menuFuncItems()
{
    int i = 0;
    for( int i = 0; i < playerItemCount; i++ )
    {
        cout << i+1 << ": "; 
        cout << itemNames[playerItems[i][0]]; 
        cout << endl;
    }
    cin >> i;
    if( playerItems[i - 1][1] == 1 )
    {
        cout << "Press 1 to view stats." << endl;
        cout << "Press 2 to equip." << endl;
        cout << "Press 3 to discard." << endl;
        cin >> userInput;
        cout << endl;

        if( userInput == 1 )
        {
            cout << "Name: " << itemNames[playerItems[i - 1][0]] << endl;
            cout << "Physical Attack:" << playerItems[i - 1][2] << endl;
        }
        else if( userInput == 2 )
        {

        }
        else
        {   
            playerItems[i - 1][0]--;
            playerItems[i - 1][0]--;



            cout << "Item discarded." << endl;
        }
    }

所以在这段代码中,玩家丢弃了第一个库存槽中的物品。

  1. 铁长剑
  2. 木盾
  3. 硬皮胸甲
  4. 硬皮打底裤

丢弃第 1 项后应该变成:

  1. 木盾
  2. 硬皮胸甲
  3. 硬皮打底裤

对不起,如果我在帖子中做错了什么。这是我在这个网站上的第一篇文章。:) 谢谢。

4

2 回答 2

0

例如,您可以执行以下操作

for ( int ( *p )[11] = playerItems + i; p != playerItems + playerItemCount; ++p )
{
    std::copy( *p, *p + 11, *( p - 1 ) );
}
--playerItemCount;
于 2013-10-29T21:35:33.907 回答
0

如果你更换

int playerItems[MAX_ITEMS][11];

std::vector<int> playerItems; // assuming you store all the items for a given player here

或者

std::vector<std::vector<int>> playerItems;  // if you want the 2D array for whatever implementation you have

然后擦除一个元素就像调用一样简单playerItems.erase(it);(其中it一个迭代器“指向”您要删除的元素。

或者,如果您想要更快的插入/删除(但更慢的随机访问),您可以使用std::list. 如果您真的想玩得开心,可以将它们存储在以std::map项目名称为键的a中(而不是使用索引来对另一个数组中的项目名称字符串进行索引)。

于 2013-10-29T21:52:05.333 回答