Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Muuttujan arvon muuttaminen kaavan mukaan

Sivun loppuun

Grey [28.05.2006 04:50:21]

#

Eli siis, minulla on eräässä koodausprojektissani pienoinen ongelma. Kyseessä on peli, johon olen rakentanut mainejärjestelmän, eli systeemin joka nousee ja laskee sen mukaan mitä pelaaja tekee. Ongelma on tullut sopivan kaavan keksimisissä, joka sopeutuisi mm. pelaajan nykyisen maineen mukaan.

Elikä jos pelaaja päättää mätkiä jotakin jolla on hyvä maine, menettää pelaaja mainetta enemmän mitä on sillä toisella maine. Tämän lisäksi jos pelaajan maine on hyvä, hän menettää omaa mainettaan vielä enemmän. Maineen ollessa negatiivinen menetys laantuu. Toisin päin iskettäessä negatiivisen maineen omaavaa, saa siitä mainetta. Näin päin tosin asian täytyy mennä paljon hitaammin. Eritoten jos pelaajalla on jo negatiivinen maine, se kasvaisi todella hitaasti. Nollamaineen omaava ei muuta mainetta mihinkään suuntaan.

Toivottavasti selityksestäni saanee jotain selvää. Jos ei saa, yritän selittää yksinkertaisemmin. Haen vain kaavaa, jolla saada asia toimimaan kunnolla. Niin, ja kielellä lienee aika vähän väliä, kun vain kaavoja kysellään, mutta se on Qb..

-Grey-

Gaxx [28.05.2006 08:08:12]

#

Itse en ainakaan rupeaisi pähkäilemään tuota kaikkea yhteen ja samaan kaavaan, vaan jakaisin sen muutamaan osaan — osittain määritelty funktio.

Tekisin siis aliohjelman, joka ehtolauseilla(tai vaikka casella) tarkistaa pelaajan maineen(ja tarvittaessa mätkittävän) ja sen perusteella valitsee käytettävän kaavan(ompas typerä nimi tuo kaava, tulee ihan ompeluhommat mieleen).

Gaxx [28.05.2006 11:04:46]

#

Huppista, korjataan vielä nimitys. Eli ei "osittain määritelty funktio", vaan "paloittain määritelty funktio" :)

Grey [28.05.2006 12:16:49]

#

Nykyinen raakileeni on paloittain määritelty näköjään. Se vain käyttäytyy hieman, eh, omituisesti. Eli nyt pitäisi keksiä jotain jolla saisi järkevästi muutettua lukemia, eli niin että mistään ei mene tiettyä summaa, vaan kaavan mukaan laskettu vaihteleva summa. Matematiikka kun ei tuppaa olemaan vahvin osa-alue minua (ja silti koodaan? Tai, noh, yhteenlaskut nyt sujuvat)..

-Grey-

Antti Laaksonen [28.05.2006 12:20:06]

#

Voisitko selittää haluttua maineen muutosta vielä tarkemmin? Esim. eri tapausten esimerkkien avulla (alkumaineet, tapahtuma, loppumaineet).

Grey [28.05.2006 13:02:09]

#

Noh, oletetaan että on hahmo, jonka maine on nolla. Jos tälläinen hahmo nyökkää huonomaineisen hahmon kimppuun, hän saa siitä mainetta. Se miten paljon saa mainetta, riippuu näiden kummankin maineesta. Jos oikein pahamaineisen hahmon kimpussa on, niin saa enemmän hyvää mainetta. Sen sijaan jos oman hahmon maine on alhainen, se vaikeuttaa maineen saamista alussa.

Sitten toisinpäin jos alkaa saamaan negatiivista mainetta itse, asia on taas erilainen. Korkean maineen omaava menettää helpommin mainetta, kuin pienemmän maineen omaava. Hyvämaineisen hahmon tappaminen laskee mainetta vielä enemmän kuin vähän pienemmän hyvän maineen omaavan. Negatiivisen maineen omaava ei saa enää parempaa mainetta tapoista.

Eli hyvämainen saa parhaiten mainetta urotöistään, mutta menettää myös helpoiten mainetta. Vähäisen maineen omaavalla on työn takana saada lisää mainetta, mutta moinen myös menettää huonoiten mainetta. Nollamaineen omaava saa kaikkein huonoiten mainetta, suuntaan tai toiseen. Negatiivinen maine vaikeuttaa positiivisen maineen saamista mahdottomuuteen asti, mutta negatiivista mainetta kertyy helpolla lisää..

-Grey-

Grey [04.06.2006 13:14:27]

#

Hm, enpähän ole vieläkään onnistunut ratkaisemaan tätä ongelmaa. Sitä kun ei selviä enää millään peruslaskutoimituksella, koska aikaansaatu tulos on aivan vääränläinen. Joko se on liian suuri tai liian pieni, tai muuten vain ei tapahdu oikeanlaista tulosta.

Käyrä jonka mukaan pitäisi maineen muutoksen tapahtua, ei mene ikinä tyyliin 1+1+1+1+1+1, vaan pikemminkin esim. 1+1+2+3+5+8+12+18. Tätähän ei myöskään millään suurella if-lausekasalla hoidetaan, kun käytössä oleva skaalakin on -10000 - 9999. Eli, aika riittävä, mutta täytyisi tosiaan saada se kaava, että maineen muuttaminen ei tapahdukaan ihan mahdottoman helpolla..

-Grey-

Metabolix [04.06.2006 22:56:15]

#

Luulen, että jotenkin tähän tyyliin:

If Oma_Maine > 0 Then
  If Vihollisen_Maine > 0 Then
    Muutos = Sqr(Oma_Maine * Vihollisen_Maine)
  Else
    Muutos = -Sqr(Abs(Oma_Maine * Vihollisen_Maine))
  End If
Else
  If Vihollisen_Maine > 0 Then
    Muutos = -0.5 * Sqr(Abs(Oma_Maine * Vihollisen_Maine))
  Else
    Muutos = 0.5 * Sqr(Oma_Maine * Vihollisen_Maine)
  End If
End If

Tämä nyt tuoli suoraan omasta päästä tähän viestilaatikkoon, mutta ideana on, että neliöjuurella hieman hidastetaan kasvua suurissa arvoissa ja kertoimilla etenemistä negatiivisesta ylös. Logaritmi voisi myös olla varsin nerokas ajatus ensimmäiseen.

Tee vaikka pieni taulukko siitä, mistä pitäisi päästä minnekin, ja kokeile sitten niillä tai laita esille, jotta joku muu voi kokeilla. On hyvin vaikea arvioida, miten paljon muutosta pitäisi saada aikaan.

Grey [06.06.2006 13:10:47]

#

Huh, sain vihdoinkin muuttumisen toimimaan oikein. Kiitoksia!

-Grey-


Sivun alkuun

Vastaus

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

Tietoa sivustosta