un jeu de chat sur un platformer, attention quand trop de touches sont pressées enmême temps le jeu bug un peu
from kandinsky import * from ion import * from time import * from random import * Map=[[0,300,60,260],[60,360,60,200],[120,420,400,140],[520,380,80,180],[600,340,80,220],[680,300,80,260],[760,260,80,300],[840,200,40,360],[640,200,60,60],[580,140,60,140],[480,140,60,160],[380,140,60,220],[280,180,60,60],[200,220,60,60],[100,260,60,60],[80,160,60,60],[40,100,40,120],[160,60,80,40],[300,40,80,40],[440,20,80,40],[580,40,80,40],[700,80,60,60],[780,140,40,60],[880,0,150,660],[-150,0,150,660]] playerInfo=[[400,120,(255,0,0),KEY_ZERO,KEY_DOT,KEY_FOUR,True,False,32,-1,False,10],[500,120,(200,200,0),KEY_ANS,KEY_EXE,KEY_DIVISION,True,False,32,-1,False,10],[600,120,(0,0,150),KEY_LEFT,KEY_RIGHT,KEY_UP,True,False,32,-1,False,10]] #[x, y, couleur, gauche, droite saut, sautAutorise, jump, vJump, vGravity, gravity, vitesse] numberOfPlayer=2 chercheur=randint(0,numberOfPlayer-1) a=0 playerInfo[chercheur][11]=10 timer=0 nbrPlayerTouche=0 peutTouche=True xPlayer=320 yPlayer=0 playerColor=(170,32,0) backColor=(0,150,250) colorTerre=(120,50,0) colorHerbe=(0,160,50) colorCaillou=(70,70,70) xMap=-playerInfo[chercheur][0]+160 yMap=-playerInfo[chercheur][1]+110 vJump=32 jump=False sautAutorise=True vGravity=-1 gravity=False hitBoxValue=False def player(): for i in range(numberOfPlayer): fill_rect(playerInfo[i][0]+xMap,playerInfo[i][1]+yMap,10,10,playerInfo[i][2]) def cachePlayer(a): fill_rect(playerInfo[a-1][0]+xMap,playerInfo[a-1][1]+yMap,10,10,backColor) def sol(b,c,d,e): if c<450: fill_rect(xMap+b,yMap+c,d,10,colorHerbe) if e>10 and e+c<450: fill_rect(xMap+b,yMap+c+10,d,e-10,colorTerre) elif e>10: fill_rect(xMap+b,yMap+c+10,d,e-(c+e-450)-10,colorTerre) fill_rect(xMap+b,yMap+c+(e-(c+e-450)),d,c+e-450,colorCaillou) elif c>450: fill_rect(xMap+b,yMap+c,d,e,colorCaillou) def mapp(): for i in range(len(Map)): sol(Map[i][0],Map[i][1],Map[i][2],Map[i][3]) def hitBoxVertical(a): for i in range(len(Map)): if playerInfo[a][1]+10<=Map[i][1] or playerInfo[a][1]>=Map[i][1]+Map[i][3] or playerInfo[a][0]>=Map[i][0]+Map[i][2] or playerInfo[a][0]+10<=Map[i][0]: hitBoxValue=False else: hitBoxValue=True break return hitBoxValue def hitBoxDroite(a): for i in range(len(Map)): if playerInfo[a][1]+10<=Map[i][1] or playerInfo[a][1]>=Map[i][1]+Map[i][3] or playerInfo[a][0]>=Map[i][0]+Map[i][2]-5 or playerInfo[a][0]+10<Map[i][0]: hitBoxValue=True else: hitBoxValue=False break return hitBoxValue def hitBoxGauche(a): for i in range(len(Map)): if playerInfo[a][1]+10<=Map[i][1] or playerInfo[a][1]>=Map[i][1]+Map[i][3] or playerInfo[a][0]>Map[i][0]+Map[i][2] or playerInfo[a][0]+10<=Map[i][0]+5: hitBoxValue=True else: hitBoxValue=False break return hitBoxValue def surLeSol(a): for i in range(len(Map)): if playerInfo[a][1]+10==Map[i][1] and playerInfo[a][0]+9>Map[i][0] and playerInfo[a][0]<Map[i][0]+Map[i][2]: hitBoxValue=True break else: hitBoxValue=False return hitBoxValue def deplacement(a): if a=="gauche": for i in range(len(Map)): fill_rect(xMap+Map[i][0]-10,yMap+Map[i][1],10,Map[i][3],backColor) if a=="droite": for i in range(len(Map)): fill_rect(xMap+Map[i][0]+Map[i][2],yMap+Map[i][1],10,Map[i][3],backColor) if a=="bas": for i in range(len(Map)): fill_rect(xMap+Map[i][0],yMap+Map[i][1]+Map[i][3],Map[i][2],10,backColor) if a=="haut": for i in range(len(Map)): fill_rect(xMap+Map[i][0],yMap+Map[i][1]-10,Map[i][2],10,backColor) fill_rect(0,0,320,222,backColor) mapp() player() while True: for j in range(numberOfPlayer): if keydown(playerInfo[j][3]) and hitBoxGauche(j): playerInfo[j][0]-=playerInfo[j][11] fill_rect(playerInfo[j][0]+xMap+playerInfo[j][11],playerInfo[j][1]+yMap,10,10,backColor) if keydown(playerInfo[j][4]) and hitBoxDroite(j): playerInfo[j][0]+=playerInfo[j][11] fill_rect(playerInfo[j][0]+xMap-playerInfo[j][11],playerInfo[j][1]+yMap,10,10,backColor) for j in range(numberOfPlayer): if keydown(playerInfo[j][5]) and playerInfo[j][6]==True: playerInfo[j][7]=True playerInfo[j][8]=32 playerInfo[j][6]=False for j in range(numberOfPlayer): if playerInfo[j][7]==True: cachePlayer(j+1) playerInfo[j][1]-=int(playerInfo[j][8]) if playerInfo[j][8]>1: playerInfo[j][8]=playerInfo[j][8]/2 if hitBoxVertical(j): while hitBoxVertical(j): playerInfo[j][1]+=1 playerInfo[j][7]=False playerInfo[j][8]=32 elif playerInfo[j][8]==1: playerInfo[j][8]=-1 elif -32<playerInfo[j][8]<=-1: playerInfo[j][8]=playerInfo[j][8]*2 if hitBoxVertical(j): while hitBoxVertical(j): playerInfo[j][1]-=1 playerInfo[j][7]=False playerInfo[j][8]=32 elif playerInfo[j][8]==-32: while hitBoxVertical(j): playerInfo[j][1]-=1 if surLeSol(j): playerInfo[j][8]=32 else: playerInfo[j][9]=playerInfo[j][8] playerInfo[j][10]=True playerInfo[j][6]=False playerInfo[j][7]=False player() for j in range(numberOfPlayer): if not hitBoxVertical(j) and playerInfo[j][7]==False and not surLeSol(j): playerInfo[j][10]=True playerInfo[j][6]=False for j in range(numberOfPlayer): if playerInfo[j][10]==True: cachePlayer(j+1) playerInfo[j][1]-=playerInfo[j][9] if playerInfo[j][9]>-128: playerInfo[j][9]=playerInfo[j][9]*2 if hitBoxVertical(j): while hitBoxVertical(j): playerInfo[j][1]-=1 playerInfo[j][10]=False playerInfo[j][9]=-1 playerInfo[j][8]=32 player() for j in range(numberOfPlayer): if surLeSol(j): playerInfo[j][6]=True else: playerInfo[j][6]=False if playerInfo[chercheur][0]+xMap<140: xMap+=10 deplacement("gauche") mapp() for i in range(numberOfPlayer): fill_rect(playerInfo[i][0]-10+xMap,yMap+playerInfo[i][1],10,10,backColor) if playerInfo[chercheur][0]+xMap>180: xMap-=10 deplacement("droite") mapp() for i in range(numberOfPlayer): fill_rect(playerInfo[i][0]+10+xMap,playerInfo[i][1]+yMap,10,10,backColor) if playerInfo[chercheur][1]+yMap>170: yMap-=10 deplacement("bas") mapp() for i in range(numberOfPlayer): fill_rect(playerInfo[i][0]+xMap,playerInfo[i][1]+10+yMap,10,10,backColor) if playerInfo[chercheur][1]+yMap<50: yMap+=10 deplacement("haut") mapp() for i in range(numberOfPlayer): fill_rect(playerInfo[i][0]+xMap,playerInfo[i][1]-10+yMap,10,10,backColor) for i in range(numberOfPlayer): if not (playerInfo[i][0]>playerInfo[chercheur][0]+10 or playerInfo[i][0]+10<playerInfo[chercheur][0] or playerInfo[i][1]>playerInfo[chercheur][1]+10 or playerInfo[i][1]+10<playerInfo[chercheur][1]) and i!=chercheur and peutTouche==True: peutTouche=False # playerInfo[chercheur][11]=5 chercheur=i # playerInfo[chercheur][11]=10 break a=numberOfPlayer for i in range(numberOfPlayer): if playerInfo[i][0]>playerInfo[chercheur][0]+10 or playerInfo[i][0]+10<playerInfo[chercheur][0] or playerInfo[i][1]>playerInfo[chercheur][1]+10 or playerInfo[i][1]+10<playerInfo[chercheur][1]: a-=1 if a==1: peutTouche=True player() fill_rect(playerInfo[chercheur][0]+xMap+3,playerInfo[chercheur][1]+yMap+3,4,4,(255,255,255)) sleep(0.03) timer+=1 if timer>=1000: draw_string("Le joueur a perdu",50,50) draw_string(str(chercheur+1),150,50) break draw_string(str(timer),5,5,(255,255,255),backColor)