# mastermind.py

Created by ph-moutou

Created on June 11, 2018

3.09 KB

Pour jouer avec la calculatrice, taper mm(123) : elle choisit une combinaison de 4 pions dont les couleurs sont choisies parmi les 6 proposées. Taper une combinaison de 4 chiffres suivie de EXE, la calculatrice répond par une ou plusieurs fiches blanches (bonne couleur, mal placé) ou noires (bonne couleur, bien placé). Attention, vous n’avez droit qu’à 10 essais!

```from random import *
from kandinsky import *
from math import *

def segH(x1,x2,y):
for i in range(x2-x1):
set_pixel(x1+i,y,color(0,0,0))

def segV(x,y1,y2):
for i in range(y2-y1):
set_pixel(x,y1+i,color(0,0,0))

def carre(x,y,c,l):
for i in range(l):
for j in range(l):
set_pixel(x+i,y+j,c)

def cercle(x0,y0,r,c,e):
for i in range(2*e):
xd=x0-int((r-i*0.5)/sqrt(2))
xf=x0+int((r-i*0.5)/sqrt(2))
for x in range(xd,xf+1):
x1=x
y1=y0+int(sqrt((r-i*0.5)**2-(x-x0)**2))
set_pixel(x,y1,c)
for j in range(3):
x2=x0+y1-y0
y2=y0+x0-x1
set_pixel(x2,y2,c)
x1,y1=x2,y2

def couleur(c):
cl=[color(255,255,0),color(0,0,255),color(255,0,0),color(0,255,0),
color(255,255,255),color(0,0,0)]
return cl[c]

def plateau():
carre(5,50,color(200,190,210),150)
carre(165,50,color(200,190,210),150)
for i in range(5):
draw_string(str(i),10,175-i*30)
draw_string(str(i+5),170,175-i*30)
for i in range(6):
segH(5,155,50+i*30)
segH(165,315,50+i*30)
for i in range(2):
segV(5+i*160,50,200)
segV(25+i*160,50,200)
segV(125+i*160,50,200)
segV(155+i*160,50,200)
set_pixel(155+i*160,200,color(0,0,0))#dernier pt
for i in range(270):
for j in range(31):
set_pixel(20+i,10+j,color(200,190,210))
for i in range(6):
segH(20+45*i,65+45*i,10)
segH(20+45*i,65+45*i,40)
segV(20+45*i,10,40)
segV(65+45*i,10,40)
set_pixel(290,40,color(0,0,0))
draw_string(str(i+1),27+45*i,17)
cercle(50+45*i,25,10,couleur(i),10)
prepare(0)

def prepare(c):
for i in range(4):
cercle(38+25*i+160*(c//5),185-30*(c%5),3,color(0,0,0),3)

def dessine(ch,c):
for i in range(4):
cercle(38+25*i+160*(c//5),185-30*(c%5),10,couleur(int(ch[i])-1),10)

def evalue(r,c):
b=0
for i in range(4):
if r[i]>0:
cercle(135+10*(b%2)+160*((c-1)//5),180-30*((c-1)%5)+10*(b//2),3,couleur(3+r[i]),3)
b+=1

def entrer():
c=''
while (len(c)==4 and 0<int(c[0])<7
and 0<int(c[1])<7 and 0<int(c[2])<7
and 0<int(c[3])<7)==False: c=input()
return c

def mm(s):
seed(s)
plateau()
combi,R="",4*[0]
for i in range(4):
combi+=str(randint(0,5))
stock=combi
cp=0
while sum(R)!=8 and cp<10:
R=4*[0]#resultat(0:mc,1:bcmp,2bcbp)
choix=entrer()
dessine(choix,cp)
print(cp,choix,end=" - ")
cp+=1
bc=0
#test bcbp
for i in range(4):
if choix[i]==combi[i]:
R[bc]+=2
bc+=1
combi=combi[0:i]+"6"+combi[i+1:4]
choix=choix[0:i]+"6"+choix[i+1:4]
#test bcmp
for i in range(4):
for j in range(4):
if choix[i]==combi[j] and choix[i]!="6":
R[bc]+=1
bc+=1
combi=combi[0:j]+"6"+combi[j+1:4]
choix=choix[0:i]+"6"+choix[i+1:4]
evalue(R,cp)
if cp<10 and sum(R)!=8:
prepare(cp)
for i in range(4):
print(R[i],end="")
print("")
combi=stock
if cp<10:
draw_string("Bravo!",140,205)
print("Solution trouvee en {} coups".format(cp))
else:
draw_string("Echec!",140,205)
print("Il fallait trouver {}".format(combi))```