Coverage for project/game/ai/helpers/kabe.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from utils.general import revealed_suits_tiles
4class Kabe:
5 STRONG_KABE = 0
6 WEAK_KABE = 1
7 PARTIAL_KABE = 2
9 def __init__(self, player):
10 self.player = player
12 def find_all_kabe(self, tiles_34):
13 # all indices shifted to -1
14 kabe_matrix = [
15 {"indices": [1], "blocked_tiles": [0], "type": Kabe.STRONG_KABE},
16 {"indices": [2], "blocked_tiles": [0, 1], "type": Kabe.STRONG_KABE},
17 {"indices": [6], "blocked_tiles": [7, 8], "type": Kabe.STRONG_KABE},
18 {"indices": [7], "blocked_tiles": [8], "type": Kabe.STRONG_KABE},
19 {"indices": [0, 3], "blocked_tiles": [2, 3], "type": Kabe.STRONG_KABE},
20 {"indices": [1, 3], "blocked_tiles": [2], "type": Kabe.STRONG_KABE},
21 {"indices": [1, 4], "blocked_tiles": [2, 3], "type": Kabe.STRONG_KABE},
22 {"indices": [2, 4], "blocked_tiles": [3], "type": Kabe.STRONG_KABE},
23 {"indices": [2, 5], "blocked_tiles": [3, 4], "type": Kabe.STRONG_KABE},
24 {"indices": [3, 5], "blocked_tiles": [4], "type": Kabe.STRONG_KABE},
25 {"indices": [3, 6], "blocked_tiles": [4, 5], "type": Kabe.STRONG_KABE},
26 {"indices": [4, 6], "blocked_tiles": [5], "type": Kabe.STRONG_KABE},
27 {"indices": [4, 7], "blocked_tiles": [5, 6], "type": Kabe.STRONG_KABE},
28 {"indices": [5, 7], "blocked_tiles": [6], "type": Kabe.STRONG_KABE},
29 {"indices": [5, 8], "blocked_tiles": [6, 7], "type": Kabe.STRONG_KABE},
30 {"indices": [3], "blocked_tiles": [1, 2], "type": Kabe.WEAK_KABE},
31 {"indices": [4], "blocked_tiles": [2, 6], "type": Kabe.WEAK_KABE},
32 {"indices": [5], "blocked_tiles": [6, 7], "type": Kabe.WEAK_KABE},
33 {"indices": [1, 5], "blocked_tiles": [3], "type": Kabe.WEAK_KABE},
34 {"indices": [2, 6], "blocked_tiles": [4], "type": Kabe.WEAK_KABE},
35 {"indices": [3, 7], "blocked_tiles": [5], "type": Kabe.WEAK_KABE},
36 ]
38 kabe_tiles_strong = []
39 kabe_tiles_weak = []
40 kabe_tiles_partial = []
42 suits = revealed_suits_tiles(self.player, tiles_34)
43 for x in range(0, 3):
44 suit = suits[x]
46 # "kabe" - 4 revealed tiles
47 kabe_tiles = []
48 partial_kabe_tiles = []
49 for y in range(0, 9):
50 suit_tile = suit[y]
51 if suit_tile == 4:
52 kabe_tiles.append(y)
53 elif suit_tile == 3:
54 partial_kabe_tiles.append(y)
56 for matrix_item in kabe_matrix:
57 if len(list(set(matrix_item["indices"]) - set(kabe_tiles))) == 0:
58 for tile in matrix_item["blocked_tiles"]:
59 if matrix_item["type"] == Kabe.STRONG_KABE:
60 kabe_tiles_strong.append(tile + x * 9)
61 else:
62 kabe_tiles_weak.append(tile + x * 9)
64 if len(list(set(matrix_item["indices"]) - set(partial_kabe_tiles))) == 0:
65 for tile in matrix_item["blocked_tiles"]:
66 kabe_tiles_partial.append(tile + x * 9)
68 kabe_tiles_unique = []
69 kabe_tiles_strong = list(set(kabe_tiles_strong))
70 kabe_tiles_weak = list(set(kabe_tiles_weak))
71 kabe_tiles_partial = list(set(kabe_tiles_partial))
73 for tile in kabe_tiles_strong:
74 kabe_tiles_unique.append({"tile": tile, "type": Kabe.STRONG_KABE})
76 for tile in kabe_tiles_weak:
77 if tile not in kabe_tiles_strong:
78 kabe_tiles_unique.append({"tile": tile, "type": Kabe.WEAK_KABE})
80 for tile in kabe_tiles_partial:
81 if tile not in kabe_tiles_strong and tile not in kabe_tiles_weak:
82 kabe_tiles_unique.append({"tile": tile, "type": Kabe.PARTIAL_KABE})
84 return kabe_tiles_unique