#! /usr/bin/python # -*- coding: latin-1 -*- # chelem -- www.jchr.be -- 20070201 -- GPL2 # Sous Windows, il faut installer Wcurses (voir www.jchr.be/inf/python/index.htm#t54) from __future__ import division from time import time, sleep from random import randrange import curses # choix des joueurs joueurs=['FED','NAD','DAV','ROD','GON','BLA','ROB','LJU','HAA','ANC'] j1=0;j2=0 while j1==j2: j1=randrange(10) j2=randrange(10) j1,j2=min(j1,j2),max(j1,j2) spd=input('Vitesse de jeux (0= instantané, 10= 1 sec/point): ') spd/=10 # Initialisation de la session 'curses' (à ne faire qu'une fois) ecran= curses.initscr() fenetre= curses.newwin(15,50,0,0) fenetre.keypad(1) curses.curs_set(0) curses.cbreak() curses.noecho() fenetre.addstr(0,0,'Chelem -- www.jchr.be -- GPL2 -- 2007.02.21') fenetre.addstr(2,0,('('+str(j1+1)).rjust(3)+') '+joueurs[j1]) # rang plus nom fenetre.addstr(3,0,('('+str(j2+1)).rjust(3)+') '+joueurs[j2]) # des 2 joueurs fenetre.refresh() tm=0 fin=0 jeu0=0; jeu1=0 # jeux=0 # jeu joués (pour savoir à qui est le service) set0=[0]; set1=[0] sets0=0; sets1=0 # nombre de sets gagnés par joueur st=0 # nombre de sets joués def ralentir(): global tm sleep(spd) # vous pouvez modifier le temps d'attente entre chaque point, voir supprimer cette ligne tm=tm +10+randrange(15)+randrange(10)+randrange(5) # estimation du temps en secondes pour un point mn,dummy=divmod(tm,60) hr,mn=divmod(mn,60) fenetre.addstr(5,2,str(hr).zfill(2)+':'+str(mn).zfill(2)) def affiche(): aff0=''; aff1='' for i in range(len(set0)): if i==5: break if i==4: aff0+=' '; aff1+=' ' aff0+=str(set0[i]).rjust(2) aff1+=str(set1[i]).rjust(2) if jeux%2==0: aff0+=' *'; aff1+=' ' else: aff1+=' *'; aff0+=' ' points0=str(jeu0*15).zfill(2); points1=str(jeu1*15).zfill(2) if points0=='45': points0=='40' if points1=='45': points1=='40' if points0=='00': points0==' ' if points1=='00': points1==' ' if jeu0>2 and jeu1>2: if jeu0==jeu1: points0='=='; points1='==' else: if jeu0>jeu1: points0='AD'; points1=' ' else: points0=' '; points1='AD' fenetre.addstr(2,8,aff0+points0+' ') fenetre.addstr(3,8,aff1+points1+' ') fenetre.refresh() ralentir() def afftie(): aff0=''; aff1='' for i in range(len(set0)): aff0+=str(set0[i]).rjust(2) aff1+=str(set1[i]).rjust(2) if jeux%2==0: aff0+=' *'; aff1+=' ' else: aff1+=' *'; aff0+=' ' points0=str(jeu0).zfill(2); points1=str(jeu1).zfill(2) if jeu0>6 or jeu1>6: if jeu0==jeu1: points0='=='; points1='==' else: if jeu0>jeu1: points0='AD'; points1=' ' else: points0=' '; points1='AD' fenetre.addstr(2,8,aff0+points0) fenetre.addstr(3,8,aff1+points1) fenetre.refresh() ralentir() def points(): global point, jeu0, jeu1, jeux point=randrange(5) if jeux%2==0: # léger avantage au serveur: probablilité 0.6 de faire le point if point>1: jeu0+=1 else: jeu1+=1 else: if point>1: jeu1+=1 else: jeu0+=1 while (fin==0): points() if (jeu0>3 or jeu1>3) and abs(jeu0-jeu1)>1: # si l'on dépasse "40" avec deux points d'avance if jeu0>jeu1: set0[st]+=1 # gain du jeu else: set1[st]+=1 jeu0=0;jeu1=0;jeux+=1 # remise du jeu à zéro if (set0[st]>5 or set1[st]>5): # si l'un arrive à six jeux if set0[st]==6 and set1[st]==6 and not (sets0==2 and sets1==2): # tie-break en cas de 6-6 sauf au dernier set jx=jeux; zut=(jeux%2)*2 while True: zut+=1; jeux=zut/2 points() if (jeu0>6 or jeu1>6) and abs(jeu0-jeu1)>1: # si l'on dépasse 6 points avec deux points d'avance if jeu0>jeu1: set0[st]+=1; sets0+=1 # gain du tie-break else: set1[st]+=1; sets1+=1 jeu0=0; jeu1=0; jeux=jx; jeux+=1 st+=1; set0+=[0]; set1+=[0] afftie() # affichage du tie-break est légèrement différent break afftie() if abs(set0[st]-set1[st])>1: # si par contre différence de deux jeux if set0[st]>set1[st]: sets0+=1 else: sets1+=1 st+=1; set0+=[0]; set1+=[0] affiche() # affichage normal des points if sets0==3 or sets1==3: break # si un joueur obtient trois sets fenetre.addstr(6,2,"Sets: "+str(sets0)+' '+str(sets1)) sts0=0; sts1=0 for i in range(len(set0)): sts0+=set0[i]; sts1+=set1[i] fenetre.addstr(7,2,"Jeux: "+str(sts0).rjust(2)+' '+str(sts1).rjust(2)) fenetre.addstr(9,2,"Une touche pour quitter") fenetre.refresh() curses.nocbreak() fenetre.getch() # Termine la session 'curses' fenetre.keypad(0) curses.echo() curses.curs_set(1) curses.endwin()