Think about themHow do you find the efficiency of algorithms?thoughts on inventory management
what I would do is give each item a unique ID and then store the player inventory as a list of item IDs.DATA "ID","Name","TYPE","Property1","Property2",...and then copy them all into an information array and use VAL() when appropriate. Strings are really convenient for dynamic sizing, and in the case of a string I would maybe just write CHR$(QTY)+CHR$(ID) for every item. With clever ID assignment and a maximum quantity, you could even use INSTR to search for items by ID this way. But while convenient, pretty much every operation on this is O(n). Another option is to have contiguous item IDs, from 0 to LAST_ITEM, and statically allocate two arraysDIM INVENTORY_QTY[LAST_ITEM+1] DIM INVENTORY_LST[LAST_ITEM+1] VAR INV_HEAD = 0 DEF INV_ADD ID QTY = INVENTORY_QTY[ID] IF !QTY THEN INVENTORY_LST[INV_HEAD] = ID INC INV_HEAD INC INVENTORY_QTY[ID] ELSE INC INVENTORY_QTY[ID] ENDIF END DEF INV_SUB(ID) QTY = INVENTORY_QTY[ID] IF QTY <= 0 THEN RETURN FALSE ELSEIF QTY == 1 THEN DEC INVENTORY_QTY[ID] VAR I% = INV_HEAD - 1 WHILE INVENTORY_LST[I%] != ID && I% > 0 DEC I% WEND INVENTORY_LST[I%] = INVENTORY_LST[INV_HEAD-1] DEC INV_HEAD ELSE DEC INVENTORY_QTY[ID] ENDIF RETURN TRUE ENDThen displaying inventory just involves enumerating INVENTORY_LST to INV_HEAD, remove is worst case O(n), but much lighter everything else is like O(1) or something. Completely untested.
item data?
zagg2000Created:
Grab them and brutally ask them what's their efficiency until they spit it out crying for their lifeHow do you find the efficiency of algorithms?thoughts on inventory management
what I would do is give each item a unique ID and then store the player inventory as a list of item IDs.DATA "ID","Name","TYPE","Property1","Property2",...and then copy them all into an information array and use VAL() when appropriate. Strings are really convenient for dynamic sizing, and in the case of a string I would maybe just write CHR$(QTY)+CHR$(ID) for every item. With clever ID assignment and a maximum quantity, you could even use INSTR to search for items by ID this way. But while convenient, pretty much every operation on this is O(n). Another option is to have contiguous item IDs, from 0 to LAST_ITEM, and statically allocate two arraysDIM INVENTORY_QTY[LAST_ITEM+1] DIM INVENTORY_LST[LAST_ITEM+1] VAR INV_HEAD = 0 DEF INV_ADD ID QTY = INVENTORY_QTY[ID] IF !QTY THEN INVENTORY_LST[INV_HEAD] = ID INC INV_HEAD INC INVENTORY_QTY[ID] ELSE INC INVENTORY_QTY[ID] ENDIF END DEF INV_SUB(ID) QTY = INVENTORY_QTY[ID] IF QTY <= 0 THEN RETURN FALSE ELSEIF QTY == 1 THEN DEC INVENTORY_QTY[ID] VAR I% = INV_HEAD - 1 WHILE INVENTORY_LST[I%] != ID && I% > 0 DEC I% WEND INVENTORY_LST[I%] = INVENTORY_LST[INV_HEAD-1] DEC INV_HEAD ELSE DEC INVENTORY_QTY[ID] ENDIF RETURN TRUE ENDThen displaying inventory just involves enumerating INVENTORY_LST to INV_HEAD, remove is worst case O(n), but much lighter everything else is like O(1) or something. Completely untested.