Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Pelaajan omistamat oliot? Esimerkkinä ostoskori

iksu [10.07.2010 00:37:46]

#

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 :)

Lahha [10.07.2010 00:46:35]

#

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.

Macro [10.07.2010 12:54:46]

#

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).

User137 [10.07.2010 13:38:18]

#

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ä?

Metabolix [10.07.2010 13:58:57]

#

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).

Mazzimo [10.07.2010 19:21:59]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta