Пример #1
0
def play():

    jeu = game.initialiseJeu()

    while len(jeu[3]) < 4:

        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):
            break
        if len(valides) != 0:
            coup = random.choice(valides)

        game.joueCoup(jeu, coup)

    while True:

        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):
            break

        if len(valides) != 0:

            coup = game.saisieCoup(jeu)

        game.joueCoup(jeu, coup)

    #print("Le gagnant est : " + str(game.getGagnant(jeu)))

    return fitness(jeu)
def estimation(jeu, coup, prf, joueur):
    game.joueCoup(jeu, coup)
    #L= game.getCoupsValides(jeu)
    if game.finJeu(jeu):
        g = game.getGagnant(jeu)
        if g == joueur:
            return 100000
        elif g == 0:
            return -100
        else:
            return -100000
    elif prf >= 2:
        return evaluation(jeu, coup, joueur)

    else:
        L = game.getCoupsValides(jeu)
        m = []
        for i in L:
            jeu2 = game.getCopieJeu(jeu)
            #game.joueCoup(jeu2,i)
            m.append(estimation(jeu2, i, prf + 1, joueur))

        if game.getJoueur(jeu) == joueur:
            return max(m)
        else:
            return min(m)
Пример #3
0
def saisieCoupSimuMin(profondeur, jeu, coup):
    """ jeu -> coup
	Retourne un coup a jouer aleatoire 
	"""
    game.joueCoup(jeu, coup)

    if profondeur == 0:
        return eval(jeu)

    valides = game.getCoupsValides(jeu)

    if game.finJeu(jeu):

        return eval(jeu)

    else:

        global joueur

        imin = 0
        mini = 1000

        for i in range(len(jeu[2])):

            score = saisieCoupSimuMax(profondeur - 1, game.getCopieJeu(jeu),
                                      jeu[2][i])

            if score < mini:

                mini = score
                imin = i

    return jeu[2][imin]
Пример #4
0
def JoueN(
    joueur1, joueur2
):  # joue 10 partie (variable N) et compte le nombre de victoire de joueur 1 (l'eleve)
    global j1, j2
    victoires = 0

    for i in range(N):
        game.joueur1 = othello_alea  #transforme mes joueur en joueur aleatoire
        game.joueur2 = othello_alea  #permet de tirer des coups aleatoire au debut, sinon tjr meme partie
        jeu = game.initialiseJeu()
        while not game.finJeu(jeu):
            coup = game.saisieCoup(
                jeu)  #joues different coups tant que cest pas la fin du jeu
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)
                   ) == 4:  #apres 4 coups aleatoire,le jeu commence vraiment
                game.joueur2 = joueur2
                game.joueur1 = joueur1
            g = game.getGagnant(jeu)
        if g == j1:  #on compte le nbre de victoire de leleve
            victoires += 1
        if i == N / 2:
            game.joueur1 = joueur2  #apres N/2 partie, on echange les joeuur , pour quon ai pas le meme joueur qui commence
            game.joueur2 = joueur1
            j1 = game.joueur2

    j1 = game.joueur1

    return victoires
Пример #5
0
def estimation(jeu, coup, p):
    global nbNoeuds
    nbNoeuds += 1
    copie = game.getCopieJeu(jeu)
    game.joueCoup(copie, coup)
    if game.finJeu(jeu):
        g = game.getGagnant(jeu)
        if g == moi:
            return 100000
        else:
            if g == 0:
                return -100
            else:
                return -100000
    if p == prof:
        l = parcoursPlateau(jeu)
        return evaluation(copie, l)
    cp = game.getCoupsValides(copie)
    m = 0
    for c in cp:
        s = estimation(copie, c, p + 1)
        if p % 2 == 0:
            if s >= m:
                m = s
        else:
            if s <= m:
                m = s
    return m
Пример #6
0
def joueN(n):
    global y
    v1, j1 = 0, 1
    """
# =============================================================================
#         - v1 (nombre de victoires du joueur 1), v2 (nombre de victoires du joueur 2), mn (nombre de matchs nuls)
#         - sc1 et sc2 (scores moyens de chaque joueur)
#         - nbc (nombre de coups joues en moyenne)
# =============================================================================
    """
    #lancer une partie, 3 coups alea au debut puis chaque joueur se met a jouer
    for i in range(n):
        game.joueur1 = awele_alea
        game.joueur2 = awele_alea
        jeu = game.initialiseJeu()
        while not game.finJeu(jeu):
            coup = game.saisieCoup(jeu)
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)) == 4:
                game.joueur1 = game.joueurinter1
                game.joueur2 = game.joueurinter2

        if game.getGagnant(jeu) == j1:
            v1 += 1

    v1 = float(v1) / float(n)  #ratio victoire/nbre de match
    y.append(
        v1
    )  #y=liste de victoire éfféctué (ou on ajoute a la fin de la liste le nombre de victoire pour n partie faite)
def estimation(jeu, coup, p, a, b):
    copie = game.getCopieJeu(jeu)
    game.joueCoup(copie, coup)
    if game.finJeu(copie):
        g = game.getGagnant(copie)
        if g == moi:
            return 12345
        else:
            if g == 0:
                return -123
            else:
                return -12345
    if p == prof:
        return evaluation(copie)
    else:
        cp = game.getCoupsValides(copie)
        if p % 2 == 0:
            m = a
        else:
            m = b
        for c in cp:
            s = estimation(copie, c, p + 1, a, b)
            if p % 2 == 0:
                if s >= m:
                    a = s
                    m = s
                if s > b:
                    return b
            else:
                if s <= m:
                    b = s
                    m = s
                if s < a:
                    return a
        return m
Пример #8
0
def saisieCoupSimuMax(profondeur, jeu, coup):
    """ jeu -> coup
    Retourne un coup a jouer aleatoire
    """
    game.joueCoup(jeu, coup)
    valides = game.getCoupsValides(jeu)

    if profondeur == 0 or game.finJeu(jeu):
        return eval(jeu)
    else:

        global joueur

        maxi = -1000

        for i in range(len(jeu[2])):

            score = saisieCoupSimuMin(profondeur - 1, game.getCopieJeu(jeu),
                                      jeu[2][i])

            if score > maxi:

                maxi = score

    return maxi
Пример #9
0
def estimation(jeu, coup, p):
    global nombreDeNoeuds
    nombreDeNoeuds += 1
    copie = game.getCopieJeu(jeu)
    game.joueCoup(copie, coup)
    if game.finJeu(copie):
        g = game.getGagnant(copie)
        if g == moi:  #si c'est moi le vainqueur alors estimation élevée
            return 12345
        else:
            if g == 0:  #si c'est nul alors estimation moyenne
                return -123
            else:  #pire cas estimation faible
                return -12345
    if p >= prof:
        #max profondeur donc on evalue
        return evaluation(jeu, copie)
    else:
        coupsV = game.getCoupsValides(copie)
        mValue = 0
        for c in coupsV:
            est = estimation(copie, c, p + 1)
            if p % 2 == 0:  #MAX
                if est >= mValue:
                    mValue = est
            else:  #MIN
                if est <= mValue:
                    mValue = est

    return mValue
Пример #10
0
def estimation(jeu, coup, p):
    #retourne le score d'utilite pour un coup donne
    copie = game.getCopieJeu(jeu)
    game.joueCoup(copie, coup)
    if game.finJeu(copie):
        g = game.getGagnant(copie)
        if g == moi:
            return 100000000
        else:
            if g == 0:
                return -500
            else:
                return -100000000

    if p == prof:
        return evaluation(copie)

    if p < prof:
        coups = game.getCoupsValides(copie)
        max_min = estimation(copie, coups[0], p + 1)
        for c in coups[1:]:
            s = estimation(copie, c, p + 1)
            if p % 2 == 0 and s > max_min:
                max_min = s
            if p % 2 != 0 and s < max_min:
                max_min = s
        return max_min
Пример #11
0
def CoupMin(profondeur, jeu, coup):
    """ jeu -> coup
    Retourne un coup a jouer aleatoire
    """
    game.joueCoup(jeu, coup)
    valides = game.getCoupsValides(jeu)

    if profondeur == 0 or game.finJeu(jeu):
        return eval(jeu)

    else:

        global Alpha
        global Beta

        score = 10000

        for i in range(len(jeu[2])):

            score = min(
                score, CoupMax(profondeur - 1, game.getCopieJeu(jeu),
                               jeu[2][i]))

            if score <= Alpha:

                return score

            Beta = min(Beta, score)

    return score
Пример #12
0
def joueplsr():
    nbrepartie = 0
    j1 = 0
    j2 = 0
    eg = 0
    tj1 = 0
    tj2 = 0
    tt = time.time()

    while (nbrepartie < NBPARTIE):
        if (nbrepartie == (NBPARTIE / 2)):
            global joueur2
            global joueur1

            print("score mi-temps(" + str(nbrepartie) + " partie):\nj1: " +
                  str(j1) + " \nscore j2: " + str(j2) + "\nnb d'equalite : " +
                  str(eg) + "\n")
            s = joueur1
            joueur1 = joueur2
            joueur2 = s
            a = j1
            j1 = j2
            j2 = a

            a = tj1
            tj1 = tj2
            tj2 = a

        jeu = game.initialiseJeu()
        it = 0

        while ((it < 100) and (not (game.finJeu(jeu)))):
            if (it < 4):
                coup = Random.saisieCoup(game.getCopieJeu(jeu))
                game.joueCoup(jeu, coup)
            else:
                t1 = time.time()
                coup = saisieCoup(jeu)
                if game.getJoueur(jeu) == 1:
                    tj1 += time.time() - t1
                else:
                    tj2 += time.time() - t1
                game.joueCoup(jeu, coup)
            it += 1
        g = game.getGagnant(jeu)
        tj1 = tj1 / it
        tj2 = tj2 / it

        if (g == 1):
            j1 += 1
        if (g == 2):
            j2 += 1
        if (g == 0):
            eg += 1
        nbrepartie += 1

    tt = time.time() - tt
    print("score final :\nj1: " + str(j2) + "temps/coup=" + str(tj2) +
          "\nj2: " + str(j1) + "temps/coup=" + str(tj2) +
          "\nnb d'equalite : " + str(eg))
Пример #13
0
def CoupMax(profondeur, jeu, coup, leftest):
    """ jeu -> coup
	Retourne un coup a jouer aleatoire 
	"""
    game.joueCoup(jeu, coup)

    valides = game.getCoupsValides(jeu)

    if game.finJeu(jeu) or profondeur == 0:

        return eval(jeu, coup, leftest)

    else:

        global Alpha
        global Beta

        score = -10000
        leftest = True

        for i in range(len(jeu[2])):

            score = max(
                score,
                CoupMin(profondeur - 1, game.getCopieJeu(jeu), jeu[2][i],
                        leftest))
            leftest = False

            if score >= Beta:

                return score

            Alpha = max(Alpha, score)

    return score
def estimation(jeu,coup,prof):
    """ jeu * coup * prof -> number
        Estime la valeur d'un coup
    """
    
    global nbNoeuds
    
    nbNoeuds+=1
    copie=game.getCopieJeu(jeu)
    game.joueCoup(copie,coup)
    
    if(game.finJeu(copie)):
        #A Completer
        
    return evaluation(copie)

    
def evaluation(jeu):
    """ jeu->number
        evalue une situation de jeu pour le joueur moi
    """
    l=getEvals(jeu)
    return dotProduct(l,params)
    

def dotProduct(l1,l2):
    #A Completer
    

def getEvals(jeu):
    return [evalScores(jeu),evalPos(jeu)]

def evalScores(jeu):
    """ jeu -> List[number}
        evalue une situation de jeu en faisant la difference entre le score de moi et le score de l'adversaire
    """
    autre=moi%2+1
    sc=game.getScores(jeu)
    return sc[moi-1]-sc[autre-1]


def evalPos(jeu):
    diffExtr = 0
    
    p = 0.8
    plateau=game.getPlateau(jeu)
    j1=0
    j2=0
    ligne=plateau[0]
    ligne2=plateau[1]
    for i in range(6):
        j1 += p * ligne[i]
        j2 += p * ligne2[-i-1]
        p-=0.1

    diffExtr=j1-j2
    if(moi==2):
       diffExtr=-diffExtr
       
    return diffExtr
Пример #15
0
def estimation(jeu, coup, profondeur):
    copie = game.getCopieJeu(jeu)
    game.joueCoup(copie, coup)
    if game.finJeu(copie):
        gagnant = game.getGagnant(copie)
        if gagnant == moi:
            return 10000
        elif gagnant == 0:
            return -100
        else:
            return -10000

    if profondeur == PMAX:
        return evaluation(copie)

    listeCoups = game.getCoupsValides(copie)
    if profondeur % 2 == 0:
        scoremax = -10000
        for c in listeCoups:
            score_estime = estimation(copie, c, profondeur + 1)

            if score_estime > scoremax:
                scoremax = score_estime
        return scoremax

    if profondeur % 2 == 1:
        scoremin = 10000
        for c in listeCoups:
            score_estime = estimation(copie, c, profondeur + 1)
            if score_estime < scoremin:
                scoremin = score_estime
        return scoremin
Пример #16
0
def jouePARTIE(j1, j2):
    global playerONE
    global playerTWO

    #On initialise a ALEA les 4 premier Coups pr que ce soit équilibré et pr éviter même partie.
    for i in range(1):
        jeu = game.initialiseJeu()
        game.joueur1 = othello_alea
        game.joueur2 = othello_alea

        while not game.finJeu(jeu):
            #game.affiche(jeu)
            coup = game.saisieCoup(jeu)
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)) == 4:
                game.joueur1 = j1
                game.joueur2 = j2

            if i == nbRounds / 2:
                game.joueur1 = j2
                game.joueur2 = j1
                #playerONE=2
                #playerTWO=1

            #print ("Nombre de tours : " + str(len(game.getCoupsJoues(jeu))))

    #print("Gagnant de la partie est : ",game.getGagnant(jeu))
    gagnant = game.getGagnant(jeu)

    return gagnant
Пример #17
0
def estimation(jeu, coup, p):
    global nbNoeuds
    nbNoeuds+=1

    copie = game.getCopieJeu(jeu)

    game.joueCoup(copie,coup)
    if game.finJeu(jeu):
        g=game.getGagnant(jeu)
        if g == moi:#si c'est moi le vainqueur alors estimation élevée
            return 12345
        else:
            if g == 0:#si c'est nul alors estimation moyenne
                return -123
            else:#pire cas estimation faible
                return -12345
    if p >= prof:
        liste_parcoursPlat= parcoursPlateau(jeu)
        return evaluation(copie,liste_parcoursPlat)
    
    coupsV=game.getCoupsValides(copie)
    mValue=0
    for c in coupsV:
        est =estimation(copie,c,p+1)
        if p%2 == 0:#MAX
            if est >= mValue:
                mValue= est
        else:#MIN
            if est <=mValue:
                    mValue = est
    return mValue
Пример #18
0
def estimationMIN(jeu, p=1):
    Vmin = float("inf")
    if game.finJeu(jeu):
        g = game.getGagnant(jeu)
        if g == monJoueur:
            return 1000
        else:
            return -1000
    if p == Pmax:
        #print("VMIN:",Vmin)
        return evaluation(jeu)

    #game.changeJoueur(jeu)
    coups = game.getCoupsValides(jeu)

    for cp in coups:
        j = game.getCopieJeu(jeu)
        game.joueCoup(j, cp)

        v = estimationMAX(j, p + 1)
        #print(cp," ",v," ", p)

        if Vmin > v:
            Vmin = v

# print("VMIN:",Vmin)

    return Vmin
Пример #19
0
def joue():
    jeu = game.initialiseJeu()
    while (not game.finJeu(jeu)):
        game.affiche(jeu)
        c = game.saisieCoup(game.getCopieJeu(jeu))
        jeu = game.joueCoup(jeu, c)
    g = game.getGagnant(jeu)
    return g
Пример #20
0
def joue():
    jeu=game.initialiseJeu()
    it=0
    while((it<100)and (not game.finJeu(jeu))):
        game.affiche(jeu)
        coup=saisieCoup(jeu)
        game.joueCoup(jeu,coup)
        it+=1

    game.affiche(jeu)
    print("gagnant="+str(game.getGagnant(jeu)+":"+ str(game.getScore(jeu))))

    return jeu
Пример #21
0
def joue():
    """void -> nat
    retourne un gagnant"""
    jeu = game.initialiseJeu()

    while not game.finJeu(jeu):
        #game.affiche(jeu)
        print "joueur : {}".format(game.getJoueur(jeu))
        coup = game.saisieCoup(jeu)
        print "coup joue : {}".format(coup)
        game.joueCoup(jeu, coup)
        print "score : {}".format(game.getScores(jeu))
        #game.affiche(jeu)
    return game.getGagnant(jeu)
Пример #22
0
def jouentrainement(ev):
    global joueur2
    global joueur1
    nbrepartie=0
    j1=0
    j2=0
    eg=0
    switch=1
    
    while(nbrepartie<NBPARTIE):
        if (nbrepartie==(NBPARTIE/2)):    
            s=joueur1
            joueur1=joueur2
            joueur2=s
            a=j1
            j1=j2
            j2=a
            switch=2
            
        jeu=game.initialiseJeu()
        it=0
        
        while((it<100)and (not(game.finJeu(jeu)))):
            if (it<4):
                coup=joueur_alea.saisieCoup(game.getCopieJeu(jeu))
                game.joueCoup(jeu,coup)
            else :
                if(game.getJoueur(jeu)==switch):
                    coup=saisieCoupTr(jeu,ev)
                else:
                    coup=saisieCoup(jeu)
                game.joueCoup(jeu,coup)
            it+=1
        g=game.getGagnant(jeu)
        
        if (g==1):
            j1+=1
        if(g==2):
            j2+=1
        if(g==0):
            eg+=1    
        nbrepartie+=1

        if (nbrepartie==NBPARTIE):
            s=joueur2   
            joueur2=joueur1
            joueur1=s
            

    return j2
def joue(ev1, ev2):
    it = 0
    jeu = game.initialiseJeu()
    while ((it < 100) and (not (game.finJeu(jeu)))):
        if (it < 4):
            coup = Random.saisieCoup(game.getCopieJeu(jeu))
            game.joueCoup(jeu, coup)
        else:
            if (game.getJoueur(jeu) == 1):
                coup = Alpha_Beta_Train.saisieCoup(jeu, ev1)
            else:
                coup = Alpha_Beta_Train.saisieCoup(jeu, ev2)
            game.joueCoup(jeu, coup)
        it += 1
    return game.getGagnant(jeu)
Пример #24
0
def joue():
    """void -> nat
    retourne un gagnant"""
    jeu = game.initialiseJeu()

    for i in range(4):
        random.seed()
        coup = joueur_aleatoire.saisieCoup(jeu)
        game.joueCoup(jeu, coup)

    while not game.finJeu(jeu):
        #game.affiche(jeu)
        coup = game.saisieCoup(jeu)
        game.joueCoup(jeu, coup)
    return game.getGagnant(jeu)
Пример #25
0
def play():

    global W
    global Alpha

    jeu = game.initialiseJeu()
    print(game.joueur1)

    while True:

        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)
        print(EvalCoupHorizon1(game.getCopieJeu(jeu), valides[0]))
        print(oracle.scorescoups(jeu)[0])
        """if jeu[2] !=None:
            scoresoracle= oracle.scorescoups(jeu)


            o=EvalCoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu))

            for i in range(len(valides)):
                if scoresoracle[i] < max(scoresoracle):
                    if (o-EvalCoupHorizon1(game.getCopieJeu(jeu),valides[i]))<1:

                        W[0]= W[0]-Alpha*(h1CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h1CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))
                            
                        W[1]= W[1]-Alpha*(h2CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h2CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[2]= W[2]-Alpha*(h3CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h3CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[3]= W[3]-Alpha*(h4CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h4CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[4]= W[4]-Alpha*(h5CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h5CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[5]= W[5]-Alpha*(h6CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h6CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))
        """

        if game.finJeu(jeu):

            break

        elif valides != None:

            coup = game.saisieCoup(jeu)

        game.joueCoup(jeu, coup)

    return game.getGagnant(jeu)
Пример #26
0
def jouePARTIE():
    jeu = game.initialiseJeu()
    while not game.finJeu(jeu):
        game.affiche(jeu)
        coup = game.saisieCoup(jeu)
        game.joueCoup(jeu, coup)
        print(
            "Nombre de tours : " + str(len(game.getCoupsJoues(jeu)))
        )  #str permet de cast, sinon on peut pas concatener un str et un int
    if game.getGagnant(jeu) == 0:
        print("\nEgalite parfaite !")
    else:
        print("\nLe joueur " + str(game.getGagnant(jeu)) + " a gagne !")
    print("\nPlateau de fin de jeu: ")
    game.game.affiche(jeu)
    g = game.getGagnant(jeu)
    return g
Пример #27
0
def saisieCoupSimuMin(profondeur, jeu, coup):
    """ jeu -> coup
    Retourne un coup a jouer aleatoire
    """
    global joueur

    Pscore = jeu[4][joueur]
    game.joueCoup(jeu, coup)
    valides = game.getCoupsValides(jeu)

    if profondeur == 0 or game.finJeu(jeu):
        return eval(coup)

    else:

        score = []

        for i in range(len(jeu[2])):

            score.append(
                saisieCoupSimuMax(profondeur - 1, game.getCopieJeu(jeu),
                                  jeu[2][i]))

            estimate = []
            si = 0

            for s in score:

                i = s - 639
                si += i
                estimate.append(i)

            for ie in range(len(estimate)):

                estimate[ie] = estimate[ie] * 1.0 / si * 1.0

            finalScore = 0
            for fi in range(len(estimate)):

                score[fi] = score[fi] * 1.0 * estimate[fi]
                finalScore += score[fi]

        return finalScore
Пример #28
0
def estimationMIN(jeu, p=1):
    if game.finJeu(jeu):
        g = game.getGagnant(jeu)
        if g == monJoueur:
            return 1000
        else:
            return -1000
    if p == Pmax:
        return evaluation(jeu)

    Vmin = float("inf")
    for cp in game.getCoupsValides(jeu):
        j = game.getCopieJeu(jeu)
        game.joueCoup(j, cp)

        v = estimationMAX(j, p + 1)
        if Vmin > v:
            Vmin = v
    return Vmin
Пример #29
0
def saisieCoupSimuNegaBeta(profondeur, jeu, coup):
    """ jeu -> coup
	Retourne un coup a jouer aleatoire 
	"""
    global enemi
    global PROFONDEUR

    ScorePrecedent = jeu[4]
    game.joueCoup(jeu, coup)
    valides = game.getCoupsValides(jeu)

    if profondeur == PROFONDEUR or game.finJeu(jeu):

        if profondeur % 2 == 0:
            return eval(jeu, ScorePrecedent)
        else:
            return -eval(jeu, ScorePrecedent)

    else:

        global precedent
        imax = 0
        maxi = -1000

        for i in range(len(jeu[2])):

            score = saisieCoupSimuNegaBeta(profondeur + 1,
                                           game.getCopieJeu(jeu), jeu[2][i])

            if score >= precedent:

                return calcul(
                    score, (jeu[4][joueur - 1] - ScorePrecedent[joueur - 1] -
                            jeu[4][enemi - 1] - ScorePrecedent[enemi - 1]))

            elif score > maxi:

                maxi = score

        precedent = max
        return calcul(maxi, (jeu[4][joueur - 1] - ScorePrecedent[joueur - 1] -
                             jeu[4][enemi - 1] - ScorePrecedent[enemi - 1]))
Пример #30
0
def estimation(jeu, coup, prf, joueur, alpha, beta):
    global n
    game.joueCoup(jeu, coup)
    if game.finJeu(jeu):
        n = n + 1
        g = game.getGagnant(jeu)
        if g == joueur:
            return 100000
        elif g == 0:
            return -100
        else:
            return -100000
    elif prf >= PRONF:
        n = n + 1
        return evaluation(jeu, coup, joueur)

    else:
        L = game.getCoupsValides(jeu)

        if (joueur == game.getJoueur(jeu)):
            val = -5000000
            for i in L:
                n = n + 1
                jeu2 = game.getCopieJeu(jeu)
                val = max(val, estimation(jeu2, i, prf + 1, joueur, alpha,
                                          beta))
                if val >= beta:
                    return val + 1
                alpha = max(val, alpha)
            return val
        else:
            val = 5000000
            for i in L:
                n = n + 1
                jeu2 = game.getCopieJeu(jeu)
                val = min(val, estimation(jeu2, i, prf + 1, joueur, alpha,
                                          beta))
                if val <= alpha:
                    return val - 1
                beta = min(val, beta)
            return val