コード例 #1
0
ファイル: ai.py プロジェクト: samedb/Santorini
 def sledeci_potez(self, tabla, igrac, dubina):
     """Igra poziva ovu funkcija, prosledjuje joj stanje i igraca a ova funkija vraca sledeci potez.
     Ovde se koriti obicni minimax algoritam za nalazenje najboljeg poteza.
     Ovo je abstraktna funkcija tako da je moraju implementirati sve klase koje nasledjuju AI.
     
     :param tabla: Tabla za koju treba naci sledeci potez
     :type tabla: Tabla
     :param na_potezu: Igrac koji je na potezu i za kojeg treba naci sledeci potez
     :type na_potezu: int
     :param dubina: Dubina za koju treba izvrsiti pretrazivanje stabla
     :type dubina: int
     """      
     self.dubina = dubina
     svi_potezi = svi_moguci_potezi(tabla, igrac)
     vrednosti = []
     # nadji vrednosti svih mogucih poteza
     for p in svi_potezi:
         nova_tabla = Tabla(tabla)
         nova_tabla.izvrsi_potez(p)
         vrednosti.append(self.minimax(nova_tabla, self.dubina - 1, igrac, False, p))
     
     # stampaj vrednosti svih poteza ako treba
     if self.stampaj_vrednosti_svih_poteza:
         print(f"\n\n\nNa potezu je {igrac}, koristi se algoritam MiniMax NOVI NOVI i vrednsti svih mogucih poteza su:")
         for i in range(len(svi_potezi)):
             print(svi_potezi[i], vrednosti[i])
     
     # nadji najbolji potez i vrati ga
     index_maximuma = vrednosti.index(max(vrednosti))
     return svi_potezi[index_maximuma]
コード例 #2
0
def analizarDatos(anterior, actual):

    datos = Tabla(anterior, actual)

    tablaTranspuesta = datos.unirTablasXmes()

    nombre = 'MonthlyReport'

    reporte = Reporte(tablaTranspuesta, nombre)
    reporte.analizeReport()

    print('Reporte OK!')
コード例 #3
0
    def __init__(self,
                 parent,
                 igrac1,
                 igrac2,
                 naziv_fajla,
                 stampaj_vrednosti_svih_poteza,
                 crtaj_svaki_korak=True):
        """Konstruktor klase IgraCanvas, inicijalizuje potrebne atribute.
        
        :param parent: Roditeljski widget u kojem se crta IgraCanvas
        :type parent: Widget
        :param igrac1: Tip prvog igraca
        :type igrac1: str
        :param igrac2: Tip drugog igraca
        :type igrac2: str
        :param naziv_fajla: Putanja do falja iz kojeg se citaju potezi ili u kojem se upisuju potezi
        :type naziv_fajla: str
        :param stampaj_vrednosti_svih_poteza: Da li treba stampati vrednosti svih mogucih poteza za AI
        :type stampaj_vrednosti_svih_poteza: bool
        :param crtaj_svaki_korak: Kad igraju AI vs AI da li treba prikazivati svaki potez ili samo rezultat njihovog meca, defaults to True
        :type crtaj_svaki_korak: bool, optional
        """
        Canvas.__init__(self, parent)
        self.config(width=500, height=550)
        self.bind("<Button-1>", self.mouse_click)

        self.crtaj_svaki_korak = crtaj_svaki_korak

        # postavljanje tip igraca koji su prosledjeni kao parametri
        self.plavi_AI = self.odaberi_AI(igrac1, stampaj_vrednosti_svih_poteza)
        self.crveni_AI = self.odaberi_AI(igrac2, stampaj_vrednosti_svih_poteza)

        # inicijalizacije matrice
        self.tabla = Tabla()
        self.na_potezu = None  # da napisem dobar komentar za ovo
        self.game_state = GameState.POSTAVLJANJE_FIGURA  # u pocetku svi igraci postavljaju svoje figure na tablu
        self.broj_figura = 0  # treba mi za prvu fazu gde se postavljaju figure
        self.selektovana_figura = (-2, -2)

        # otvaranje fajla, citanje i izvrsavanje poteza ako ih ima u njemu
        self.procitaj_fajl_i_popuni_tabelu(naziv_fajla)
        # otvaranje fajla za pisanje sad, svaki put kad se izvrsi neki potez on se upisuje u fajl
        self.f = open(naziv_fajla, "a")

        self.crtaj()
        self.zameni_igraca()
コード例 #4
0
ファイル: ai.py プロジェクト: samedb/Santorini
    def minimax(self, tabla, dubina, igrac, maximizing_player, potez):
        """Rekurzivna funkcija koja racuna (samo) vrednost koju ce minimax algoritam vratiti za prosledjenu tabelu/stanje.
        Ovaj algoritam je uradjen po ugledu na psudo kod minimax algoritma sa moodle-a.
        
        :param tabla: Tabla nad kojom treba izvrsavati poteze ili za koju treba racunati staticku funkciju procene
        :type tabla: Tabla
        :param dubina: Dubina razvijanja stabla
        :type dubina: int
        :param igrac: Igrac za kojeg se racuna staticka funkcija procene
        :type igrac: int
        :param maximizing_player: Da li treba uzimati max ili min vrednost od potomaka
        :type maximizing_player: bool
        :param potez: Potez koji je doveo do ovog stanja
        :type potez: Potez
        :return: Vrednost koji ce minimimax algoritam nadji za stablo koje nastaje iz prosledjene table
        :rtype: int
        """
        # ako ne treba dalje razvijati stablo vracamo staticku funkciju procene        
        if dubina == 0:
            return self.funkcija_procene(tabla, potez, igrac)
        
        # pronalazimo sve moguce poteze iz ovog stanja u zavisnosti od toga koji igrac je sada na potezu
        if maximizing_player:
            svi_potezi = svi_moguci_potezi(tabla, igrac)
        else:
            svi_potezi = svi_moguci_potezi(tabla, protivnik(igrac))

        # ako nema mogucih poteza vrati vrednost tog cvora vracamo staticku funkciju procene
        if len(svi_potezi) == 0:
            return self.funkcija_procene(tabla, potez, igrac)
        else: # inace nadji vrednosti svih mogucih poteza iz ovog stanja
            vrednosti = []
            for p in svi_potezi:
                nova_tabla = Tabla(tabla)
                nova_tabla.izvrsi_potez(p)
                vrednosti.append(self.minimax(nova_tabla, dubina - 1, igrac, not maximizing_player, p))

        # nalazimo minimalnu ili maksimalu vrednost medju potomcima cvora i postavljamo je za vrednost tog cvora
        if maximizing_player:
            return max(vrednosti)
        else:
            return min(vrednosti)
コード例 #5
0
ファイル: ai.py プロジェクト: samedb/Santorini
    def max_value(self, tabla, dubina, potez, alfa, beta):
        """Vraca maksimalnu vrednost podstabla uz upotrebu minimax algoritma sa alfa beta odsecanjem.
        
        :param tabla: Trenutna tabla/stanje igre, raspored figura i spratova
        :type tabla: Tabla
        :param dubina: Dubina do koje treba pretraziti stablo
        :type dubina: int
        :param potez: Potez koji je doveo do ove table/stanja
        :type potez: Potez
        :param alfa: Vrednost najboljeg izbora koji smo pronasli do sada tokom putanje za MAX
        :type alfa: int
        :param beta: Vrednost najboljeg izbofa (ovde je to najmanja vrednost) koju smo pronali do sada tokom putanja za MIN
        :type beta: int
        :return: Vraca maksimalu vrednost podstabla uz uptrebu minimax algoritma sa alfa beta odsecanjem
        :rtype: int
        """        
        if dubina == 0:
            return self.funkcija_procene(tabla, potez, self.na_potezu)

        v = -1000

        svi_potezi = svi_moguci_potezi(tabla, self.na_potezu)
        # ako nema mogucih poteza vrati vrednost tog cvora
        if len(svi_potezi) == 0:
            return self.funkcija_procene(tabla, potez, self.na_potezu)
        else:
            for p in svi_potezi:
                nova_tabla = Tabla(tabla)
                nova_tabla.izvrsi_potez(p)
                nova_vrednost = self.min_value(nova_tabla, dubina - 1, p, alfa, beta)

                # sad upisujem sve poteze u self.lista_poteza da bih na kraju znao koji da uzmem
                if dubina == self.dubina:
                    self.lista_poteza_i_njihovih_vrednosti.append((nova_vrednost, p))

                v = max(v, nova_vrednost)
                if v >= beta:
                    return v
                alfa = max(alfa, v)
        return v
コード例 #6
0
ファイル: ai.py プロジェクト: samedb/Santorini
    def min_value(self, tabla, dubina, potez, alfa, beta):
        """Vraca minimalnu vrednost podstabla uz upotrebu minimax algoritma sa alfa beta odsecanjem.
        
        :param tabla: Trenutna tabla/stanje igre, raspored figura i spratova
        :type tabla: Tabla
        :param dubina: Dubina do koje treba pretraziti stablo
        :type dubina: int
        :param potez: Potez koji je doveo do ove table/stanja
        :type potez: Potez
        :param alfa: Vrednost najboljeg izbora koji smo pronasli do sada tokom putanje za MAX
        :type alfa: int
        :param beta: Vrednost najboljeg izbofa (ovde je to najmanja vrednost) koju smo pronali do sada tokom putanja za MIN
        :type beta: int
        :return: Vraca minimalnu vrednost podstabla uz uptrebu minimax algoritma sa alfa beta odsecanjem
        :rtype: int
        """       
        if dubina == 0:
            return self.funkcija_procene(tabla, potez, self.na_potezu)

        v = 1000

        svi_potezi = svi_moguci_potezi(tabla, protivnik(self.na_potezu))
        # ako nema mogucih poteza vrati vrednost tog cvora
        if len(svi_potezi) == 0:
            return self.funkcija_procene(tabla, potez, self.na_potezu)
        else:
            for p in svi_potezi:
                nova_tabla = Tabla(tabla)
                nova_tabla.izvrsi_potez(p)
                nova_vrednost = self.max_value(nova_tabla, dubina - 1, p, alfa, beta)

                v = min(v, nova_vrednost)
                if v <= alfa:
                    return v
                beta = min(beta, v)
        return v
コード例 #7
0
ファイル: analizador.py プロジェクト: rdonate/MiniCalc
from analex import AnalizadorLexico
# Código de usuario
#
# Módulos:
#
import generador
import REParser
import code
from gramatica import *
from tabla import Tabla
from errores import errores, avisos
#
# Variables globales:
#
T = Tabla()  # Tabla de símbolos
directos = set()  # Terminales directos encontrados
enparentesis = False  # Cierto si estamos dentro de paréntesis
_nombre = {
    "abre": u"un paréntesis abierto",
    "accion": u"una acción semántica",
    "asterisco": "un asterisco",
    "barra": "una barra",
    "cierra": u"un paréntesis cerrado",
    "codigo": u"un segmento de código",
    "cruz": "una cruz",
    "errordos": "un tratamiento de error",
    "especificacion_lexica": u"una especificación léxica",
    "flecha": "una flecha",
    "interrogante": "un interrogante",
    "mc_EOF": "el fin de fichero",
コード例 #8
0
RED = (255, 0, 0)
BLACK = (0, 0, 0)
light = (170, 170, 170)
dark = (100, 100, 100)
yellow = (252, 247, 135)
size = (800, 800)
screen_width = 800
screen_height = 800
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
pygame.display.set_caption("Checkers")
done = False
QED = False
GUI = True
komp = False
tabla = Tabla()
font1 = pygame.font.SysFont('Corbel', 70)
tabla.drawBoard(screen)
font2 = None
text3 = None
DEPTH = 4


def btton(screen, x, y, text, color):
    pygame.draw.rect(screen, color, [x, y, 400, 100])
    text_rect = text.get_rect(center=(screen_width // 2, y + 50))
    screen.blit(text, text_rect)


class main:
    while not done: