la scorsa settimana ho lavorato su un sistema di inventario con Unity3D. All'inizio ho ricevuto aiuto dai ragazzi di Design3, ma non è passato molto tempo prima che ci dividessimo il percorso, perché non mi piaceva davvero il modo in cui avevano scritto il loro codice, non aveva alcun odore di OOP.
Ho fatto ulteriori passi avanti: gli oggetti occupano più di uno slot, il sistema di posizionamento avanzato (gli articoli fanno del loro meglio per trovare la migliore aderenza ravvicinata), il sistema locale del mouse (il mouse rimane intrappolato nell'area attiva della borsa), ecc.
Ecco una demo del mio lavoro.
Ciò che vorremmo avere nel nostro gioco è una funzione di auto-organizzazione, non di auto-ordinamento. Vogliamo questa funzione perché il nostro inventario sarà in "tempo reale" - non come in Resident Evil 1,2,3 ecc., Dove metterebbe in pausa il gioco e fare cose nel tuo inventario. Ora immagina te stesso in una situazione appiccicosa circondata da zombi e non hai proiettili, ti guardi intorno, vedi che ci sono proiettili nelle vicinanze per terra, quindi vai per loro e provi a raccoglierli, ma loro non lo fanno in forma! guardi il tuo inventario e scopri che se riorganizzi alcuni degli articoli, andrà bene! - ora il giocatore - in quella situazione non ha il tempo di riorganizzarsi perché è circondato da zombi e morirà se si ferma e organizza l'inventario per fare spazio (ricorda l'inventario in tempo reale, nessuna pausa) - sarebbe bello che ciò accada automaticamente? - Sì!
(Credo che questo sia stato implementato in alcuni giochi come l'assedio di Dungeon o qualcosa del genere, quindi sicuramente è fattibile)
dai un'occhiata a questa immagine per esempio:
Sì, quindi se ordinate automaticamente il problema otterrete i vostri spazi ma è un male perché: 1- Costoso: non ha bisogno di un'operazione di ordinamento completa per liberare quegli spazi, nella prima foto, basta scorrere l'elemento rosso sul in basso a sinistra, e ottieni gli stessi spazi che hai ottenuto dall'ordinamento automatico. 2- È fastidioso per il giocatore: "Chi ti ha detto di riordinare le mie cose?"
Non sto chiedendo "Come scrivere il codice" per questo, sto solo chiedendo una guida, dove cercare, quali algoritmi sono coinvolti? È qualcosa correlato ai grafici e agli elementi del percorso più breve? Spero di no perché non sono riuscito a continuare i miei studi universitari: / Ma anche se lo è, dimmelo e imparerò le cose relative.
Si noti che potrebbe esserci più di una soluzione. Quindi immagino che la prima cosa che devo fare sia capire se la situazione è "risolvibile" - se so come determinare se una situazione è risolvibile o meno, allora posso "risolverla". Devo solo conoscere le condizioni che lo rendono "risolvibile". E credo che ci debba essere qualche algoritmo / struttura dati per questo.
Ecco una foto per più di una soluzione nel tentativo di adattare un elemento 1x3:
Le frecce mostrano solo una delle soluzioni, ma se guardi ne troverai più di una. Questo è ciò che alla fine non eseguo l'ordinamento automatico, ma trovo una soluzione e l'applicazione.
Nota che se ci trascorro del tempo, mi verrà in mente un modo per risolverlo, ma non sarebbe il modo migliore, è come tenere una ruota dell'auto con i piedi invece delle mani! XD O semplicemente come cercare di risolvere un problema che richiede array, ma non sei ancora a conoscenza della loro esistenza! Quindi qual è l'approccio giusto a questo?
Aggiornamenti dal commento
@Stephen Non sono davvero un guru in Alogs, hai menzionato 'zaino' e @BlueRaja - Danny Pflughoeft ha menzionato un algoritmo di imballaggio bidone 2D. Sono in qualche modo correlati / uguali? - Sono ancora confuso su come dovrei affrontarlo.
E sì, sto già usando un "euristico" ma non sapevo davvero di essere: D trova il primo slot disponibile e controlla se l'oggetto si adatta.
Non so se ordinare gli articoli in base alla loro "voluminosità" (che chiamo nSlotsRequired = nRowsReq * nColsRec) funzionerebbe, perché ad esempio hai articoli 2x2 e 1x4, hanno la stessa voluminosità, ma forme diverse e avranno un effetto diverso su come andranno le altre voci successive. COSÌ... :/
Ho visto questo video, mi è piaciuta molto l'idea di imballaggio completo, ma mi chiedo come procedere poiché l'inventario è in 2D. Non sono nemmeno sicuro che l'imballaggio del cestino sia la chiave qui perché, beh, è vero che posso avere più di una borsa, ma nel nostro gioco sarà solo una borsa. Quindi, si tratta di inserire gli articoli in una "borsa" e non di più. Quindi gli esempi in quel video (i tubi e gli autobus) non corrispondono davvero al mio problema. Ho anche visto alcune cose su questa cosa dello zaino, non ho visto come il "valore" sia correlato ai miei articoli / inventario, ma immagino che il "peso" sia lo stesso della voluminosità, non ne sono sicuro.