attakth_jcj.py

Created by florian-allard

Created on March 09, 2025

18.2 KB

Adaptation du mini-jeu Attakth. Version minimaliste.


from kandinsky import *
from ion import *
from random import *
from time import sleep
kd=keydown

Machine_parameters = { # 25 machines possibles
"Bondisseur":(1,"F","B",1,1,4,3),\
"Brouteur":(1,"F","LR",1,1,2,4),\
#"Long-nez":(1,"F","B",2,1,2,5),\
#"Pillard":(1,"F","B",2,1,3,5),\
"Tunnelier":(1,"F","B",2,1,2,4),\
#"Charognarde":(2,"F","B",3,2,2,5),\
"Corne-filante":(2,"F","LR",2,2,2,5),\
#"Corne-sabre":(2,"F","LR",2,2,2,5),\
"Coureuse":(2,"F","B",2,2,3,4),\
#"Etincelle":(2,"B","F",2,3,3,5),\
"Fouisseur":(2,"F","B",2,1,3,4),\
#"Hautes-pattes":(2,"F","B",1,2,4,6),\
"Laboureur":(2,"F","B",2,1,2,5),\
"Razoptere":(2,"F","B",2,3,2,6),\
#"Tunnelier pisteur":(2,"F","B",2,1,2,4),\
"Aile-d'Helion":(3,"B","F",3,2,3,7),\
"Carapateur":(3,"F","B",3,3,2,7),\
#"Cracheur boursoufle":(3,"F","BLR",3,2,2,7),\
"Galop-griffe":(3,"F","B",3,2,2,8),\
#"Grande-bouche":(3,"F","B",3,2,2,7),\
"Testudien":(3,"FR","B",2,1,2,7),\
#"Veilleur rouge":(3,"LR","F",2,2,2,5),\
"Galop-griffe elemental":(4,"F","B",3,2,2,8),\
#"Grimpeur":(4,"F","B",3,1,3,8),\
"Gyrodorse":(4,"FLR","B",3,2,3,5),\
#"Ravageur":(4,"F","B",2,2,2,9),\
"Traqueur":(4,"F","B",4,2,3,5),\
"Frappe-defense":(5,"F","B",3,2,2,10),\
#"Galop-griffe supreme":(5,"FLR","B",3,1,2,8),\
"Mastodonte":(5,"F","LR",3,2,2,10),\
"Vulpivol":(5,"F","B",3,3,2,9),\
"Brise-roc":(6,"LR","B",3,2,3,9),\
"Brisevague":(6,"LR","B",4,3,2,10),\
#"Carapeste":(6,"BLR","F",3,3,2,10),\
#"Gueule-d'orage":(6,"BF","LR",3,2,3,10),\
"Oiseau-tempete":(6,"F","B",3,3,3,9),\
"Griffes de feu":(7,"F","B",4,2,3,10),\
#"Griffes de gel":(7,"LR","F",4,2,2,10),\
"Grilleuse":(8,"F","B",4,2,2,12),\
"Rampant":(9,"F","B",4,3,2,12),\
"Massacrepine":(10,"F","LR",4,1,2,15)}

icones={"puissance":('2#','$%,%$#',"$'('$#",'%%*%%#','%$$$($$$%#','($&$(#','+$)#','*$*#',')$+#','($&$(#',"'$($'#",'&$*$&#','$%,%$#','$%,%$#','2#'),"portee":('*$*#','($$$$$(#','&%%$%%&#',"%$'$'$%#",'%$,$%#','$$.$$#','*$*#',"#'%&%'#",'*$*#','$$.$$#','%$,$%#',"%$'$'$%#",'&%%$%%&#','($$$$$(#','*$*#'),"deplacement":('*$*#',')&)#','(%$%(#','($&$(#','*$*#','%%&$&%%#',"$%'$'%$#",'#%%*%%#',"$%'$'%$#",'%%&$&%%#','*$*#','($&$(#','(%$%(#',')&)#','*$*#'),"sante":("&'$'&#","%$'$'$%#",'$$%%&%%$$#',"#$%'$'%$#",'#$$.$$#','#$$.$$#','#$$.$$#','#$%,%$#','$$%*%$$#','%$%(%$%#','&$%&%$&#',"'$%$%$'#",'($&$(#',')$$$)#','*$*#')}
images=(('#&###','#$$$#','#$$$#','#$$$#','#&###'),('$$$#','#%$#','$$$#','$$$#','#&###'),('#&###','%$#','#&###','#$%#','#&###'),('#&###','%$#','#&###','%$#','#&###'),('#$$$#','#$$$#','#&###','%$#','%$#'),('#&###','#$%#','#&###','%$#','#&###'),('#&###','#$%#','#&###','#$$$#','#&###'),('#&###','%$#','$$$#','#$%#','#$%#'),('#&###','#$$$#','#&###','#$$$#','#&###'),('#&###','#$$$#','#&###','%$#','#&###'))
Palette=("brown","cyan",(150,255,50),"g","grey",(220,220,220))

class Machine:
 def __init__(self,name,posX,posY,rotation = 0):
  self.name,self.moved,self.attacked,self.posX,self.posY,self.rotA = name,False,False,posX,posY,rotation
  self.PV,self.Armor,self.Weak,self.Power,self.Range,self.Move,self.Health = Machine_parameters[name]

 def update_position(self,posX,posY,rotation = 0): self.posX,self.posY,self.rotA = posX,posY,rotation

def ClearScreen(c="w"): fill_rect(0,0,320,222,c)

def DessineChaine(string,X,Y,color,colorback="w"):
 CurX,CurY=X,Y
 for char in string:
  if char!='\n':
   draw_string(char,CurX,CurY,color,colorback)
   CurX += 9
  else: CurX,CurY = X,CurY+16

def Curseur(x,y,clr):
 for k in (0,1):
  fill_rect(x,y+25*k,8,1,clr)
  fill_rect(x+18,y+25*k,8,1,clr)
  fill_rect(x+25*k,y+18,1,8,clr)
  fill_rect(x+25*k,y,1,8,clr)

def EffacementCurseur(xA=0,yA=0,xB=7,yB=7):
 for i in range(xA,xB+1):
  for j in range(yA,yB+1): Curseur(Xc+25*i,Yc+25*j,"k")
 fill_rect(0,0,320,19,clrFond)
 fill_rect(0,0,116,60,clrFond)

def ActualiseAffichageSante(machine,degats=0,simulation=False,attaque_sur_blindage=False,attaque_sur_faiblesse=False):
 degats = max(1,degats)
 sante_restante,Xa,Ya = max(0,machine.Health-degats*simulation),machine.posX,machine.posY

 if simulation:
  fill_rect(Xc+5+25*Xa-7*(degats>9),Yc+3+25*Ya,8+7*(degats>9)+8,12,"r")
  DessineImage(-degats,Xc+6+25*Xa-7*(degats>9),Yc+4+25*Ya,"w","r",2)
 else: ActualiseAffichage(machine,True,False)

 Puissance=Map[Ya][Xa]+machine.Power+simulation*(attaque_sur_blindage-attaque_sur_faiblesse)
 fill_rect(Xc+1+25*Xa,Yc+18+25*Ya,5+4*(Puissance<0),7,"rb"[machine in Player_Hand])
 DessineImage(Puissance,Xc+2+25*Xa,Yc+19+25*Ya,("w",(100,200,255),"pink")[attaque_sur_blindage+2*attaque_sur_faiblesse],"rb"[machine in Player_Hand])

 fill_rect(Xc+20+25*Xa-4*(sante_restante>9),Yc+18+25*Ya,5+4*(sante_restante>9),7,"rb"[machine in Player_Hand])
 DessineImage(sante_restante,Xc+21+25*Xa-4*(sante_restante>9),Yc+19+25*Ya,"w","rb"[machine in Player_Hand])

def ActualiseAffichage(machine_choisie,actu_machine=True,actu_sante=True):
 Xa,Ya = machine_choisie.posX,machine_choisie.posY
 fill_rect(119+25*Xa,20+25*Ya,24,24,Palette[Map[Ya][Xa]+2])
 if actu_machine:
  DessineChaine(machine_choisie.name[0:2],Xc+25*Xa+4,Yc+25*Ya+4,"k",Palette[Map[Ya][Xa]+2])
  FlecheBlindage(Xc+25*Xa+5,Yc+25*Ya+5,machine_choisie.name,machine_choisie.rotA)
  if actu_sante: ActualiseAffichageSante(machine_choisie)

def FlecheBlindage(x,y,carte,rotation=0):
 clrs=[((200,200,200),("r",(50,200,255))[lettre in Machine_parameters[carte][1]])[lettre in "".join(Machine_parameters[carte][1:3])] for lettre in "FLB"]
 for k in (-1,0,1): fill_rect((x+7+2*k,x+18-2*k**2,x+7-2*k,x-3+2*k**2)[rotation],(y-4+2*k**2,y+7+2*k,y+18-2*k**2,y+7-2*k)[rotation],2,2,clrs[0])
 for k in (0,1,2): fill_rect((x-4,x+4,x+18,x+4)[rotation-k],(y+4,y-4,y+4,y+18)[rotation-k],(2,8)[rotation%2-k%2],(8,2)[rotation%2-k%2],(clrs[1+k%2],(100,200,255))[carte=="Testudien" and k==2])

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+2*zoom,zoom*3,zoom*1,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)-1,2):
     for k in (0,1):
      fill_rect(x+zoom*rang+zoom*4*element,y+zoom*ligne,zoom*(ord(elt[pos+k])-35),1*zoom,(clr_fond,clr)[k])
      rang+=ord(elt[pos+k])-35

def CadreCarte(X=5,Y=105,clr="brown"):
 for k in (0,1):
  fill_rect(X-4,Y-20+97*k,116,3,clr)
  fill_rect(X-5+115*k,Y-19,3,98,clr)

def CarteIdentite(carte,machine=None,X=198,Y=28,clr="brown"):
 fill_rect(X-2,Y-17,112,94,"k")
 DessineChaine((carte,carte.split(" ")[0])[len(carte)>14],X-3,Y-15,"y","k")
 if len(carte)>14:DessineChaine(carte.split(" ")[1],X-3,Y+1,"y","k")
 CadreCarte(X,Y,clr)
 DessineChaine("PV",X+47,Y+20,"y","k")
 for l in range(20): fill_rect(X+89-l,Y+39-l,2*l,1,"y")
 DessineChaine(str(Machine_parameters[carte][0]),X+84-4*(Machine_parameters[carte][0]>9),Y+20,"brown","y")
 FlecheBlindage(X+15,Y+30,carte)
 fill_rect(X,Y+55,108,18,"brown")
 for k in range(4):
  DessineImage(("puissance","portee","deplacement","sante")[k],X+25*k,Y+57,"w","brown")
  if k==3 and machine: DessineImage(machine.Health,X+92,Y+60,"w","brown",2)
  else: DessineImage(Machine_parameters[carte][k+3],X+17+25*k,Y+60,"w","brown",2)

def AffichageCarte(X,Y):
 for machine in Player_Hand+Adv_Hand:
  if (X,Y)==(machine.posX,machine.posY): CarteIdentite(machine.name,machine,5,105,"rb"[machine in Player_Hand])

def AffichageMain(liste_machines):
 X,Y,liste_ordonnee=25,80,sorted(set(liste_machines))
 fill_rect(5,108,224,114,"w")
 for k in range(len(liste_ordonnee)):
  DessineChaine(str(liste_machines.count(liste_ordonnee[k]))+"x"+liste_ordonnee[k],X+2,Y+28+16*k,"g")
  DessineImage(Machine_parameters[liste_ordonnee[k]][0],X-6,Y+32+16*k,"brown","y",2)

 DessineChaine("PMP "+str(sum([Machine_parameters[liste_machines[k]][0] for k in range(len(liste_machines))]))+"/10",X,Y-15,"r","w")
 sleep(0.2)

def ChoixPiecesMainJoueur(clr):
 ClearScreen()
 Liste_machines=sorted([machine for machine in Machine_parameters.keys()])
 DessineChaine("Choisir les pieces\n  du joueur "+("bleu","rouge")[clr=="r"],20,12,clr)
 Machines_choisies,rang,chg,Nb_PMP=[],1,-1,0
 DessineChaine("PMP "+str(Nb_PMP)+"/10",25,65,"r","w")
 Machine_selectionnee=Liste_machines[rang+chg]
 while not (kd(KEY_EXE) and 7 <= Nb_PMP <= 10):
  if chg:
   rang=(rang+chg)%len(Liste_machines)
   Machine_selectionnee=Liste_machines[rang]
   CarteIdentite(Machine_selectionnee,clr=clr)
   sleep(0.2)
  Nb_PMP=sum([Machine_parameters[Machines_choisies[k]][0] for k in range(len(Machines_choisies))])
  if kd(KEY_DOWN):
   if Machines_choisies.count(Machine_selectionnee)<4 and Nb_PMP<=10-Machine_parameters[Machine_selectionnee][0]:
    Machines_choisies.append(Machine_selectionnee)
    AffichageMain(Machines_choisies)
  if kd(KEY_UP):
   if Machine_selectionnee in Machines_choisies:
    Machines_choisies.remove(Machine_selectionnee)
    AffichageMain(Machines_choisies)

  chg=kd(KEY_RIGHT)-kd(KEY_LEFT)
 while kd(KEY_EXE):1
 return Machines_choisies

machine_attaquable,attaque_sur_blindage,attaque_sur_faiblesse,machine_active,machines_utilisees,score = None,False,False,None,set(),[0,0]

def orientation(machine_active):
 DessineChaine("SHIFT/ALPHA Tourner",160,1,clr,clrFond)
 if kd(KEY_ALPHA) or kd(KEY_SHIFT):
  machine_active.rotA = (machine_active.rotA+kd(KEY_ALPHA)-kd(KEY_SHIFT))%4
  if machine_attaquable: ActualiseAffichage(machine_attaquable)
  ActualiseAffichage(machine_active)
  sleep(0.1)

def EmplacementLibre(X,Y): return not any((X,Y) == (machine.posX,machine.posY) for machine in Player_Hand+Adv_Hand)

def PlacementPiece(Machines_possibles,joueur,choix,Yp):
 X,Y,chgX,chgY=4,7*Yp,-1,0
 for i in range(8):
  for j in (6*Yp,6*Yp+1): Curseur(Xc+25*i,Yc+25*j,"y")
 while not (kd(KEY_EXE) and Y in (6*Yp,6*Yp+1) and EmplacementLibre(X,Y) and (Map[Y][X]!=-2)):
  if chgX or chgY:
   CarteIdentite(Machines_possibles[choix],None,5,105,clr="rb"[Yp])
   Curseur(Xc+25*X,Yc+25*Y,"ky"[Y in (6*Yp,6*Yp+1)])
   X,Y = (X+chgX)%8,(Y+chgY)%8
   Curseur(Xc+25*X,Yc+25*Y,"r")
   AffichageCarte(X,Y)
   sleep(0.2)
  chgX,chgY=kd(KEY_RIGHT)-kd(KEY_LEFT),kd(KEY_DOWN)-kd(KEY_UP)
 joueur.append(Machine(Machines_possibles[choix],X,Y,2*(not Yp)))
 while kd(KEY_EXE):1
 Curseur(Xc+25*X,Yc+25*Y,"k")
 ActualiseAffichage(joueur[-1])
 EffacementCurseur(0,6*Yp,7,6*Yp+1)

def AffichageScores():
 DessineChaine("Scores",5,65,"purple",clrFond)
 for joueur in (0,1): DessineChaine(str(score[joueur]),70+20*joueur,65,"rb"[joueur],clrFond)

def Destruction(machine):
 score[machine in Adv_Hand]+=machine.PV
 AffichageScores()
 (Adv_Hand,Player_Hand)[machine in Player_Hand].remove(machine)
 ActualiseAffichage(machine,False)
 while max(score)>=7: DessineChaine("Fin de partie ! Victoire du joueur "+("bleu","rouge")[score[0]>=7],40,1,"br"[score[0]>=7],clrFond)

def Machines_Attaquables(machine_active):
 machine_attaquable=None
 for k in range(1,machine_active.Range+1):
  machine_attaquable = [machine for machine in (Player_Hand,Adv_Hand)[machine_active in Player_Hand] if (machine.posX,machine.posY) == (machine_active.posX + k*(2-machine_active.rotA)*(machine_active.rotA%2),machine_active.posY + k*(1-machine_active.rotA)*(machine_active.rotA%2-1))]
  if machine_attaquable: return machine_attaquable[0]
 return machine_attaquable

def SimulationAttaque(machine_attaquable,machine_active,affichage=True):
 cote_attaque = "BRFL"[(machine_attaquable.rotA-machine_active.rotA)%4]
 attaque_sur_faiblesse, attaque_sur_blindage = (cote_attaque in machine_attaquable.Weak, cote_attaque in machine_attaquable.Armor)
 degats = max(1,machine_active.Power+Map[machine_active.posY][machine_active.posX]-machine_attaquable.Power-Map[machine_attaquable.posY][machine_attaquable.posX]+attaque_sur_faiblesse-attaque_sur_blindage)
 if affichage:
  ActualiseAffichage(machine_attaquable,True,False)
  ActualiseAffichageSante(machine_attaquable,degats,True,attaque_sur_blindage,attaque_sur_faiblesse)
 return degats

def DeplacementSimple(machine_active):
 global machines_utilisees, machine_attaquable, attaque_sur_blindage, attaque_sur_faiblesse, X, Y
 X0,Y0,rot0,chgX,chgY = machine_active.posX,machine_active.posY,machine_active.rotA,0,0

 DestiPoss=[(X0,Y0)]
 for i in range(machine_active.Move):
  N=len(DestiPoss)
  for k in range(N):
   (Xp,Yp) = DestiPoss[k]
   if i==0 or Map[Yp][Xp]!=-1:
    for (dx,dy) in ((-1,0),(0,1),(1,0),(0,-1)):
     if 0<=Xp+dx<=7 and 0<=Yp+dy<=7:
      if Map[Yp+dy][Xp+dx]!=-2:
        DestiPoss.append((Xp+dx,Yp+dy))
        Curseur(Xc+25*(Xp+dx),Yc+25*(Yp+dy),"y")

 while not ((kd(KEY_EXE) or kd(KEY_OK)) and (X,Y)!=(X0,Y0) and (X,Y) in DestiPoss and len([machine for machine in Player_Hand+Adv_Hand if (machine.posX,machine.posY)==(X,Y)])==1):
  if chgX or chgY:
   Xnouv,Ynouv =min(7,max(0,X+chgX)), min(7,max(0,Y+chgY))
   if (chgX or chgY) and ((Xnouv,Ynouv)!=(X,Y)) and (Xnouv,Ynouv) in DestiPoss:
    ActualiseAffichage(machine_active,False)
    machine_active.posX,machine_active.posY=Xnouv,Ynouv
    if not EmplacementLibre(X,Y): ActualiseAffichage([machine for machine in Player_Hand+Adv_Hand if (machine.posX,machine.posY)==(X,Y)][0])
    X,Y,attaque_sur_blindage,attaque_sur_faiblesse = Xnouv,Ynouv,False,False
    ActualiseAffichage(machine_active)
    if machine_attaquable:
     ActualiseAffichage(machine_attaquable)
     ActualiseAffichageSante(machine_attaquable,0,False)
   sleep(0.1)

  orientation(machine_active)
  machine_attaquable=Machines_Attaquables(machine_active)

  if machine_attaquable and abs(X-X0)+abs(Y-Y0)<=machine_active.Move: SimulationAttaque(machine_attaquable,machine_active)

  chgX,chgY=kd(KEY_RIGHT)-kd(KEY_LEFT),kd(KEY_DOWN)-kd(KEY_UP)

  if kd(KEY_BACKSPACE):
   ActualiseAffichage(machine_active,False)
   machine_active.update_position(X0,Y0,rot0)
   ActualiseAffichage(machine_active)
   if not EmplacementLibre(X,Y): ActualiseAffichage([machine for machine in Player_Hand+Adv_Hand if (machine.posX,machine.posY)==(X,Y)][0])
   if machine_attaquable: ActualiseAffichageSante(machine_attaquable)
   EffacementCurseur()
   return False

 while kd(KEY_EXE):1
 machines_utilisees.add(machine_active)
 if machine_attaquable: ActualiseAffichageSante(machine_attaquable)
 ActualiseAffichageSante(machine_active)
 EffacementCurseur()
 return True

def AttaqueSimple(machine_active):
 global machines_utilisees, machine_attaquable, attaque_sur_blindage, attaque_sur_faiblesse
 while kd(KEY_OK):1
 X0, Y0, rot0 = machine_active.posX,machine_active.posY,machine_active.rotA
 for i in range(8):
  for j in range(8): Curseur(Xc+25*i,Yc+25*j,"kr"[abs(X0-i)+abs(Y0-j)<=machine_active.Range])

 while 1:
  orientation(machine_active)
  machine_attaquable=Machines_Attaquables(machine_active)
  if machine_attaquable:
   SimulationAttaque(machine_attaquable,machine_active)

   if kd(KEY_OK):
    EffacementCurseur()
    degats=SimulationAttaque(machine_attaquable,machine_active)
    machine_attaquable.Health -= degats
    ActualiseAffichage(machine_attaquable,machine_attaquable.Health>0)
    while kd(KEY_OK):1
    machines_utilisees.add(machine_active)
    if machine_attaquable.Health<=0: Destruction(machine_attaquable)
    return True

  if kd(KEY_BACKSPACE):
   machine_active.rotA=rot0
   ActualiseAffichage(machine_active)
   if machine_attaquable: ActualiseAffichageSante(machine_attaquable)
   while kd(KEY_BACKSPACE):1
   EffacementCurseur()
   return False

def DeroulementTour(joueur):
 global machines_utilisees,machine_attaquable,attaque_sur_blindage,attaque_sur_faiblesse,Xa,Ya,X,Y,Player_Hand,Adv_Hand
 machines_utilisees,X,chgX,chgY,tour,mode1machine=set(),X+1,-1,0,1,(len(joueur)==1)
 AffichageScores()

 while 1:
  if len([machine for machine in machines_utilisees if machine.moved ])==2 or (mode1machine and joueur[0].moved):
   DessineChaine("HOME Fin du tour "+"12"[tour-1]*mode1machine,5,1,clr,clrFond)
   if kd(KEY_HOME):
    EffacementCurseur()
    if (mode1machine and tour==2) or not mode1machine: break
    elif mode1machine and tour==1: tour, machine_active.moved,machine_active.attacked = 2,False,False

  if chgX or chgY:
   Curseur(Xc+25*X,Yc+25*Y,"k")
   X,Y=(X+chgX)%8,(Y+chgY)%8
   fill_rect(3,88,112,94,"k")
   if EmplacementLibre(X,Y):
    CadreCarte()
    fill_rect(40,95,40,40,Palette[Map[Y][X]+2])
    DessineChaine(("Gouffre","Marais","Prairie","Foret","Colline","Montagne")[Map[Y][X]+2]+"\nPuissance  "+str(Map[Y][X]),5,142,"w","k")
    DessineImage("puissance",79,160,"w","brown")
   else: AffichageCarte(X,Y)
   EffacementCurseur()
   sleep(0.2)

  Curseur(Xc+25*X,Yc+25*Y,"r")
  chgX,chgY=kd(KEY_RIGHT)-kd(KEY_LEFT),kd(KEY_DOWN)-kd(KEY_UP)

  if (X,Y) in [(machine.posX,machine.posY) for machine in joueur]:
   machine_active=[machine for machine in joueur if (machine.posX,machine.posY)==(X,Y)][0]
   if len(machines_utilisees)<2 or machine_active in machines_utilisees:
    X0,Y0,rot0=machine_active.posX,machine_active.posY,machine_active.rotA

    if not machine_active.moved:
     DessineChaine("EXE Deplacer",5,21,clr,clrFond)
     if kd(KEY_EXE): machine_active.moved = DeplacementSimple(machine_active)

    if not machine_active.attacked:
     DessineChaine("OK Attaquer",5,41,clr,clrFond)
     if kd(KEY_OK): machine_active.attacked = AttaqueSimple(machine_active)

Xc,Yc,X,Y,X0,Y0,rot0,clrFond,Player_attaquant,Player_Hand,Adv_Hand = 118,19,4,7,0,0,0,(220,220,160),False,[],[]

ClearScreen()
DessineChaine("ATTAKTH",130,15,"g")
DessineChaine("      Mode\n\n\nJoueur vs Joueur\n\n\nValider avec EXE",90,58,"purple")
for k in range(2): fill_rect(60,40+k*147,200,1,"b")
while not kd(KEY_EXE):1
while kd(KEY_EXE):1

Map=[[randint(0,1)+randint(-2,2) for k in range(8)] for i in range(4)]
Map+=[[Map[3-i][8-k-1] for k in range(8)] for i in range(4)]

Machines_adverses,Machines_choisies = ChoixPiecesMainJoueur("r"),ChoixPiecesMainJoueur("b")

ClearScreen(clrFond)
for i in range(8):
 for j in range(len(Map[i])): fill_rect(Xc+1+25*j,Yc+1+25*i,24,24,Palette[Map[i][j]+2])
for i in range(9):
 fill_rect(118+25*i,19,1,25*8,"k")
 fill_rect(118,19+25*i,25*8,1,"k")

for choix in range(max(len(Machines_choisies),len(Machines_adverses))):
 if choix<len(Machines_choisies): PlacementPiece(Machines_choisies,Player_Hand,choix,True)
 if choix<len(Machines_adverses): PlacementPiece(Machines_adverses,Adv_Hand,choix,False)

Player_attaquant=(True,False)[randint(0,1)]

while 1:
 Player_attaquant = not Player_attaquant
 clr=((150,0,0),"b")[Player_attaquant]
 for machine in Adv_Hand+Player_Hand:
  machine.moved,machine.attacked,machine.Power = False,False,Machine_parameters[machine.name][3]*((machine in Adv_Hand, machine in Player_Hand)[Player_attaquant])
  ActualiseAffichageSante(machine)
 DeroulementTour((Adv_Hand,Player_Hand)[Player_attaquant])

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.