2016-04-26 8 views
0

Это более абстрактный вопрос «Как бы я подошел к этому», чем я, борющийся с кодированием. Я хочу создать экран создания персонажа, где у вас есть 0 очков, но он может отнять один стат и помещать его в другой. Как, в соответствии с этой системой вы будете ранжировать статистику. У меня есть базовая статистика и максимальное отклонение, но я не знаю, как получить о рандомизации статистики, чтобы она создавала специализированные персонажи. Они не все будут 150% в одном и 75% в двух других статистиках, но я думаю, что нежная специализация, вероятно, с каким-то взвешенным рандомизатором, будет приятной. Не стесняйтесь отвечать псевдокодом или просто объяснять, как вы это сделаете. : DВ: Рандомизированное создание символа с использованием системы баллов

ответ

0

Вот мое решение в питоне:

import random 
from operator import add, sub 

baseStats = { 
"baseHealth":10.00, 
"baseSpeed":10.00, 
"baseAccuracy":10.00, 
} 
baseDeviation = 3 

ops = (add, sub) 
charStats = {} 

#Make spread. Eg: If the deviation is 3 It'll be [0, 0, 0, 0, 1, 1, 1, 2, 2, 3] 
#With the highest deviations being the rarest 
spread = [] 
for i in range(1,baseDeviation+2): 
    for j in range(1,baseDeviation+2-i): 
     spread.append(i) 
print(spread) 

#Make a list of stats without the base values. 
remainingStats = [] 
for key, value in baseStats.items(): 
    charStats[key] = value 
    remainingStats.append(key) 

#Choose a stat and add or subract a random choice from our weighted spread 
op = random.choice(ops) 
chosenOne = random.choice(remainingStats) 
remainingStats.remove(chosenOne) 
chosenNumber = random.choice(spread) 
charStats[chosenOne] = op(charStats[chosenOne],chosenNumber) 
spread.remove(chosenNumber) 

#Work out the difference between the randomised stat and the standard then give 
#it to one and leave the other be. 
difference = baseStats[chosenOne] - charStats[chosenOne] 
charStats[random.choice(remainingStats)] = charStats[random.choice(remainingStats)] + difference 

print(charStats)