A 1v1 chess game. No timer, no interface to begin/end the game, no detection of check, checkmate, draw and any other end but it’s in the work. To win, just take the opponent’s king.
from math import * from kandinsky import fill_rect as rtc,draw_string as string from ion import keydown as k from time import * noir=(20,200,20) blanc=(210,210,210) rou=(255,255,255) vert=(10,10,10) colcase=(255,0,0) caserouge=[] caseverte=[] caseposibl=[] caseprotrouge=[] caseprotverte=[] casepossel=[] x=y=5 s=t=pie=0 objet=0 objetsel=0 def case(x,y,col=colcase): rtc(23+27*x,-25+27*y,28,1,col) rtc(23+27*x,-25+27*y,1,28,col) rtc(50+27*x,-25+27*y,1,28,col) rtc(23+27*x,2+27*y,28,1,col) def cl(x,y): case(x,y,(120,)*3) def grid(): for i in range(9): rtc(50+27*i,2,1,217,(120,)*3) rtc(50,2+27*i,217,1,(120,)*3) for i in range(4): for j in range(4): rtc(51+54*i,3+54*j,26,26,blanc) rtc(78+54*i,3+54*j,26,26,noir) rtc(78+54*i,30+54*j,26,26,blanc) rtc(51+54*i,30+54*j,26,26,noir) def pion(x,y,col): rtc(x,y,21,-3,col) rtc(x+2,y-3,17,-2,col) rtc(x+6,y-5,9,-16,col) rtc(x+2,y-11,17,-5,col) rtc(x+4,y-9,13,-10,col) def king(x,y,col): rtc(x,y,21,-3,col) rtc(x+2,y-3,17,-2,col) rtc(x+4,y-5,13,-5,col) rtc(x+1,y-14,6,6,col) rtc(x+14,y-14,7,6,col) rtc(x+9,y-23,3,15,col) rtc(x+5,y-20,11,3,col) def tour(x,y,col): rtc(x,y,21,-3,col) rtc(x+2,y-3,17,-2,col) rtc(x+4,y-5,13,-12,col) rtc(x+3,y-17,15,-1,col) rtc(x+1,y-18,19,-2,col) rtc(x+1,y-20,3,-4,col) rtc(x+6,y-20,3,-4,col) rtc(x+12,y-20,3,-4,col) rtc(x+17,y-20,3,-4,col) def fou(x,y,col): rtc(x,y,21,-3,col) rtc(x+3,y-3,15,-2,col) rtc(x+7,y-5,7,-5,col) rtc(x+3,y-10,15,-1,col) rtc(x+2,y-11,17,-2,col) rtc(x+6,y-13,9,-5,col) rtc(x+7,y-18,7,-2,col) rtc(x+9,y-20,3,-2,col) def queen(x,y,col): rtc(x,y,21,-2,col) rtc(x+2,y-2,17,-1,col) rtc(x+7,y-3,7,-7,col) rtc(x+5,y-10,11,-1,col) rtc(x+3,y-11,15,-2,col) rtc(x+8,y-13,5,-3,col) rtc(x+6,y-16,9,-4,col) rtc(x+9,y-20,3,-3,col) def knight(x,y,col): rtc(x,y,21,-3,col) rtc(x+2,y-3,17,-2,col) rtc(x+4,y-5,17,-2,col) rtc(x+6,y-7,16,-2,col) rtc(x+8,y-9,15,-4,col) rtc(x+2,y-13,19,-3,col) rtc(x,y-16,19,-3,col) rtc(x+2,y-19,14,-2,col) rtc(x+4,y-21,9,-2,col) class Jeu: def __init__(self,x,y,color,type): self.x=x self.y=y self.color=color self.type=type self.pos=10*x+y def draw(self): self.type(26+self.x*27,1+27*self.y,self.color) def ocuppe(): global caserouge,caseverte,caseposibl caserouge=[] caseverte=[] for i in L: if i.color==rou: caserouge.append(i.pos) elif i.color==vert: caseverte.append(i.pos) def posibil(self): global caseprotrouge,caseprotverte,caseposibl caseposibl=[] Jeu.ocuppe() if self.type==knight: if self.color==rou: for i in[-1,1]: for j in [-2,2]: posibl1=self.pos+10*i+j posibl2=self.pos+10*j+i if caserouge.count(posibl1)==0 and 11<=posibl1<=88 and 1<=posibl1%10<=8: caseposibl.append(posibl1) if caserouge.count(posibl2)==0 and 11<=posibl2<=88 and 1<=posibl2%10<=8: caseposibl.append(posibl2) elif self.color==vert: for i in [-1,1]: for j in [-2,2]: posibl1=self.pos+10*i+j posibl2=self.pos+10*j+i if caseverte.count(posibl1)==0 and 11<=posibl1<=88 and 1<=posibl1%10<=8: caseposibl.append(posibl1) if caseverte.count(posibl2)==0 and 11<=posibl2<=88 and 1<=posibl2%10<=8: caseposibl.append(posibl2) elif self.type==pion: if self.color==rou: if caserouge.count(self.pos-1)==caseverte.count(self.pos-1)==0: caseposibl.append(self.pos-1) if self.y==7 and caserouge.count(self.pos-2)==caseverte.count(self.pos-2)==0: caseposibl.append(self.pos-2) if caseverte.count(self.pos-11)==1: caseposibl.append(self.pos-11) if caseverte.count(self.pos+9)==1: caseposibl.append(self.pos+9) elif self.color==vert: if caserouge.count(self.pos+1)==caseverte.count(self.pos+1)==0: caseposibl.append(self.pos+1) if self.y==2 and caserouge.count(self.pos+2)==caseverte.count(self.pos+2)==0: caseposibl.append(self.pos+2) if caserouge.count(self.pos+11)==1: caseposibl.append(self.pos+11) if caserouge.count(self.pos-9)==1: caseposibl.append(self.pos-9) if self.type==tour or self.type==queen: caseposibl.append(self.pos) if self.color==rou: for i in[-1,1]: posx=self.x posy=self.y for j in range(1,8): if caseposibl.count(posx*10+self.y)==1 and 1<=posx+i<=8: if caserouge.count((posx+i)*10+self.y)==caseverte.count((posx+i)*10+self.y)==0: caseposibl.append((posx+i)*10+self.y) posx+=i elif caserouge.count((posx+i)*10+self.y)==1: caseprotrouge.append((posx+i)*10+self.y) break elif caseverte.count((posx+i)*10+self.y)==1: caseposibl.append((posx+i)*10+self.y) break for j in range(1,8): if caseposibl.count(posy+10*self.x)==1 and 1<=posy+i<=8: if caserouge.count(posy+i+10*self.x)==caseverte.count(posy+i+10*self.x)==0: caseposibl.append(posy+i+10*self.x) posy+=i elif caserouge.count(posy+i+10*self.x)==1: caseprotrouge.append(posy+i+10*self.x) break elif caseverte.count(posy+i+10*self.x)==1: caseposibl.append(posy+i+10*self.x) break if self.color==vert: for i in[-1,1]: posx=self.x posy=self.y for j in range(1,8): if caseposibl.count(posx*10+self.y)==1 and 11<=(posx+i)*10<=88: if caserouge.count((posx+i)*10+self.y)==caseverte.count((posx+i)*10+self.y)==0: caseposibl.append((posx+i)*10+self.y) posx+=i elif caseverte.count((posx+i)*10+self.y)==1: caseprotverte.append((posx+i)*10+self.y) break elif caserouge.count((posx+i)*10+self.y)==1: caseposibl.append((posx+i)*10+self.y) break for j in range(1,8): if caseposibl.count(posy+10*self.x)==1 and 1<=posy+i<=8: if caserouge.count(posy+i+10*self.x)==caseverte.count(posy+i+10*self.x)==0: caseposibl.append(posy+i+10*self.x) posy+=i elif caseverte.count(posy+i+10*self.x)==1: caseprotverte.append(posy+i+10*self.x) break elif caserouge.count(posy+i+10*self.x)==1: caseposibl.append(posy+i+10*self.x) break caseposibl.remove(self.pos) if self.type==fou or self.type==queen: caseposibl.append(self.pos) if self.color==rou: for i in[-1,1]: posx=self.x*10 posy=self.y for j in range(1,8): if caseposibl.count(posx+self.y)==1 and 11<=posx+11*i+self.y<=88 and 1<=(posx+11*i+self.y)%10<=8: if caserouge.count(posx+11*i+self.y)==caseverte.count(posx+11*i+self.y)==0: caseposibl.append(posx+11*i+self.y) posx+=11*i elif caserouge.count(posx+11*i+self.y)==1: caseprotrouge.append(posx+i*11+self.y) break elif caseverte.count(posx+11*i+self.y)==1: caseposibl.append(posx+11*i+self.y) break for j in range(1,8): if caseposibl.count(posy+10*self.x)==1 and 11<=10*self.x+posy+9*i<=88 and 1<=(posy+9*i+self.x*10)%10<=8: if caserouge.count(posy+9*i+10*self.x)==0 and caseverte.count(posy+9*i+10*self.x)==0: caseposibl.append(posy+9*i+10*self.x) posy+=9*i elif caserouge.count(posy+9*i+10*self.x)==1: caseprotrouge.append(posy+i*9+self.x) break elif caseverte.count(posy+9*i+10*self.x)==1: caseposibl.append(posy+9*i+10*self.x) break if self.color==vert: for i in[-1,1]: posx=self.x*10 posy=self.y for j in range(1,8): if caseposibl.count(posx+self.y)==1 and 11<=posx+11*i+self.y<=88 and 1<=(posx+11*i+self.y)%10<=8: if caserouge.count(posx+11*i+self.y)==0 and caseverte.count(posx+11*i+self.y)==0: caseposibl.append(posx+11*i+self.y) posx+=11*i elif caseverte.count(posx+11*i+self.y)==1: caseprotverte.append(posx+i*11+self.y) break elif caserouge.count(posx+11*i+self.y)==1: caseposibl.append(posx+11*i+self.y) break for j in range(1,8): if caseposibl.count(posy+10*self.x)==1 and 11<=10*self.x+posy+9*i<=88 and 1<=(posy+9*i+self.x*10)%10<=8: if caserouge.count(posy+9*i+10*self.x)==0 and caseverte.count(posy+9*i+10*self.x)==0: caseposibl.append(posy+9*i+10*self.x) posy+=9*i elif caseverte.count(posy+9*i+10*self.x)==1: caseprotverte.append(posy+i*9+self.x) break elif caserouge.count(posy+9*i+10*self.x)==1: caseposibl.append(posy+9*i+10*self.x) break caseposibl.remove(self.pos) elif self.type==king: Jeu.caseprot() if self.color==rou: for i in[-1,0,1]: for j in[-10,0,10]: if caseprotverte.count(self.pos+i+j)==0 and caserouge.count(self.pos+i+j)==0 and 1<=(self.pos+i+j)%10<=8: caseposibl.append(self.pos+i+j) if self.color==vert: for i in[-1,0,1]: for j in[-10,0,10]: if caseprotrouge.count(self.pos+i+j)==0 and caseverte.count(self.pos+i+j)==0 and 1<=(self.pos+i+j)%10<=8: caseposibl.append(self.pos+i+j) def caseprot(): global caseprotrouge,caseprotverte,caseposibl caseprotrouge=[] caseprotverte=[] for i in[-1,0,1]: for j in[-10,0,10]: caseprotrouge.append(k1.pos+i+j) caseprotverte.append(k2.pos+i+j) for i in p: if i.color==rou: caseprotrouge.append(i.pos+9) caseprotrouge.append(i.pos-11) if i.color==vert: caseprotverte.append(i.pos-9) caseprotverte.append(i.pos+11) n=len(L)-len(p)-2 for i in range(n): L[i+2].posibil() if L[i+2].color==rou: caseprotrouge+=caseposibl if L[i+2].color==vert: caseprotverte+=caseposibl caseposibl=[] def draw_pieces(): for i in L: i.draw() def draw_posibl(self,list): self.posibil() for i in list: rtc(34+27*(i//10),-16+27*(i%10),9,9,(0,0,255)) def pieces(pos): global pie,objet for i in L: if i.pos==pos: objet=i pie=1 break else: pie=0 k1=Jeu(4,8,rou,king);k2=Jeu(4,1,vert,king) q1=Jeu(5,8,rou,queen);q2=Jeu(5,1,vert,queen) t1=Jeu(1,8,rou,tour);t2=Jeu(8,8,rou,tour);t11=Jeu(1,1,vert,tour);t12=Jeu(8,1,vert,tour) f1=Jeu(3,8,rou,fou);f2=Jeu(6,8,rou,fou);f11=Jeu(3,1,vert,fou);f12=Jeu(6,1,vert,fou) c1=Jeu(2,8,rou,knight);c2=Jeu(7,8,rou,knight);c11=Jeu(2,1,vert,knight);c12=Jeu(7,1,vert,knight) p=[n for n in range(16)] for i in range(8): p[i]=Jeu(i+1,7,rou,pion) p[i+8]=Jeu(i+1,2,vert,pion) L=[k1,k2,q1,q2,t1,t2,t11,t12,f1,f2,f11,f12,c1,c2,c11,c12]+p grid() Jeu.draw_pieces() case(x,y) while True: if L.count(k1)==0: rtc(0,0,320,222,blanc) string("Victroire des Vert !",80,100) if L.count(k2)==0: rtc(0,0,320,222,blanc) string("Victroire des Rouges !",80,100) if k(0): if x>=2: cl(x,y) x-=1 case(x,y) sleep(0.1) if k(3): if x<=7: cl(x,y) x+=1 case(x,y) sleep(0.1) if k(1): if y>=2: cl(x,y) y-=1 case(x,y) sleep(0.1) if k(2): if y<=7: cl(x,y) y+=1 case(x,y) sleep(0.1) if k(4): Jeu.ocuppe() Jeu.pieces(10*x+y) if s==1: if casepossel.count(10*x+y)==1: if pie==1: L.remove(objet) objetsel.x=x objetsel.y=y objetsel.pos=10*x+y objetsel=None casepossel=[] t+=1 else: objetsel=None casepossel=[] s=0 grid() Jeu.draw_pieces() case(x,y) Jeu.pieces(10*x+y) if s==0: if pie==1 and ((t%2==0 and objet.color==rou)+(t%2==1 and objet.color==vert)): objetsel=objet objetsel.posibil() casepossel=caseposibl objetsel.draw_posibl(casepossel) s=1 else: pass sleep(0.15)