Haen tässä mielipiteitä omien ajatusten tueksi, miten seuraavanlainen homma kannattaisi toteuttaa. Pahoittelut mahdollisesta epäselvästä otsikoinnista.
Pelissä on esim hedelmiä, joilla on eri arvoja. Esim hinta,nimi,laatu,väri jne.
Pelaaja haluaa ostaa banaanin. Tällöin hänen rahoistaan vähennetään banaanin hinnan verran ja bansku siirtyy pelaajan omistukseen. Miten tuo omistus, eli tässä tapauksessa esim ostoskori kannattaa toteuttaa?
Jonkinmoisen mietinnän jälkeen, alottelija kun tässä touhussa olen, päädyin seuraavaan ajatukseen.
Hedelmät kannattanee toteuttaa luokkana, se tuskin on hirveän väärin veikattu?
Hedelmällä voisi olla myös arvo "korissa" true tai false.
Sen jälkeen ajattelin, että loisin valmiiksi kolmen olion taulukon. Eli tässä tapauksessa ostoskoriin menee max 3 tuotetta. Kun tuote ostetaan, niin esim. ostoskori[0] -kohdan tiedot muutetaan ja samalla tuo "omistuksessa" arvo muutetaan trueksi.
Sitten olisi vielä erikseen toiminto, joka kävisi läpi ostoskorin sisällön. Mikäli esim ostoskori[0] ilmoittaisi "omistuksessa" truen, niin se tulostettaisiin, muussa tapauksessa ei.
Onko tuon tyyliseen toteutukseen jotain järkevämpää lähestymistapaa? Ostoskorin tietty voisi luoda vektorilla, jolloin sen kokoa voisi myöhemmin muuttaa. Eli esim nykyinen max kolmen tuotteen kori olisikin max 5 tuotteen kori jne...?
Sekava selitys, mutta toivottavasti idea aukeaa :)
Tietysti kannattaa tehdä dynaaminen ostokori johon voi lisäillä ja poistaa tavaroita miten huvittaa.
Ostokorista kanssa luokka jossa on lisäys, poisto ja muut tarvittavat metodit.
Jos samaa tuotetta voi olla monta, niin tuo true-false -systeemi ei toimi. Silloin joudut tekemään toisen taulukon (tms.), johon säilöt tuotteiden määrän. Voit ratkaista sen helpommin: Korvaat falsen nollalla (0) ja truen tuotteiden määrällä. 0 käsitellään falsena ja muut numeroarvot true:na (Ainakin kielissä, joita käytän).
Sinulla voi olla oma taulukko (lista) tuotteista joita voi ostaa. Tuo lista koostuu luokan olioista jotka kuvaa eri hedelmät ja tavarat, arvoilla jotka luettelit alussa.
Sen jälkeen ostoskori on myös lista, mutta näiden luokka sisältää vain viittauksen tuohon tuotelistaan ja määrän montako ostetaan. Jos voi ostaa vain yhden niin pelkkä viittaus tai indeksi riittää.
lainaus:
Ostoskorin tietty voisi luoda vektorilla, jolloin sen kokoa voisi myöhemmin muuttaa.
Eikö vektorin koko muutu samantien kun siihen vaan lisää/poistaa objekteja, ilman että sen kokoa tarvitsisi ennalta määrätä?
Minusta tuo omistuksessa-merkintä on turha, koska eikö sama asia selviä suoraan siitä, onko olio ostoskorissa vai muualla? Tietorakenteeksi tuollaisessa runsaasti lisäyksiä ja poistoja käsittävässä tapauksessa suosittelen mieluummin linkitettyä listaa (std::list).
Riippuen toteutuksesta myös std::map saattaisi käydä. Mikäli pidät hedelmiä jossain tallessa ns. master-oliona, voi niihin viitata osoittimien avulla: std::map<Hedelma*, int>, jossa avaimena toimii masterhedelmä-olion osoitin ja arvona pelaajalla olevien hedelmien lukumäärä. Mutta tämä toteutus siis vaatii, että jokaista hedelmätyyppiä on vain yksi varsinainen olio, johon viitataan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.