Jeu du Puissance 4, basique. La version suivante (améliorée) 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)] draw_string(" "*18,70,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 (dx != 0) and (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 l+=1 while kd(KE) or kd(KO):True def jeton(x,y,couleur): draw_string("o",35-5+30*x,55-9+30*y,couleur) def test_fin(): #global score ? for k in [1,2]: 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'*(couleur=='red')+'red'*(couleur=='blue')) return True return False def fin(): global chaine for lig in range(6): chaine="".join(str(Jeu[lig][col]) for col in range(7)) if test_fin(): return True for col in range(7): chaine="".join(str(Jeu[lig][col]) for lig in range(6)) if test_fin(): return True for diag in range(3,8+1): chaine="".join(str(Jeu[k][diag-k]) for k in range(max(0,diag-6),min(diag,5)+1)) if test_fin(): return True for diag in range(3,8+1): chaine="".join(str(Jeu[k][6-(diag-k)]) for k in range(max(0,diag-6),min(diag,5)+1)) if test_fin(): return True if 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: descente(x) tour_fini=1 while kd(KE) or kd(KO):True if tour_fini==1: num_joueur = 3-num_joueur tour_fini=0 if fin(): while not (kd(KE) or kd(KO)):True init() while kd(KE) or kd(KO):True