L’ultime coup prime ! Petit jeu de cartes et de jetons.
from random import choice,randint from kandinsky import * from ion import * from time import sleep #images=(('#&###','#$$$#','#$$$#','#$$$#','#&###'),('$$$#','#%$#','$$$#','$$$#','#&###'),('#&###','%$#','#&###','#$%#','#&###'),('#&###','%$#','#&###','%$#','#&###'),('#$$$#','#$$$#','#&###','%$#','%$#'),('#&###','#$%#','#&###','%$#','#&###'),('#&###','#$%#','#&###','#$$$#','#&###'),('#&###','%$#','$$$#','#$%#','#$%#'),('#&###','#$$$#','#&###','#$$$#','#&###'),('#&###','#$$$#','#&###','%$#','#&###')) images=((),("'$%#", '&%%#', '%$$$%#', "'$%#", "'$%#", "'$%#", '%(#'),('&&$#', '%$&$#', ')$#', '($$#', "'$%#", '&$&#', '%(#'),('','%(#', '($$#', "'$%#", '&&$#', ')$#', ')$#', "%'$#")) def DessineImage(truc,x,y,clr="b",clr_fond="w",zoom=1): longueur=(1,len(str(truc)))[len(str(truc))<3] for element in range(longueur): if str(truc)[element]=="-": fill_rect(x,y+3*zoom,zoom*5,zoom*1,clr) elif str(truc)[element]=="+": fill_rect(x,y+3*zoom,zoom*5,zoom*1,clr) fill_rect(x+2*zoom,y+zoom,zoom*1,zoom*5,clr) else: if len(str(truc))<3: motif=images[int(str(truc)[element])] else: motif=icones[truc] for ligne in range(len(motif)): elt,rang = motif[ligne],0 for pos in range(0,len(elt)-2,2): for k in (0,1): fill_rect(x+zoom*rang+zoom*5*element,y+zoom*ligne,zoom*(ord(elt[pos+k])-35),1*zoom,(clr_fond,clr)[k]) rang+=ord(elt[pos+k])-35 #DessineImage("+2",50,50,"r","w") #sleep(10) Pioche=["Jeton+1","Jeton-1"]*3\ +["Jeton+2","Jeton-2"]*2\ +["Jeton+3","Jeton-3"]\ +["Transfert121","Transfert122","Transfert123"]\ +["Transfert131","Transfert132","Transfert133"]\ +["Transfert141","Transfert142","Transfert143"]\ +["Transfert231","Transfert232","Transfert233"]\ +["Transfert241","Transfert242","Transfert243"]\ +["Transfert341","Transfert342","Transfert343"]\ +["Rotation+","Rotation-"]*7\ +["Echange12","Echange13","Echange14","Echange23","Echange24","Echange34"]*4\ +["Carte+1"] def AfficherJetons(joueur,clr="k"): for i in range(18): DessineJeton(20+210*(joueur>1)+12*(i%6),110-70*(0<joueur<3)+12*(i//6),("w",clr)[i<Jetons[joueur]]) def AffichagePlateau(que_jetons=False): for j in range(4): if not que_jetons: draw_string("J"+str(j+1),20+210*(j>1),85-70*(0<j<3),"b","pink") # nb carte MiniCarte(40+210*(j>1),70-70*(0<j<3),"k","g") #fill_rect(45+210*(j>1),85-70*(0<j<3),10,18,"brown") draw_string("×"+str(len(Mains[j])),70+210*(j>1),85-70*(0<j<3),"b") # jetons AfficherJetons(j) def AfficherMain(j): for l in range(len(Mains[j])): DessineCarte(5+53*l,155,Mains[j][l]) def DessineFlecheH(x,y,clr): for (i,j) in ((0,2),(1,1),(3,1),(4,2)): set_pixel(x+i,y+j,clr) fill_rect(x+2,y,1,5,clr) def DessineFlecheB(x,y,clr): for (i,j) in ((0,2),(1,3),(3,3),(4,2)): set_pixel(x+i,y+j,clr) fill_rect(x+2,y,1,5,clr) def DessineFlecheD(x,y,clr): for (i,j) in ((0,2),(1,3),(3,3),(4,2)): set_pixel(x+j,y+i,clr) fill_rect(x,y+2,5,1,clr) def DessineFlecheG(x,y,clr): for (i,j) in ((0,2),(1,1),(3,1),(4,2)): set_pixel(x+j,y+i,clr) fill_rect(x,y+2,5,1,clr) def DessineFleche31(x,y,clr): for i in range(5): set_pixel(x+i,y+4-i,clr) fill_rect(x+1,y+4,2,1,clr) fill_rect(x,y+2,1,2,clr) def DessineFleche13(x,y,clr): for i in range(5): set_pixel(x+i,y+4-i,clr) fill_rect(x+2,y,2,1,clr) fill_rect(x+4,y+1,1,2,clr) def DessineFleche24(x,y,clr): for i in range(5): set_pixel(x+i,y+i,clr) fill_rect(x+2,y+4,2,1,clr) fill_rect(x+4,y+2,1,2,clr) def DessineFleche42(x,y,clr): for i in range(5): set_pixel(x+i,y+i,clr) fill_rect(x+1,y,2,1,clr) fill_rect(x,y+1,1,2,clr) def DessineJetonCasse(x,y,clr): fill_rect(x,y,8,1,clr) fill_rect(x,y+1,1,8,clr) fill_rect(x+10,y+2,1,8,clr) fill_rect(x+3,y+10,8,1,clr) fill_rect(x+2,y+2,2,2,clr) fill_rect(x+2,y+5,1,2,clr) fill_rect(x+3,y+4,1,2,clr) set_pixel(x+4,y+3,clr) set_pixel(x+5,y+2,clr) fill_rect(x+7,y+7,2,2,clr) fill_rect(x+8,y+4,1,2,clr) fill_rect(x+7,y+5,1,2,clr) set_pixel(x+6,y+7,clr) set_pixel(x+5,y+8,clr) def DessineJeton(x,y,clr): # cadre fill_rect(x,y,8,1,clr) fill_rect(x,y,1,8,clr) fill_rect(x,y+8,9,1,clr) fill_rect(x+8,y,1,8,clr) # motif for i in (0,1): for j in (0,1): fill_rect(x+2+3*i,y+2+3*j,2,2,clr) set_pixel(x+4,y+3+2*j,clr) set_pixel(x+3+2*i,y+4,clr) def MiniCarte(x,y,clr,clr_cadre): fill_rect(x+15,y+14,13,1,clr_cadre) fill_rect(x+14,y+15,1,19,clr_cadre) fill_rect(x+28,y+15,1,19,clr_cadre) fill_rect(x+15,y+34,13,1,clr_cadre) for n in (-1,1): for i in range(3,12): # haut et bas j=(3,3,3,2,2,2)[i%6] set_pixel(x+14+i,y+24+(10-j)*n,clr) if 4<=i<=10: j=(5,5,5,5,4,5,5,5,5,5,4)[i%11] set_pixel(x+14+i,y+24+(10-j)*n,clr) for k in range(3,19): # gauche et droite j=(3,3,3,2,2,2)[k%6] set_pixel(x+21+(7-j)*n,y+14+k,clr) if 6<=k<=14: j=(4,5,5,5,5)[k%5] set_pixel(x+21+(7-j)*n,y+14+k,clr) def DessineCarte(x,y,carte,clr_cadre="g",que_cadre=False,effacement=False): if effacement: clr_cadre="w" fill_rect(x+1,y,41,1,clr_cadre) fill_rect(x+1,y+58,41,1,clr_cadre) fill_rect(x,y+1,1,57,clr_cadre) fill_rect(x+42,y+1,1,57,clr_cadre) # bordures clr="k" clr_txt="r" if effacement: clr="w" clr_txt="w" for n in (-1,1): for i in range(3,40): # haut et bas j=(4,4,4,3,2,2,2,3)[i%8] set_pixel(x+i,y+29+(29-j)*n,clr) if 5<=i<=37: j=(7,7,7,7,6,5,6,7)[i%8] set_pixel(x+i,y+29+(29-j)*n,clr) for k in range(4,55): # gauche et droite j=(4,4,4,3,2,2,2,3)[k%8] set_pixel(x+21+(21-j)*n,y+k,clr) if 5<=k<=53: j=(7,7,7,7,6,5,6,7)[k%8] set_pixel(x+21+(21-j)*n,y+k,clr) if carte.startswith("Transfert"): #draw_string(carte[-1],x+17,y+33,clr_txt) DessineImage(carte[-1],x+17,y+42,clr_txt) if carte.startswith("Echange") or carte.startswith("Rotation") or carte.startswith("Transfert"): DessineJeton(x+9,y+17,clr) DessineJeton(x+9,y+33,clr) DessineJeton(x+25,y+17,clr) DessineJeton(x+25,y+33,clr) if carte=="Jeton+1": DessineJeton(x+17,y+18,clr) DessineImage("+1",x+15,y+42,clr_txt) #draw_string("+1",x+11,y+33,clr_txt) elif carte=="Jeton-1": DessineJetonCasse(x+16,y+17,clr) DessineImage("-1",x+15,y+42,clr_txt) #draw_string("-1",x+11,y+33,clr_txt) elif carte=="Jeton+2": DessineJeton(x+17,y+12,clr) DessineJeton(x+17,y+24,clr) DessineImage("+2",x+15,y+42,clr_txt) #draw_string("+2",x+11,y+33,clr_txt) elif carte=="Jeton-2": #draw_string("-2",x+11,y+33,clr_txt) DessineJetonCasse(x+16,y+11,clr) DessineJetonCasse(x+16,y+23,clr) DessineImage("-2",x+15,y+42,clr_txt) elif carte=="Jeton+3": DessineJeton(x+17,y+12,clr) DessineJeton(x+11,y+24,clr) DessineJeton(x+23,y+24,clr) DessineImage("+3",x+15,y+42,clr_txt) #draw_string("+3",x+11,y+33,clr_txt) elif carte=="Jeton-3": #draw_string("-3",x+11,y+33,clr_txt) DessineJetonCasse(x+16,y+11,clr) DessineJetonCasse(x+10,y+23,clr) DessineJetonCasse(x+22,y+23,clr) DessineImage("-3",x+15,y+42,clr_txt) elif carte=="Echange12": DessineFlecheB(x+8,y+27,clr) DessineFlecheH(x+14,y+27,clr) elif carte=="Echange34": DessineFlecheB(x+30,y+27,clr) DessineFlecheH(x+24,y+27,clr) elif carte=="Echange23": DessineFlecheD(x+19,y+16,clr) DessineFlecheG(x+19,y+22,clr) elif carte=="Echange14": DessineFlecheD(x+19,y+32,clr) DessineFlecheG(x+19,y+38,clr) elif carte.startswith("Transfert12"): DessineFlecheH(x+11,y+27,clr) elif carte.startswith("Transfert21"): DessineFlecheB(x+11,y+27,clr) elif carte.startswith("Transfert13"): DessineFleche13(x+19,y+27,clr) elif carte.startswith("Transfert31"): DessineFleche31(x+19,y+27,clr) elif carte.startswith("Transfert14"): DessineFlecheD(x+19,y+35,clr) elif carte.startswith("Transfert41"): DessineFlecheG(x+19,y+35,clr) elif carte.startswith("Transfert23"): DessineFlecheD(x+19,y+19,clr) elif carte.startswith("Transfert32"): DessineFlecheG(x+19,y+19,clr) elif carte.startswith("Transfert24"): DessineFleche24(x+19,y+27,clr) elif carte.startswith("Transfert42"): DessineFleche42(x+19,y+27,clr) elif carte.startswith("Transfert34"): DessineFlecheB(x+27,y+27,clr) elif carte.startswith("Transfert43"): DessineFlecheH(x+27,y+27,clr) elif carte=="Rotation-": DessineFlecheD(x+19,y+35,clr) DessineFlecheG(x+19,y+19,clr) DessineFlecheB(x+11,y+27,clr) DessineFlecheH(x+27,y+27,clr) elif carte=="Rotation+": DessineFlecheG(x+19,y+35,clr) DessineFlecheD(x+19,y+19,clr) DessineFlecheH(x+11,y+27,clr) DessineFlecheB(x+27,y+27,clr) elif carte=="Echange13": DessineFleche13(x+21,y+27,clr) DessineFleche31(x+17,y+27,clr) elif carte=="Echange24": DessineFleche24(x+21,y+27,clr) DessineFleche42(x+17,y+27,clr) elif carte=="Carte+1": if not effacement: clr_cadre="g" DessineImage("+1",x+15,y+42,clr_txt) #draw_string("+1",x+11,y+34,clr_txt) MiniCarte(x,y,clr,clr_cadre) def jeu(choix,j): global Jetons N=len(Mains) fill_rect(140,60,45,60,"w") DessineCarte(140,60,choix) if j>=NJ: sleep(1) if choix.startswith("Carte"): Mains[j].append(choice(Pioche)) elif choix.startswith("Jeton"): NB=int(choix[-2:]) if Jetons[j]+NB<0: NB=-Jetons[j] for nb in range(min(Jetons[j],Jetons[j]+NB),max(Jetons[j],Jetons[j]+NB)): DessineJeton(20+210*(j>1)+12*(nb%6),110-70*(0<j<3)+12*(nb//6),"rg"[NB>0]) Jetons[j]+=NB #Jetons[j]=max(0,Jetons[j]) elif choix.startswith("Transfert"): NB=min(Jetons[int(choix[-3])-1],int(choix[-1])) for k in (-3,-2):#int(choix[-3]),int(choix[-2])): J=int(choix[k])-1 for nb in range(min(Jetons[J],Jetons[J]+NB*(-1)**(k==-3)),max(Jetons[J],Jetons[J]+NB*(-1)**(k==-3))): DessineJeton(20+210*(J>1)+12*(nb%6),110-70*(0<J<3)+12*(nb//6),"rg"[k==-2]) Jetons[J] += NB*(-1)**(k==-3) elif choix.startswith("Echange"): for J in (-1,-2): AfficherJetons(int(choix[J])-1,clr=CLR) Jetons[int(choix[-1])-1],Jetons[int(choix[-2])-1]=Jetons[int(choix[-2])-1],Jetons[int(choix[-1])-1] elif choix=="Rotation+": Jetons=[Jetons.pop(-1)]+Jetons for J in range(4): AfficherJetons(J,clr=CLR) elif choix=="Rotation-": Jetons.append(Jetons.pop(0)) for J in range(4): AfficherJetons(J,clr=CLR) sleep(1) #DessineCarte(140,60,choix,effacement=True) fill_rect(0,140,320,82,"w") if NJ==1: AfficherMain(0) AffichagePlateau() sleep(1) draw_string("J"+str(j+1),20+210*(j>1),85-70*(0<j<3),"b","pink") draw_string("L'ultime coup prime !",55,80,"purple") draw_string("Valider avec OK",85,130,"purple") for k in range(2): fill_rect(60,50+k*122,200,1,"g") for k in range(2): for i in range(6): DessineJeton(119+15*i,20+180*k,"k") for k in range(4): DessineCarte(8+261*(k//2),12+140*(k%2),["Jeton+1","Echange23","Rotation+","Jeton-3"][k]) #for carte in Pioche: # DessineCarte(8,20,carte) # sleep(1) # DessineCarte(8,20,carte,effacement=True) while not (keydown(KEY_EXE) or keydown(KEY_OK)):1 while keydown(KEY_EXE) or keydown(KEY_OK):1 while 1: fill_rect(0,0,320,222,"w") #draw_string("Maximiser le nombre de jetons !",5,50,"purple") draw_string("Présentation",100,10,"g") Regles=("Chacun des 4 joueurs commence","la partie avec 6 (jetons).","","Chacun leur tour, les joueurs","jouent leurs 6 (cartes) pour",\ "récolter le maximum de jetons.") for k in range(len(Regles)): draw_string(Regles[k],10,33+18*k,"b") DessineJeton(176,55,"k") MiniCarte(143,89,"k","g") draw_string("Nombre de joueurs humains",35,150,"b") draw_string("< >",135,170,"r") draw_string("Valider avec OK",85,192,"purple") CLR=(160,0,250) Mains=[[],[],[],[]] Jetons=[6,6,6,6] for j in range(4): Mains[j]=[choice(Pioche) for k in range(6)] NJ=0 chg=1 while not (keydown(KEY_EXE) or keydown(KEY_OK)): if chg: draw_string(str(NJ),155,170,"w") NJ=(NJ+chg)%5 draw_string(str(NJ),155,170,"b") sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_EXE) or keydown(KEY_OK):1 fill_rect(0,0,320,222,"w") while not any([Mains[k]==[] for k in range(4)]): AffichagePlateau() while keydown(KEY_EXE) or keydown(KEY_OK):1 for j in range(4): draw_string("J"+str(j+1),20+210*(j>1),85-70*(0<j<3),"purple","cyan") if j>=NJ: # IA joue choix=Mains[j].pop(randint(0,len(Mains[j])-1)) #jeu(choix,j) else: # un joueur joue if NJ==1: AfficherMain(j) if NJ>1: draw_string("Appuyer sur OK pour",65,170,"purple") draw_string("afficher les cartes de J"+str(j+1),40,190,"purple") while not (keydown(KEY_EXE) or keydown(KEY_OK)):1 draw_string("Appuyer sur OK pour",65,170,"w") draw_string("afficher les cartes de J"+str(j+1),40,190,"w") while keydown(KEY_EXE) or keydown(KEY_OK):1 AfficherMain(j) chg=1 rang=-1 while not (keydown(KEY_EXE) or keydown(KEY_OK)): if chg: AffichagePlateau(True) DessineCarte(5+53*rang,155,Mains[j][rang],"g",True) # que cadre AfficherJetons(j) rang=(rang+chg)%len(Mains[j]) DessineCarte(5+53*rang,155,Mains[j][rang],"r",True) # que cadre choix=Mains[j][rang] if choix.startswith("Jeton"): for nb in range(min(Jetons[j],Jetons[j]+int(choix[-2:])),max(Jetons[j],Jetons[j]+int(choix[-2:]))): DessineJeton(20+210*(j>1)+12*(nb%6),110-70*(0<j<3)+12*(nb//6),"rg"[int(choix[-2:])>0]) elif choix.startswith("Transfert"): NB=min(Jetons[int(choix[-3])-1],Jetons[int(choix[-2])-1],int(choix[-1])) for k in (-3,-2):#int(choix[-3]),int(choix[-2])): J=int(choix[k])-1 for nb in range(min(Jetons[J],Jetons[J]+NB*(-1)**(k==-3)),max(Jetons[J],Jetons[J]+NB*(-1)**(k==-3))): DessineJeton(20+210*(J>1)+12*(nb%6),110-70*(0<J<3)+12*(nb//6),"rg"[k==-2]) elif choix.startswith("Echange"): for J in (-1,-2): AfficherJetons(int(choix[J])-1,clr=CLR) elif choix.startswith("Rotation"): for J in range(4): AfficherJetons(J,clr=CLR) sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_EXE) or keydown(KEY_OK):1 choix=Mains[j].pop(rang) jeu(choix,j) # gagnant : maximum de Jetons for j in range(4): if Jetons[j]==max(Jetons): draw_string("J"+str(j+1)+" a gagné.",100,130+20*j,"r") sleep(2) fill_rect(140,60,45,60,"w") draw_string("OK pour",125,40,"purple") draw_string("relancer",120,60,"purple") draw_string("une partie",110,80,"purple") while not (keydown(KEY_OK) or keydown(KEY_EXE)):1 while keydown(KEY_OK) or keydown(KEY_EXE):1