def wykreslOslonieteBierki(self, obiektKrola, mozliwe_ruchy):
     for wspolrzedne in mozliwe_ruchy[:]:
         pole = zmienWspolrzedneNaPole(wspolrzedne['x'], wspolrzedne['y'])
         bierka = self.narz_szukania_bierek.dajBierkePoPolu(pole)
         if bierka and bierka.kryta:
             mozliwe_ruchy.remove(wspolrzedne)
     return mozliwe_ruchy
    def dajRuchyBezSzachow(self, mozliwe_ruchy, bierka):
        from obsluga_gry.kolejnosc_ruchu import KolejnoscRuchu

        nazwa_krola = KolejnoscRuchu.kolej_na + '_krol'
        krol = self.narz_szukania_bierek.dajBierkiPoSlowieKluczowym(
            nazwa_krola)[0]
        bazowe_wspolrzedne = {
            'x': bierka.pozycja_x,
            'y': bierka.pozycja_y,
            'pozycja': bierka.pozycja
        }

        for klucz in mozliwe_ruchy:
            for wspolrzedna in mozliwe_ruchy[klucz][:]:
                bierka.pozycja_x = wspolrzedna['x']
                bierka.pozycja_y = wspolrzedna['y']
                bierka.pozycja = zmienWspolrzedneNaPole(
                    wspolrzedna['x'], wspolrzedna['y'])
                if czyKrolWSzachu(krol):
                    mozliwe_ruchy[klucz].remove(wspolrzedna)

        bierka.pozycja = bazowe_wspolrzedne['pozycja']
        bierka.pozycja_x = bazowe_wspolrzedne['x']
        bierka.pozycja_y = bazowe_wspolrzedne['y']

        return mozliwe_ruchy
Beispiel #3
0
 def __init__(self, cls, wspolrzedne):
     self.pozycja_x = wspolrzedne['x']
     self.pozycja_y = wspolrzedne['y']
     self.pozycja = zmienWspolrzedneNaPole(self.pozycja_x, self.pozycja_y)
     self.wybrane = False
     cls.podswietlPole(self)
     PodswietlMozliwePola.lista_podswietlen.append(self)
    def ruchDlaSkoczka(self, obiektSkoczka):
        pole_skoczka = zmienWspolrzedneNaPole(obiektSkoczka.pozycja_x,
                                              obiektSkoczka.pozycja_y)
        mozliwe_ruchy = self.przygotujRuchySKoczka(pole_skoczka)
        mozliwe_ruchy = self.sprawdzCzyKucowiZawadza(mozliwe_ruchy)

        return self.ograniczSkoczkaOBicie(
            [wyznaczWspolrzednePoPozycji(ruch) for ruch in mozliwe_ruchy])
Beispiel #5
0
def wykonajPseudobicie(bierka, ruch):
    nsb = NarzedziaSzukaniaBierek()
    pole = zmienWspolrzedneNaPole(x=ruch['x'], y=ruch['y'])
    bierka_bita = nsb.dajBierkePoPolu(pole)
    with wykonajPseudoruch(bierka, ruch):
        bierka_bita.czy_zbita = True
        yield
        bierka_bita.czy_zbita = False
 def dodajPionomBicie(self, obiektPiona, ruchy):
     pole_piona = zmienWspolrzedneNaPole(obiektPiona.pozycja_x,
                                         obiektPiona.pozycja_y)
     pola_atakowane = self.dajBiciePionow(pole_piona, obiektPiona.nazwa)
     pola_atakowane = self.sprawdzCzyBicieNaPolach(pola_atakowane,
                                                   obiektPiona)
     lista_wspolrzednych = []
     for pole in pola_atakowane:
         lista_wspolrzednych.append(wyznaczWspolrzednePoPozycji(pole))
     return lista_wspolrzednych
Beispiel #7
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
Beispiel #8
0
def wykonajPseudoroszade(bierka, ruch):
    pozycja = zmienWspolrzedneNaPole(x=ruch['x'], y=ruch['y'])
    nsb = NarzedziaSzukaniaBierek()
    szerokosc = 'a' if pozycja[0] == 'c' else 'h'
    nowe_pole = 'd' + pozycja[1] if szerokosc == 'a' else 'f' + pozycja[1]
    nowe_wspolrzedne = wyznaczWspolrzednePoPozycji(nowe_pole)

    wieza = nsb.dajBierkePoPolu(szerokosc + pozycja[1])
    with wykonajPseudoruch(wieza, nowe_wspolrzedne):
        with wykonajPseudoruch(bierka, ruch):
            KontrolerWartosciPozycyjnych.roszada_wykonana[bierka.kolor] = True
            yield
            KontrolerWartosciPozycyjnych.roszada_wykonana[bierka.kolor] = False
Beispiel #9
0
    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)
Beispiel #10
0
def wykonajPseudoruch(bierka, ruch):
    dane_wyjsciowe = {
        'x': bierka.pozycja_x,
        'y': bierka.pozycja_y,
        'pozycja': bierka.pozycja,
        'poruszona': bierka.czy_poruszona
    }

    bierka.pozycja = zmienWspolrzedneNaPole(x=ruch['x'], y=ruch['y'])
    bierka.pozycja_x = ruch['x']
    bierka.pozycja_y = ruch['y']
    bierka.czy_poruszona = True

    yield

    bierka.pozycja = dane_wyjsciowe['pozycja']
    bierka.pozycja_x = dane_wyjsciowe['x']
    bierka.pozycja_y = dane_wyjsciowe['y']
    bierka.czy_poruszona = dane_wyjsciowe['poruszona']
Beispiel #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