isola.py

Created by frablock

Created on May 25, 2022

3.72 KB

Un simple jeu isola :

Deux participants s’affrontent en tentant d’encercler l’autre, celui qui se fait encercler le premier perds Ce script inclus un mode solo et un mode duo


s=False
r='4'
q='3'
p='2'
o=int
h=True
g=None
f="\nID de l'action : "
Y='1'
X=range
G=input
C='N'
E=print
B='R'
A=' '
from random import randint as D,choice as i
from time import sleep
M=[['YX',Y,p,q,r,'5','6','7'],['1 ',A,A,A,C,A,A,A],['2 ',A,A,A,A,A,A,A],['3 ',A,A,A,A,A,A,A],['4 ',A,A,A,A,A,A,A],['5 ',A,A,A,A,A,A,A],['6 ',A,A,A,A,A,A,A],['7 ',A,A,A,B,A,A,A]]
P=[4,1]
Q=[4,7]
R=C
S=B
N=100*'\n'
O=s
Z=C
a='ISOLA'
j='ERREUR'
def T():
  E(N)
  for D in X(8):
    A=''
    for F in X(8):A+='['+M[D][F]+']'
    E(A.replace(C,R).replace(B,S))
def k():
  global S;global R;E(N+a+"\n\n---\n\nVeuillez choisir\n\n1. changer l'icone des joueurs\n2. retour")
  if G(f)!=Y:L()
  else:S=G('Pion Rouge : ');R=G('Pion Noir : ');L()
def U(pos_x,pos_y):B=pos_y;A=pos_x;return A>0 and A<=7 and B>0 and B<=7
def b(pos_x,pos_y,pos_ctrl_x,pos_ctrl_y):D=pos_ctrl_y;C=pos_ctrl_x;B=pos_y;A=pos_x;return A>=C-1 and A<=C+1 and B>=D-1 and B<=D+1 and not(A==C and B==D)
def I(pos_x,pos_y):return M[pos_y][pos_x]
def V(pos_x,pos_y,valeur):global M;M[pos_y][pos_x]=valeur
def H(jeton):
  A=jeton
  if A==C:return P
  if A==B:return Q
  return g
def l(jeton,pos_x,pos_y):
  E=pos_y;D=pos_x;A=jeton
  if A==C:global P;P=[D,E]
  if A==B:global Q;Q=[D,E]
  V(D,E,A)
def c(jeton):
  A=jeton
  if A==C:return B
  if A==B:return C
  return g
def d(jeton):
  A=jeton
  if A==C:return'Noir'
  if A==B:return'Rouge'
  return g
def J(pos_x,pos_y,jeton):
  M=pos_y;L=pos_x;D=jeton;global K;O=1 if D==B else 0;K=H(D)
  if U(L,M):
    if b(L,M,K[0],K[1]):
      if I(L,M)==A:
        V(K[0],K[1],A);l(D,L,M);T();G=F('Choisissez la case à effacer.',O)
        while not U(G[0],G[1])and I(G[0],G[1])!=A:G=F('Ne choisissez pas de case hors de la grile ou occupée.')
        V(G[0],G[1],'#');T();N=c(D);P=H(N)
        if m(P[0],P[1])>0:O=1 if N==B else 0;C=F(d(N)+', à vous de jouer',O);J(C[0],C[1],N)
        else:E(d(D)+' a gagné!');n()
      else:C=F('Ne choisissez pas de case occupée.');J(C[0],C[1],D)
    else:C=F('Veuillez choisir des coordonnées adjacents au joueur.');J(C[0],C[1],D)
  else:C=F('Ne choisissez pas de case hors de la grille.');J(C[0],C[1],D)
def F(question,a=0):
  A=question
  if not O or a==0:E(A);C=o(G('position X: '));D=o(G('position Y: '));return[C,D]
  elif A=='Rouge, à vous de jouer':return e(B)[0]
  else:return e(B)[1]
def m(pos_x,pos_y):
  C=pos_y;B=pos_x;F=0
  for D in X(B-1,B+2,1):
    for E in X(C-1,C+2,1):
      if U(D,E)and b(D,E,B,C)and I(D,E)==A:F+=1
  return F
def W():global Z;T();A=F('Noir, à vous de jouer');J(A[0],A[1],Z)
def L():
  global O;E(N+a+'\n\n---\n\nVeuillez choisir\n\n1. Jouer\n2. Contre IA\n3. Paramètres\n4. Quitter');A=G(f)
  if A==Y:O=s;W()
  elif A==p:O=h;W()
  elif A==q:k()
  elif A==r:E('Au revoir')
  else:E("Choix incorect, merci d'écrire un nombre pour choisir");L()
def n():
  E('\n\n---\n\nVeuillez choisir\n\n1. Rejouer\n2. Revenir au menu')
  if G(f)!=Y:L()
  else:W()
def e(jeton):
  J=jeton;E(i(["C'est à moi de jouer",'À mon tour de jouer','Grâce à ma superpuissance de calcul, je vais pouvoir te battre','Tu es sûr que tu as bien joué ?','La moindre erreur te seras fatale','IA.win=True','je réfléchis','Que faire dans ce cas ?','Et si je tentais ce coup','Avec ce coup, je suis sûr de gagner','Je vais te vaincre','Je peux te battre','Tu peux le faire','Je ne peux pas perdre',"La défaite m'est inconnue"]));sleep(1);B=H(J)[0];C=H(J)[1];F=[D(B-1,B+1),D(C-1,C+1)]
  while h:
    try:
      while I(F[0],F[1])!=A:F=[D(B-1,B+1),D(C-1,C+1)]
      break
    except:F=[D(B-1,B+1),D(C-1,C+1)]
  K=c(J);B=H(K)[0];C=H(K)[1];G=[D(B-1,B+1),D(C-1,C+1)]
  while h:
    try:
      while I(G[0],G[1])!=A:G=[D(B-1,B+1),D(C-1,C+1)]
      break
    except:G=[D(B-1,B+1),D(C-1,C+1)]
  return[F,G]
try:L()
except:E(N+j+'\nUne erreur fatale est survenue')