Jeu du Puissance 4, améliorée avec la mise en évidence de l’alignement gagnant. La version précédente est disponible ici, une version légèrement optimisée est disponible ici et la version terminée est disponible là.
from kandinsky import * from ion import * from random import randint from time import sleep kd = keydown KE = KEY_EXE KO = KEY_OK purple = (160,0,255) def init(): global Jeu Jeu=[[0 for m in range(7)] for n in range(6)] #nettoyage du haut de l'écran draw_string(" "*32,0,3) draw_string(" "*17,80,21) # nettoyage du plateau de jeu for i in range(7): for j in range(6): jeton(i,j,'white') # Affichage du curseur def curseur(x,couleur='orange'): draw_string("v",30+30*x,22,couleur) # Déplacement du curseur def deplacement(): global x dx = kd(KEY_RIGHT)-kd(KEY_LEFT) if dx !=0: curseur(x,'white')#draw_string(" ",45+30*x,32) x = (x+dx)%7 curseur(x,couleur) while kd(KEY_LEFT) or kd(KEY_RIGHT):True def descente(x): global Jeu l=0 while l<6 and Jeu[l][x]==0: # tant que la case est libre sleep(0.1) if l>0: jeton(x,l-1,'white') Jeu[l-1][x]=0 jeton(x,l,couleur) Jeu[l][x]=num_joueur y=l l+=1 while kd(KE) or kd(KO):True return y def jeton(x,y,couleur): draw_string("o",35-5+30*x,55-9+30*y,couleur) def test_fin(): #global score ? k=num_joueur if str(k)*4 in chaine: draw_string("Joueur"+str(k)+" a gagné",85,3,couleur) curseur(x,'white') draw_string("Appuyer sur EXE",85,21,purple) draw_string("Score : ",240,110,'purple') score[k-1]+=1 draw_string("J"+str(k)+" : "+str(score[k-1]),240,110+18*k,couleur) if score[2-k]==0: draw_string("J"+str(3-k)+" : 0",240,110+18*(3-k),'blue'*(k-1)+'red'*(2-k)) return True return False def fin2(): k=num_joueur maxi_voisins=0 #ligne voisins=1 liste_gagnant=[[y,x]] lig=0 while y-lig>0: lig+=1 if Jeu[y-lig][x]==k: voisins+=1 liste_gagnant.append([y-lig,x]) else:lig+=10 lig=0 while y+lig<5: lig+=1 if Jeu[y+lig][x]==k: voisins+=1 liste_gagnant.append([y+lig,x]) else:lig+=10 if voisins>=4: for elt in liste_gagnant: jeton(elt[1],elt[0],'green') maxi_voisins=max(voisins,maxi_voisins) #colonne voisins=1 liste_gagnant=[[y,x]] col=0 while x-col>0: col+=1 if Jeu[y][x-col]==k: voisins+=1 liste_gagnant.append([y,x-col]) else:col+=10 col=0 while x+col<6: col+=1 if Jeu[y][x+col]==k: voisins+=1 liste_gagnant.append([y,x+col]) else:col+=10 if voisins>=4: for elt in liste_gagnant: jeton(elt[1],elt[0],'green') maxi_voisins=max(voisins,maxi_voisins) #diag 1 voisins=1 liste_gagnant=[[y,x]] lig=0 col=0 while y-lig>0 and x-col>0: lig+=1 col+=1 if Jeu[y-lig][x-col]==k: voisins+=1 liste_gagnant.append([y-lig,x-col]) else:lig+=10 lig=0 col=0 while y+lig<5 and x+col<6: lig+=1 col+=1 if Jeu[y+lig][x+col]==k: voisins+=1 liste_gagnant.append([y+lig,x+col]) else:lig+=10 if voisins>=4: for elt in liste_gagnant: jeton(elt[1],elt[0],'green') maxi_voisins=max(voisins,maxi_voisins) #diag 2 voisins=1 liste_gagnant=[[y,x]] lig=0 col=0 while y+lig<5 and x-col>0: lig+=1 col+=1 if Jeu[y+lig][x-col]==k: voisins+=1 liste_gagnant.append([y+lig,x-col]) else:lig+=10 lig=0 col=0 while y-lig>0 and x+col<6: lig+=1 col+=1 if Jeu[y-lig][x+col]==k: voisins+=1 liste_gagnant.append([y-lig,x+col]) else:lig+=10 if voisins>=4: for elt in liste_gagnant: jeton(elt[1],elt[0],'green') maxi_voisins=max(voisins,maxi_voisins) if maxi_voisins>=4: draw_string("Joueur"+str(k)+" a gagné : Puissance"+str(maxi_voisins)+" "+"!"*min((maxi_voisins-3),3),10-5*min((maxi_voisins-4),2),3,couleur) curseur(x,'white') draw_string("Appuyer sur EXE",85,21,purple) draw_string("Score : ",240,110,'purple') score[k-1]+=1 draw_string("J"+str(k)+" : "+str(score[k-1]),240,110+18*k,couleur) if score[2-k]==0: draw_string("J"+str(3-k)+" : 0",240,110+18*(3-k),'blue'*(k-1)+'red'*(2-k)) return True elif sum(int(Jeu[k][l]) for k in range(6) for l in range(7))==63: draw_string("Personne n'a gagné",70,3) curseur(x,'white') draw_string("Appuyer sur EXE",85,21,purple) return True return False num_joueur=1 # vaudra 1 ou 2 x=3 for i in range(8): # tracé du plateau fill_rect(20+30*i,40,1,181,'orange') fill_rect(20,40+min(30*i,30*6),211,1,'orange') score=[0,0] init() while True: couleur='blue'*(num_joueur==1)+'red'*(num_joueur==2) curseur(x,couleur) while not (kd(KE) or kd(KO)): deplacement() if Jeu[0][x] == 0: y=descente(x) if fin2(): while not (kd(KE) or kd(KO)):True init() while kd(KE) or kd(KO):True num_joueur=3-num_joueur