summaryrefslogtreecommitdiff
path: root/ausbutler/butler.py
blob: 2fae84090aa1fd8308fa8dd8fda954b908a5b189 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import json
from os import path
import __main__

config = json.load(
    open(path.join(path.dirname(__main__.__file__), 'config', 'butler.json')))

def cutoff(score):
    sign = 1 if score > 0 else -1
    score = abs(score)
    if score > config['cutoff_point']:
        score -= config['cutoff_point']
        score *= config['cutoff_rate']
        score += config['cutoff_point']
    return score * sign

def get_opponents(butler, player):
    table = butler.table
    if player in [table.openE, table.openW]:
        return [table.openN, table.openS]
    if player in [table.openN, table.openS]:
        return [table.openE, table.openW]
    if player in [table.closeE, table.closeW]:
        return [table.closeN, table.closeS]
    if player in [table.closeN, table.closeS]:
        return [table.closeE, table.closeW]

def get_room(butler, player):
    table = butler.table
    if player in [table.openE, table.openW, table.openN, table.openS]:
        return 'open'
    if player in [table.closeE, table.closeW, table.closeN, table.closeS]:
        return 'closed'

def normalize(butler):
    if butler.board_count == 0:
        return 0.0
    return (
        butler.cut_score / butler.board_count
        + butler.opp_score * config['opponent_factor']
    ) * butler.board_count