dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Skill gain algoritmi

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Dec 28, 2007 11:00 am    Post subject: Skill gain algoritmi

Pašlaik esmu izveidojis ļoti elementāru algoritmu(ja to vispār tā varētu saukt) skill gaina apreiķināšanai, bet viņš šķiet pārāk vienkārš un paredzams:

Datubazē tiek glabāts spēlētājam esošais skills kā floats ar 5 zīmēm aiz komata. vertiba 100 ir maksimala. Katrai prasmei ir savs grūtibas līmenis(piem: 4,28 - jā vienkārši uz dullo) un rezultāts ir vienkārš, jo augstāks prasmes līmenis, jo mazāks pieaugums vērtīai, jo lielāks skilla grūtības skaitlis, jo zemāka pieauguma vērtība.
Code:

pieaugums = round(((100 - speletaja_skills) / skilla_grutiba) / 100, 5); 

jauna_vertiba = veca_vertiba + pieaugums;


Kā jau minēju pārāk paredzams un monotoms, man bija doma kaut kā ņemot vērā prasmes grūtību un pašreizējo līmeni arī reiķināt iespējamību, ka vispār notiek skill gains. Bet neko normāli darbojošos nesanāca izveidot. Varbūt kādam ir idejas kā šo effektīvi prasmju pieaugumu risināt? Papētiju internetā īsti nesanāca neko noderīgu uziet.
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 28, 2007 11:14 am    Post subject:

Kā var floatu glabāt ar 5 zīmēm aiz komata?
floats ir floats - 4 baiti pēc tur kautkāda IEEE standarta.
Ja tev vajag precīzi n-zīmes aiz komata, tad jāglabā kautkāds tur NUMBER vai DECIMAL datu tips. Vai arī vienkārši integers, kuru vienmēr izdala ar 10000.

Par to pieaugumu - nu ja gribi kaut kādu varbūtību, tad uzģenerē random skaitli no 0..1 ar savu gribēto varbūtību un pareizini to pieaugums ar šo random skaitli pirms pieskaitīt vecajai vērtīái.
Back to top
View user's profile Send e-mail
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Dec 28, 2007 11:35 am    Post subject:

Hmm iekš mysql float(8,5) default: 0.00000
No mysql piedāvātajām iespējām šķita viss atbilstošākais šim uzdevumam, papētišu citas iespējas, ja tu saki, ka nav labi Smile

Hmm no tevis teiktā sanāk, ka 2as iespējas rondomam rezultātā 50 pret 50, ka būs vai nebūs pieaugums. Šķiet arī pārāk paredzami un kaut kā neētiski pret ļoti zemiem un ļoti augstiem prasmju līmeņiem, kur iespēja ir vienāda. Doma bija meiģināt iepīt prasmes grūtību un pašreizējo prasmi tajā lai apreiķinātu vai ir pieaugums vai nav.

Vismaz citos rpg sākot apgūt jaunu prasmi tu saņem relatīvi lielu prasmju pieaugumu ļoti bieži, līdz pamazām šī te pieaugumu intensitāte un lielums samazinās un samazinās līdz no 99 līdz 100 tikt ir pavisam grūti.
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 28, 2007 12:03 pm    Post subject:

Tas (8,5) uz floatu attiecās tikai uz datu izvadīšanu. Taču datubāzē tie glabājas 4 baitu floatā, un tas, kā zināms, nevar precīzi saglabāt ļoti daudzus decimālos skaitļus. Piemēram, to pašu 0.1. INT datu tipam Mysqlā arī var norādīt iekavās skaitli (piemēram - INT(2)), taču tas nenozīmēs, ka tagad varēsi tikai 2 ciparus saglabāt - joprojām varēsi jebkuru 4 baitīgu skaitli saglabāt - arī 123123356. RTFM :)

Par to randomu - es nedomāju ģenerēt 0 vai 1. Es biju domājis floatu no 0 līdz 1. Un nevajag arī ģenerēt to vienmērīgu t.i. ar konstantu varbūtību. Var pielietot visdažādākos varbūtības sadalījumus - tādējādi panāksi visdažādākās iespējais - ka skaitļi tuvāk nullei uzkrīt biežāk, vai arī gluži otrādi tuvāk vieniniekam biežāk. Vai arī paņemt Gausa sadalījumu un visbiežāk kritīs 0.5 (http://en.wikipedia.org/wiki/Gaussian_function)
Back to top
View user's profile Send e-mail
spicausis



Joined: 23 Jan 2006
Posts: 85
Location: Teika

PostPosted: Fri Dec 28, 2007 1:43 pm    Post subject:

Glabā labāk bāzē kā decimal(a,b). vai pareizini ar 100000 un glabā intu. Depresīvais IEEE floata standarts vēl ilgi bendēs nervus, tapēc labāk izmantot kaut ko, kur nav jāuztraucas vēl par potenciālajām noapaļošanas problēmām.

Par tavu lietu, iespējams, tev būs vieglāk uz skilliem paskatīties nevis kā floatu 1..100, bet gan:
- kopējais sakrātais skills (tā kā klasiski expa)
- skilla levelis, 1..100 vai cik nu vēlies

attiecīgi, tava problēma pārvēršas uz parametru atrašanu, cik sakrātais kopējais skills kādam skilla levelim 1..100 atbilst. (kas ir apmēram tā pati problēma, pie kādas ekspas kāds līmenis ir pašam personāžam) Visdrīzāk, ka tu vēlēsies iet klasisko ceļu, un piemeklēt kaut ko eksponenciālu. Vienkāršākajā gadījumā,
kopējais skills | skilla levelis
1 | 1
2 | 2
4 | 3
8 | 4
...
utt, bet šis var būt par šerpu, bet to jau tu vari piemeklēt pēc savām vajadzībām.
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Fri Dec 28, 2007 1:57 pm    Post subject:

Glabaa kaa int (vai unsigned int driizaak) Man liekas ka visi normaali cilveeki taadas lietas neglabaa ne floatos ne decimal'os (lol gaamees sito visp izmet no galvas, tas primaari ir domaats bankaam un biroja programmatuurai nevis speeleem)
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Fri Dec 28, 2007 2:21 pm    Post subject:

Bankas ir klasisks piemērs (ko rāda priekšā bērnudārzā), kurš nekad neizmantos float.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 28, 2007 3:00 pm    Post subject:

elvman: Storm to manuprāt teica par DECIMAL, nevis FLOAT.

Storm: kas vainas glabāt skaitli decimal'ā iekš MySQL datubāzes?
Back to top
View user's profile Send e-mail
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Fri Dec 28, 2007 6:55 pm    Post subject:

Nu nez, manupraat nevajadziigas konversaacijas buus vajadziigas, es lietotu integer tipa...

Un jaa - Elvman pats vainiigs ka neprot lasiit (to maaca beernudaarzaa)
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Dec 28, 2007 7:38 pm    Post subject:

Trakie, no skill gaina algoritma kā galveno jautājumu esam novirzījušies līdz kādu datubāzes lauku labāk izmantot. Paldies, par to būs viss skaidrs :)

Par pašām prasmēm papētiju pāris spēļu source un izskatās, ka nonācu pie risinājuma. Godīgi sakot viņš ir tik labi integrēts šajās spēlēs, ka uzreiz neienāca prātā.

Piemēram, ja mēs kaļam zobenu kuram ir 90% success rate - tas ir ļoti vienkārši un praktiski mēs tikai izmantojam vecās prasmes - neko jaunu neiemācamies, bet ja kaļam zobenu kuram ir knapi 10% iespēja, ka sanāks uzkalt tur jau sanāk piepūlēties un domāt tapēc arī salīdzinoši daudz lielāka iespēja prasmei pieaugt. Attiecīgi šo principu es varu pielāgot praktiski katram skillam. Un tas arī būtu + viens no mainīgai no kura atkarīgs pieauguma rezultāts, integrēt nelielu rondomu formulā un ir gatavs.
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 28, 2007 8:52 pm    Post subject:

Storm wrote:
Nu nez, manupraat nevajadziigas konversaacijas buus vajadziigas, es lietotu integer tipa...

Un dalīšana, m? :)

Quote:
Un jaa - Elvman pats vainiigs ka neprot lasiit (to maaca beernudaarzaa)

Komatu pirms otrā ne, kurš ievērojami palīdz lasīt un uztvert rakstīto, arī mācīja likt bērnudārzā ;)
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group