random: extract to a separate module

This commit is contained in:
rr-
2018-11-05 21:04:39 +01:00
parent 43f4585bfd
commit 2b60b80364
2 changed files with 32 additions and 22 deletions
+10 -22
View File
@@ -1,9 +1,9 @@
import datetime import datetime
import enum import enum
import random
import typing as T import typing as T
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pqcli import random
from pqcli.config import * from pqcli.config import *
@@ -12,10 +12,6 @@ def level_up_time(level: int) -> int:
return 20 * level * 60 return 20 * level * 60
def random_low(below):
return min(random.randint(0, below), random.randint(0, below))
def generate_name() -> str: def generate_name() -> str:
parts = [ parts = [
"br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z".split("|"), "br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z".split("|"),
@@ -160,10 +156,10 @@ class Player:
def level_up(self) -> None: def level_up(self) -> None:
self.level += 1 self.level += 1
self.stats[Stat.hp_max] += ( self.stats[Stat.hp_max] += (
self.stats[Stat.condition] // 3 + 1 + random.randint(0, 3) self.stats[Stat.condition] // 3 + 1 + random.below(4)
) )
self.stats[Stat.mp_max] += ( self.stats[Stat.mp_max] += (
self.stats[Stat.intelligence] // 3 + 1 + random.randint(0, 3) self.stats[Stat.intelligence] // 3 + 1 + random.below(4)
) )
self.win_stat() self.win_stat()
self.win_stat() self.win_stat()
@@ -171,12 +167,12 @@ class Player:
self.exp_bar.reset(level_up_time(self.level)) self.exp_bar.reset(level_up_time(self.level))
def win_stat(self) -> bool: def win_stat(self) -> bool:
if random.choice([False, True]): if random.odds(1, 2):
chosen_stat = random.choice(list(Stat)) chosen_stat = random.choice(list(Stat))
else: else:
# favor the beststat so it will tend to clump # favor the beststat so it will tend to clump
t = sum(value ** 2 for _stat, value in self.stats) t = sum(value ** 2 for _stat, value in self.stats)
t = random.randint(0, t - 1) t = random.below(t)
chosen_stat: Stat = None chosen_stat: Stat = None
for stat, value in self.stats: for stat, value in self.stats:
chosen_stat = stat chosen_stat = stat
@@ -194,11 +190,8 @@ class Player:
def win_spell(self) -> None: def win_spell(self) -> None:
self.spell_book.add( self.spell_book.add(
SPELLS[ SPELLS[
random_low( random.below_low(
min( min(self.stats[Stat.wisdom] + self.level, len(SPELLS))
self.stats[Stat.wisdom] + self.level - 1,
len(SPELLS) - 1,
)
) )
], ],
1, 1,
@@ -236,15 +229,10 @@ class StatsBuilder:
stats = Stats() stats = Stats()
for stat in PRIME_STATS: for stat in PRIME_STATS:
stats[stat] = ( stats[stat] = (
3 3 + random.below(6) + random.below(6) + random.below(6)
+ random.randint(0, 5)
+ random.randint(0, 5)
+ random.randint(0, 5)
)
stats[Stat.hp_max] = random.randint(0, 7) + stats[Stat.condition] // 6
stats[Stat.mp_max] = (
random.randint(0, 7) + stats[Stat.intelligence] // 6
) )
stats[Stat.hp_max] = random.below(8) + stats[Stat.condition] // 6
stats[Stat.mp_max] = random.below(8) + stats[Stat.intelligence] // 6
self.history.append(stats) self.history.append(stats)
return stats return stats
+22
View File
@@ -0,0 +1,22 @@
import random
import typing as T
def seed(seed: T.Any) -> None:
random.seed(seed)
def choice(source: T.Iterable[T.Any]) -> T.Any:
return random.choice(source)
def below(num: int) -> int:
return random.randint(0, num - 1)
def below_low(num: int) -> int:
return min(below(num), below(num))
def odds(chance: int, out_of: int) -> bool:
return below(out_of) < chance