summaryrefslogtreecommitdiff
path: root/src/miinaharava/bots/simple.py
blob: c321bd9e0a1cace5e1cfa4987c9a2bb66f0115a0 (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
""" bots/simple.py - yksinkertainen botti joka etsii vain yhdeltä laatalta """
from random import choice

from .bot import Bot

class SimpleBot(Bot):
    """ SimpleBot - perustyhmä botti """

    def search(self):
        """ Etsitään laattoja jotka tietyllä laatalla olevan numeron sekä
        sitä ympäröivien tuntemattomien laattojen määrän johdosta täytyy olla
        joko miinoja tai vapaita. Yhdistetään ne kyseisiin joukkoihin. """
        tiles = self.get_interesting_tiles()
        for tile in tiles:
            unknowns, minecount = self.get_unknowns_and_minecount(tile)
            if minecount == 0:
                self.safe_tiles |= unknowns
            if minecount == len(unknowns):
                self.mine_tiles |= unknowns
        return self.saved_hints()

    def get_unknowns_and_minecount(self, tile):
        """ Palauttaa tuntemattomat naapurit ja niissä olevien miinojen
        määrän """
        minecount = self.get_value(tile)
        unknowns = self.get_neighbours(tile)
        self.remove_known_safe_tiles(unknowns)
        minecount -= self.remove_mine_tiles(unknowns)
        return unknowns, minecount

    def lucky_guess(self):
        """ Arvotaan laatta tuntemattomista ja lisätään vapaiden joukkoon """
        self.safe_tiles.add(choice(list(self.get_unknown_tiles())))
        return True