#! /usr/bin/python3 # chelem -- www.jchr.be -- 20070201 -- GPL2 # adaptation à python3: 20201023 (il était temps) # Écrit pour Unix (sous Windows, installer Wcurses?) from time import time, sleep from random import randrange import curses # choix des joueurs joueurs =['FED', 'NAD', 'DJO', 'SAM', '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 =int(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 1.1 -- www.jchr.be -- GPL2 -- 2020.10.23') 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 npts =[0, 0] 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, npts point =randrange(5) if jeux%2 ==0: # léger avantage au serveur: probablilité 0.6 de faire le point if point>1: jeu0 +=1 ; npts[0] +=1 else: jeu1 +=1 else: if point>1: jeu1 +=1 ; npts[1] +=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).rjust(4)+" "+str(sets1).rjust(4)) sts0 =0; sts1 =0 for i in range(len(set0)): sts0 +=set0[i]; sts1 +=set1[i] fenetre.addstr(7, 2, "Jeux: "+str(sts0).rjust(4)+' '+str(sts1).rjust(4)) fenetre.addstr(8, 2, "Pnts: "+str(npts[0]).rjust(4)+' '+str(npts[1]).rjust(4)) 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()