Example #1
0
 def mobilnoscWiezy(self):
     wartosc = 0
     for wieza in self.lista_wiez:
         mrb = MozliwoscRuchuBierki(wieza)
         ruch = mrb.sprawdzMozliweRuchy()
         wartosc += 2 * len(ruch['bicie'])
     return wartosc
Example #2
0
    def sprawdzOtwartaLinie(self):
        wartosc = 0
        kolor_wrogow = warunki_biale if warunki_czarne in self.kolor else warunki_czarne

        for wieza in self.lista_wiez:
            mrb = MozliwoscRuchuBierki(wieza)
            ruchy_wiezy = mrb.dajListyRuchowKrzyzowych(wieza)

            for lst_wsporzdnch in ruchy_wiezy:
                lst_pozycji = zmienListeWspolrzednychNaPola(lst_wsporzdnch)
                lst_pozycji.sort()
                przerwana_petla = False

                for pozycja in lst_pozycji:
                    bierka = self.nsb.dajBierkePoPolu(pozycja)

                    if bierka:
                        if bierka.nazwa == kolor_wrogow + '_pion':
                            wartosc += 4
                            przerwana_petla = True
                            break
                        elif bierka.nazwa == self.kolor + 'pion':
                            przerwana_petla = True
                            break

                if not przerwana_petla and len(lst_pozycji):
                    wartosc += 10
        return wartosc
Example #3
0
 def sprawdzCzyKrolZagrozonyPrzezBierke(self, bierka):
     mrb = MozliwoscRuchuBierki(bierka)
     pola = mrb.sprawdzMozliweRuchy(False)['bicie']
     for pole in zmienListeWspolrzednychNaPola(pola):
         zagrozona_bierka = self.szukanie_bierek.dajBierkePoPolu(pole)
         if 'krol' in zagrozona_bierka.nazwa:
             return zagrozona_bierka
     return False
Example #4
0
    def __init__(self, kryjaca):
        from obsluga_gry.figury_mozliwosc_ruchu import MozliwoscRuchuBierki
        from obsluga_gry.warunki_wygranej import WarunkiWygranej

        self.mrb = MozliwoscRuchuBierki(kryjaca)
        self.ww = WarunkiWygranej
        self.kryjaca = kryjaca
        self.kolor_bierki = warunki_biale if warunki_biale in self.kryjaca.nazwa else warunki_czarne
Example #5
0
    def obliczPunktyZaPozycje(self):
        wartosc = 0

        for bierka in self.lista_bierek:
            mrb = MozliwoscRuchuBierki(bierka)
            mozliwe_ruchy = mrb.sprawdzMozliweRuchy()
            for wspolrzedne in mozliwe_ruchy['ruch'] + mozliwe_ruchy['bicie']:
                pole = zmienWspolrzedneNaPole(x=wspolrzedne['x'],
                                              y=wspolrzedne['y'])
                if pole in lista_pol_centralnych:
                    wartosc += 10
                wartosc += 3
        return wartosc
Example #6
0
    def podswietlMozliweRuchy(self):
        from .tworzenie_figur import wyswietlObiektyNaEkranie

        mozliwoscRuchu = MozliwoscRuchuBierki(self)
        ruchy_do_podswietlenia = mozliwoscRuchu.sprawdzMozliweRuchy()
        podswietlony_ruch = []
        for wspolrzedne in ruchy_do_podswietlenia['ruch']:
            podswietlony_ruch.append(PodswietlMozliwyRuch(wspolrzedne))
        for wspolrzedne in ruchy_do_podswietlenia['bicie']:
            podswietlony_ruch.append(PodswietlMozliweBicie(wspolrzedne))
        for wspolrzedne in ruchy_do_podswietlenia.get('roszada', []):
            podswietlony_ruch.append(PodswietlMozliweRoszady(wspolrzedne))
        wyswietlObiektyNaEkranie(podswietlony_ruch)
Example #7
0
 def sprawdzCzyMat(self):
     mozliwe_pola = {'ruch': [], 'bicie': []}
     prawdziwy_zagrozony = WarunkiWygranej.zagrozony_krol
     self.dajZagrozonegoKrola()
     for bierka in self.bierki_broniace:
         mrb = MozliwoscRuchuBierki(bierka)
         pola = mrb.sprawdzMozliweRuchy()
         mozliwe_pola['ruch'].extend(pola['ruch'])
         mozliwe_pola['bicie'].extend(pola['bicie'])
     if mozliwe_pola['ruch'] or mozliwe_pola['bicie']:
         WarunkiWygranej.zagrozony_krol = prawdziwy_zagrozony
         return False
     WarunkiWygranej.zagrozony_krol = prawdziwy_zagrozony
     return True
Example #8
0
    def sprawdzCzyPat(self):
        if (
            len(self.bierki_broniace) == 1 and len(self.bierki_ruszajace) == 1 and
            'krol' in self.bierki_broniace[0].nazwa and 'krol' in self.bierki_ruszajace[0].nazwa
        ):
            return True

        for bierka in self.bierki_broniace:
            mrb = MozliwoscRuchuBierki(bierka)
            pola = mrb.sprawdzMozliweRuchy()
            if pola['ruch'] or pola['bicie'] or pola.get('roszada'):
                return False

        return True
Example #9
0
def czyKrolWSzachu(krol):
    from obsluga_gry.figury_mozliwosc_ruchu import MozliwoscRuchuBierki

    nsb = NarzedziaSzukaniaBierek()
    kolor_wrogow = warunki_biale if warunki_czarne in krol.nazwa else warunki_czarne
    bierki_wrogow = nsb.dajBierkiPoSlowieKluczowym(kolor_wrogow)

    for bierka in bierki_wrogow:
        mrb = MozliwoscRuchuBierki(bierka)
        pola = mrb.sprawdzMozliweRuchy(False)
        ilosc_bierek_na_polu = len(nsb.dajBierkePoPolu(bierka.pozycja, True))
        pola_atakowane = zmienListeWspolrzednychNaPola(pola['bicie'])
        if krol.pozycja in pola_atakowane and ilosc_bierek_na_polu == 1:
            return True
    return False
Example #10
0
    def szachowanieSkoczkiem(self):
        lst_skoczkow = self.nsb.dajBierkiPoSlowieKluczowym(
            self.kolor_matujacych + '_skoczek')
        wartosc = 0

        for skoczek in lst_skoczkow:
            ruch = MozliwoscRuchuBierki(skoczek).sprawdzMozliweRuchy()
            if self.matowany_krol.pozycja in ruch['bicie']:
                wartosc += 15

        return wartosc
Example #11
0
    def wzorHartmana(self):
        wspolczynnik = {
            gra_srodkowa: 3,
            wczesna_koncowka: 1,
        }

        wartosci_bierek = {
            'bialy_pion': 0,
            'czarny_pion': 0,
            'bialy_skoczek': 3,
            'czarny_skoczek': 3,
            'bialy_goniec': 4,
            'czarny_goniec': 4,
            'bialy_wieza': 5,
            'czarny_wieza': 5,
            'bialy_hetman': 9,
            'czarny_hetman': 9,
            'bialy_krol': 10,
            'czarny_krol': 10,
        }

        wartosc = 0

        for goniec in self.lista_goncow:
            mrb = MozliwoscRuchuBierki(goniec)
            mozliwe_ruchy = mrb.sprawdzMozliweRuchy()

            # obliczanie EM
            for wspolrzedne in mozliwe_ruchy['bicie']:
                pole = zmienWspolrzedneNaPole(x=wspolrzedne['x'],
                                              y=wspolrzedne['y'])
                bierka = self.nsb.dajBierkePoPolu(pole)
                wartosc += wartosci_bierek[bierka.nazwa]

            # obliczanie OM i OW
            wartosc += self._obliczWartoscOMiOW(goniec)

            # obliczanie DL
            mrb = MozliwoscRuchuBierki(goniec)
            wartosc += len(mrb.dajListyRuchowPoprzecznych(goniec)) - 7

        return wspolczynnik[FazaGry.obecny_etap] * wartosc
Example #12
0
def uruchomAlgorytm():
    from obsluga_gry.figury_mozliwosc_ruchu import MozliwoscRuchuBierki

    nsb = NarzedziaSzukaniaBierek()
    lst_wartosci = []
    # sa trzymane w liscie slownikow, gdzie wartosc bedze wartoscia ruchu, bierka, pozycja wspolrzednymi i typ ruchu

    def zapiszWartosci(bierka, ruch, typ):
        WartoscPlanszy.wartosc_pozycyjna = dajWartoscPozycyjna()
        WartoscPlanszy.wartosc_materialna = dajWartoscMaterialna()
        lst_wartosci.append({
            'wartosc': WartoscPlanszy.wartosc_pozycyjna+WartoscPlanszy.wartosc_materialna,
            'bierka': bierka,
            'wspolrzedne': ruch,
            'typ_ruchu': typ,
        })

    def wybierzIWykonajNajlepszyRuch():
        lst_wartosci.sort(key=lambda x: x['wartosc'], reverse=True)
        bierka = lst_wartosci[0]['bierka']
        wspolrzedne = lst_wartosci[0]['wspolrzedne']
        typ = lst_wartosci[0]['typ_ruchu']
        pole = zmienWspolrzedneNaPole(x=wspolrzedne['x'], y=wspolrzedne['y'])

        if typ == 'ruch':
            bierka.zmienUstawienieBierki(wspolrzedne, pole)
        elif typ == 'bicie':
            bita_bierka = nsb.dajBierkePoPolu(pole)
            bita_bierka.zbita()
            bierka.zmienUstawienieBierki(wspolrzedne, pole)
        elif typ == 'roszada':
            bierka.wykonajRoszade(wspolrzedne, pole)

    fg = FazaGry()
    fg.sprawdzFazeGry()
    lst_brk_cz = nsb.dajBierkiPoSlowieKluczowym(warunki_czarne)

    import datetime
    czas = datetime.datetime.now()

    for bierka in lst_brk_cz:
        mrb = MozliwoscRuchuBierki(bierka)
        mozliwe_ruchy = mrb.sprawdzMozliweRuchy()

        for ruch in mozliwe_ruchy['ruch']:
            with wykonajPseudoruch(bierka, ruch):
                zapiszWartosci(bierka, ruch, 'ruch')
        for ruch in mozliwe_ruchy['bicie']:
            with wykonajPseudobicie(bierka, ruch):
                zapiszWartosci(bierka, ruch, 'bicie')
        for ruch in mozliwe_ruchy.get('roszada', []):
            with wykonajPseudoroszade(bierka, ruch):
                zapiszWartosci(bierka, ruch, 'roszada')

    wybierzIWykonajNajlepszyRuch()

    ObslugaAlgorytmu.zniszczKomunikat()
    koniec = datetime.datetime.now() - czas
    print('Czas obliczania w fazie ' + FazaGry.obecny_etap + ' = ' + str(koniec))
    NarzedziaStatystyk.zapiszCzasWykonania(koniec)

    ww = WarunkiWygranej()
    ww.sprawdzWarunkiWygranej()
Example #13
0
class NarzedziaMatow(object):
    def __init__(self, kryjaca):
        from obsluga_gry.figury_mozliwosc_ruchu import MozliwoscRuchuBierki
        from obsluga_gry.warunki_wygranej import WarunkiWygranej

        self.mrb = MozliwoscRuchuBierki(kryjaca)
        self.ww = WarunkiWygranej
        self.kryjaca = kryjaca
        self.kolor_bierki = warunki_biale if warunki_biale in self.kryjaca.nazwa else warunki_czarne

    def ustawKrycieBierki(self, bierka_kryta):
        bierka_kryta.kryta = True if self.sprawdzKrycieBierek(
            bierka_kryta) else bierka_kryta.kryta

    def sprawdzKrycieBierek(self, bierka_kryta):
        if 'pion' in self.kryjaca.nazwa:
            return self._dajDlaPiona(bierka_kryta)
        elif 'skoczek' in self.kryjaca.nazwa:
            return self._dajDlaSkoczka(bierka_kryta)

        kryta = False
        if 'wieza' or 'hetman' or 'krol' in self.kryjaca.nazwa:
            kryta = self._dajKrzyzowy(bierka_kryta)
        if ('goniec' or 'hetman'
                or 'krol' in self.kryjaca.nazwa) and not kryta:
            kryta = self._dajIksowy(bierka_kryta)

        return kryta

    def _dajDlaPiona(self, bierka_kryta):
        pola_kryte = self.mrb.dajBiciePionow(self.kryjaca.pozycja,
                                             self.kryjaca.nazwa)
        return bierka_kryta.pozycja in pola_kryte

    def _dajDlaSkoczka(self, bierka_kryta):
        pola_kryte = self.mrb.przygotujRuchySKoczka(self.kryjaca.pozycja)
        return bierka_kryta.pozycja in pola_kryte

    def _dajKrzyzowy(self, bierka_kryta):
        listy_ruchow = self.mrb.dajListyRuchowKrzyzowych(self.kryjaca)
        for lista in listy_ruchow:
            if self._sprawdzDlaProstych(lista, bierka_kryta):
                return True
        return False

    def _dajIksowy(self, bierka_kryta):
        listy_ruchow = self.mrb.dajListyRuchowPoprzecznych(self.kryjaca)
        for lista in listy_ruchow:
            if self._sprawdzDlaProstych(lista, bierka_kryta):
                return True
        return False

    def _sprawdzDlaProstych(self, lista, bierka_kryta):
        mozliwe_pola = zmienListeWspolrzednychNaPola(lista)
        mozliwe_pola = self.mrb.sprawdzCzyZawadza(mozliwe_pola, 1)
        return bierka_kryta.pozycja in mozliwe_pola

    def dajPolaBijacejDoKrola(self):
        if 'pion' in self.kryjaca.nazwa or 'skoczek' in self.kryjaca.nazwa:
            return []

        if self._dajKrzyzowy(self.ww.zagrozony_krol):
            return self._dajOdpowiedniaLinieRuchuKrzyzowego()
        elif self._dajIksowy(self.ww.zagrozony_krol):
            return self._dajOdpowiedniaLinieRuchuProstego()

        return []

    def _dajOdpowiedniaLinieRuchuKrzyzowego(self):
        listy_ruchow = self.mrb.dajListyRuchowKrzyzowych(self.kryjaca)
        return self._dajListeDlaProstych(listy_ruchow)

    def _dajOdpowiedniaLinieRuchuProstego(self):
        listy_ruchow = self.mrb.dajListyRuchowPoprzecznych(self.kryjaca)
        return self._dajListeDlaProstych(listy_ruchow)

    def _dajListeDlaProstych(self, listy_ruchow):
        for lista in listy_ruchow:
            if self._sprawdzDlaProstych(lista, self.ww.zagrozony_krol):
                index = lista.index(
                    wyznaczWspolrzednePoPozycji(
                        self.ww.zagrozony_krol.pozycja))
                return lista[:index]

    def dajPolaBijaceSzachujacego(self, pola_bicia):
        return [
            pole for pole in pola_bicia if zmienWspolrzedneNaPole(
                pole['x'], pole['y']) in self.ww.bierka_bijaca.pozycja
        ]
Example #14
0
def czyPoleNaBiciu(bierka):
    from obsluga_gry.figury_mozliwosc_ruchu import MozliwoscRuchuBierki

    mrb = MozliwoscRuchuBierki(bierka)
    kolor = warunki_czarne if warunki_biale in bierka.nazwa else warunki_biale
    return not bool(mrb.wykreslPolaBitePrzez(kolor, [bierka.pozycja]))