def saisieCoup(jeu):
    """ jeu-> coup
        retourne un coup a jouer
    """

    c = input("joueur" + str(game.getJoueur(jeu)) + ": quelle colonne?")
    coup = [game.getJoueur(jeu) - 1, c]

    while (not (game.coupValide(jeu, coup))):
        c = input("coup non valide recommencer")
        coup = (game.getJoueur(jeu) - 1, c)
    return coup
Beispiel #2
0
def nourrit(jeu, coup):
    """Retourne true si le coup peut nourrir l'adv, faux sinon"""
    j = game.getJoueur(jeu)
    if (j == 1):
        return coup[1] < game.getCaseVal(jeu, coup[0], coup[1])

    return game.getCaseVal(jeu, coup[0], coup[1]) > (5 - coup[1])
Beispiel #3
0
def joueCoup(jeu, coup):

    game.addCoupJoue(jeu, coup)
    j = game.getJoueur(jeu)
    s = jeu[-1]
    e = encadrements(jeu,coup,True)
    adv = (j%2) + 1
    game.setCaseVal(jeu, coup[0], coup[1], j)
    for d in e:
        l = coup[0]
        c = coup[1]
        while True :
            l+=d[0]
            c+=d[1]
            if game.getCaseVal(jeu,l,c)==j :
                break
            game.setCaseVal(jeu,l,c,j)
            s[j-1]+=1
            s[adv-1]-=1
    
    jeu[-1] = [0, 0]
    for i in range(8):
        for j in range(8):
            sc = game.getCaseVal(jeu, i, j)
            if (sc != 0):
                jeu[-1][sc - 1] += 1
    game.changeJoueur(jeu)
    game.resetCoupsValides(jeu)
def checkEncadrementDirection(jeu, l, c, sud, est):
    """jeu*nat*nat*nat*nat*nat->bool
        Verifie si a partir d'une case l+sud,c+est de l'adversaire on peut trouver des pions au joueur courant dans la direction donnee avant de tomber sur une case vide
        Retourne False si l,c n'appartient pas a l'adversaire
        si sud est 1, on se deplace vers le bas
        si sud est -1, on se deplace vers le haut
        si est est 1, on se deplace vers la droite
        si est est -1, on se deplace vers la gauche
    """
    l += sud
    c += est
    if (l > 7) or (l < 0) or (c > 7) or (c < 0):
        return False
    j = game.getJoueur(jeu)
    v = game.getCaseVal(jeu, l, c)
    if (v == j) or (v == 0):
        return False
    while True:
        l += sud
        c += est
        #print str(l)+','+str(c)
        if (l > 7) or (l < 0) or (c > 7) or (c < 0):
            return False
        v = game.getCaseVal(jeu, l, c)
        if (v == 0):
            return False
        if (v == j):
            return True
    return False
Beispiel #5
0
def decision(jeu):
    joueur = game.getJoueur(jeu)
    L = game.getCoupsValides(jeu)
    J = []
    alpha = -5000000
    beta = 5000000
    challenger = 0

    i = 0
    if (joueur == 1):
        i = len(L) - 1
    ok = 0
    while (ok == 0):
        l = estimation(game.getCopieJeu(jeu), L[i], 1, joueur, alpha, beta)
        if (l > alpha):
            alpha = l
            challenger = i
        if (joueur == 1):
            i -= 1
            if (i < 0):
                ok = 1
        else:
            i += 1
            if (i >= len(L)):
                ok = 1

    return L[challenger]
Beispiel #6
0
def getCoupsValides (jeu) :
    """jeu->list(coups)
    renvoie la liste des coups valides
    """ 
    joueur = game.getJoueur(jeu)
    a = estAffame(jeu,game.getAdversaire(jeu))
    return [[joueur-1, coup] for coup in range(6) if coupValide(jeu, [joueur-1, coup], a)]
Beispiel #7
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))
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)
def decision(jeu, ev):
    joueur = game.getJoueur(jeu)
    L = game.getCoupsValides(jeu)
    J = []
    alpha = -5000000
    beta = 5000000
    challenger = 0

    i = 0
    if (joueur == 1):
        i = len(L) - 1
    ok = 0
    while (ok == 0):
        l = estimation(game.getCopieJeu(jeu), L[i], 1, joueur, alpha, beta, ev)
        if (l > alpha):
            alpha = l
            challenger = i
        if (joueur == 1):
            i -= 1
            if (i < 0):
                ok = 1
        else:
            i += 1
            if (i >= len(L)):
                ok = 1
        #J.append(l)
        #jeu2=game.getCopieJeu(jeu)

    #while i< len (J):
    #    if(J[challenger]<J[i]):
    #        challenger=i
    #    i=i+1

    return L[challenger]
Beispiel #10
0
def advaffame(jeu):
    """ jeu -> bool
        checks if the opponent starves (his row is 0)
    """
    j = game.getJoueur(jeu)
    adv = j%2+1
    return sum(jeu[0][adv-1]) == 0
Beispiel #11
0
def nourrit(jeu, coup):
    """ jeu, coup -> bool
        checks if a coup reaches opponents row
    """
    j = game.getJoueur(jeu)
    if (j==1):
        return coup[1]<game.getCaseVal(jeu, coup[0], coup[1])
    return game.getCaseVal(jeu, coup[0], coup[1]) + coup[1] > 5
def saisieCoup(jeu):
    global debut_j,moi
    #debut_j=game.getCopieJeu(jeu)
    moi = game.getJoueur(jeu)
    #adv=game.getJoueurAdverse(jeu)
    
    coup = decision(jeu , game.getCoupsValides(jeu))
    return coup
def saisieCoup(jeu):
    """ jeu -> coup
        Retourne un coup a jouer
    """
    global monJoueur
    monJoueur = game.getJoueur(jeu)

    return decisionAB(jeu)
def saisieCoup(jeu):
    """ jeu -> coup
		Retourne un coup a jouer
	"""
    global moi
    moi = game.getJoueur(jeu)
    coup = decision(jeu, game.getCoupsValides(jeu))
    return coup
Beispiel #15
0
def f3(jeu):
    """ jeu -> int
    	Mobilite
        """
    cv = game.getCoupsValides(jeu)
    if game.getJoueur(jeu) == moi:
        return len(cv)
    else:
        return -len(cv)
Beispiel #16
0
def saisieCoupTr(jeu, ev):
    j = game.getJoueur(jeu)
    if (j == 1):
        j = joueur1
    else:
        j = joueur2

    coup = j.saisieCoup(game.getCopieJeu(jeu), ev)
    return coup
Beispiel #17
0
def joueCoup(jeu, cp):
    jeu[0][cp[0]][cp[1]] = jeu[1]
    jeu[4][game.getJoueur(jeu) - 1] += 1
    d = getEncadrements(jeu, cp)
    for x in d:
        returnPions(jeu, cp, x)
    jeu[3].append(cp)
    jeu[2] = None
    jeu[1] = jeu[1] % 2 + 1
Beispiel #18
0
def saisieCoup(jeu):
    """ jeu -> coup
		Retourne un coup a jouer
	"""
    global moi, lautre, tours, coeff1, coeff2, coeff3
    moi = game.getJoueur(jeu)
    lautre = moi % 2 + 1
    coup = decision(jeu, game.getCoupsValides(jeu))
    return coup
Beispiel #19
0
def joueCoup(jeu, coup):

    game.addCoupJoue(jeu, coup)
    j = game.getJoueur(jeu)
    i = 0
    while i < 6 and game.getCaseVal(jeu, i, coup[1]) == 0:
    	i += 1
    game.setCaseVal(jeu, i - 1, coup[1], j)
    game.changeJoueur(jeu)
    game.resetCoupsValides(jeu)
Beispiel #20
0
def saisieCoup(jeu):
    """ jeu -> coup
    Le coup a jouer apres calcul
    """
    global moi, adv

    moi = game.getJoueur(jeu)
    adv = moi % 2 + 1
    coup = decision(jeu, game.getCoupsValides(jeu))
    return coup
Beispiel #21
0
def evaluation(jeu, coup):
    j = game.getJoueur(jeu)
    game.joueCoup(jeu, coup)
    L = game.getScores(jeu)

    if j == 1:
        a = L[0]
    else:
        a = L[1]
    return a
def adversaireAffame(jeu):
    """jeu->bool
        Retourne vrai si l'adversaire n'a aucune graine dans son jeu
    """
    j=game.getJoueur(jeu)
    j=j%2+1
    for i in range(0,6):
        x=game.getCaseVal(jeu,j-1,i)
        if x!=0:
            return False
    return True
Beispiel #23
0
def saisieCoup(jeu):
    """ jeu -> coup
        Retourne un coup a jouer
    """
    global debut_j, moi
    #debut_j = game.getCopieJeu(jeu)#copie
    moi = game.getJoueur(jeu)
    #adv = game.getJoueurAdverse(jeu)
    adv = moi % 2 + 1
    coup = decision(jeu, game.getCoupsValides(jeu))
    return coup
def saisieCoup(jeu):
    """ jeu -> coup
        Retourne un coup a jouer
    """
    j=game.getJoueur(jeu)
    global moi
    moi=j
    global scores
    scores=game.getScores(jeu)
    l=game.getCoupsValides(jeu)
    return decision(jeu,l)
def peutManger(jeu,c):
    """jeu * Pair[nat nat] -> bool
        Retourne vrai si on peut manger le contenu de la case:
            - c'est une case appartenant a l'adversaire du joueur courant
            - La case contient 2 ou 3 graines
    """
    if c[0]==(game.getJoueur(jeu)-1):
        return False
    v=game.getCaseVal(jeu,c[0],c[1])
    if(v!=2) and (v!=3):
        return False
    return True
Beispiel #26
0
def coups(jeu):
    c = []
    a = game.getJoueur(jeu)
    a = a%1+1
    for i in range (8):
        for j in range(8):
            if(jeu[0][i][j]==0):
                for k in [-1,0,1]:
                    for l in [-1,0,1]:
                        if( (i+k)>=0 and (i+k)<8 and (j+l)>=0 and (j+l)<8 ):
                            if(jeu[0][i+k][i+l]==a):
                                 c.append([i,j])
    return c
def saisieCoup(jeu):
    """ jeu -> coup
        Retourne un coup a jouer
    """

    print("Coups valides: ", game.getCoupsValides(jeu))
    ligneJoueur = game.getJoueur(jeu) - 1
    colonne = int(input("Votre colonne:"))

    while ((ligneJoueur, colonne) not in game.getCoupsValides(jeu)):
        colonne = int(input("Coup invalid ! Votre colonne:"))

    return (ligneJoueur, colonne)
Beispiel #28
0
def returnPions(jeu, cp, x):
    """ jeu->void
        retourne les pions dans la direction x
    """
    joueur = game.getJoueur(jeu)

    while (jeu[0][cp[0] + x[0]][cp[1] + x[1]] == joueur % 2 + 1):
        jeu[0][cp[0] + x[0]][cp[1] + x[1]] = joueur

        jeu[4][joueur - 1] += 1
        jeu[4][joueur % 2] -= 1

        cp = cp[0] + x[0], cp[1] + x[1]
def decision(jeu,coupsV):
    global moi,adv
    moi = game.getJoueur(jeu)
    adv = game.getJoueurAdverse(jeu)
    #coup=coupsV[0]
    maxi =-1234567
    
    for c in coupsV:
        est = estimation(jeu,c, 1)
        #print ("Decision",c,s)
        if est >= maxi:
            maxi=est
            coup = c
    return coup
def getCoupValides(jeu):
    def coupValide(jeu,coup,checknourrit):
        v=game.getCaseVal(jeu,coup[0],coup[1])
        if v==0:
            return False
        if checknourrit:
            if coup[0]==0:
                return v>coup[1]
            else:
                return v>5-coup[1]
        return True
    j=game.getJoueur(jeu)
    a=estaffame(jeu,j%2+1)
    return [[j-1,c]for c in range(6) if coupValide(jeu,[j-1,c],a)]