trash_dice.py

Created by florian-allard

Created on July 29, 2025

7.55 KB

Adaptation du jeu Trash Dice (Dé à la poubelle).

Chacun des deux joueurs commence la partie avec 20 dés. À tour de rôle, chaque joueur lance un dé et le place dans la roue du plateau s’il n’y est pas déjà, sinon il le jette à la poubelle.

Si un joueur vient de compléter la roue du plateau, alors il récupère les 6 dés qu’elle contient.

Le premier joueur qui n’a plus de dé a perdu.


from kandinsky import *
from ion import *
from time import *
from random import randint

Plateau=[[0]*6 for i in range(5)]

def dessine_de(x,y,n,clr="k"):
  for j in (0,1):
    fill_rect(x-3,y-4+20*j,19,1,clr)
    fill_rect(x-4+20*j,y-3,1,19,clr)
  motif=(("000","010","000"),("001","000","100"),("001","010","100"),("101","000","101"),("101","010","101"),("101","101","101"))[n-1]
  for i in range(3):
    for j in range(3):
      fill_rect(x+5*i,y+5*j,3,3,("w",clr)[int(motif[j][i])])

def dessine_poubelle(x,y,mode_rouge=0):
  vert_fonce=(80,120,50)
  vert_moyen=(100,170,50)
  vert_clair=(150,200,50)
  
  # pour une poubelle bleue et violette : 
  #vert_fonce=(160,0,255)
  #vert_moyen=(0,0,250)
  #vert_clair=(0,200,250)
  
  if mode_rouge:
    vert_fonce=(150,0,0)
    vert_moyen=(200,0,0)
    vert_clair=(250,0,0)
  fill_rect(x+7,y+1,29,3,vert_fonce)
  fill_rect(x+4,y+5,35,2,vert_clair)
  fill_rect(x+16,y+6,11,1,vert_fonce)
  fill_rect(x+1,y+8,41,3,vert_fonce)
  fill_rect(x+6,y+14,29,28,vert_clair)
  fill_rect(x+7,y+42,25,1,vert_clair)
  fill_rect(x+6,y+12,31,2,vert_moyen)
  fill_rect(x+33,y+14,4,1,vert_moyen)
  fill_rect(x+34,y+15,3,1,vert_moyen)
  fill_rect(x+35,y+16,2,26,vert_moyen)
  fill_rect(x+34,y+39,1,4,vert_moyen)
  fill_rect(x+33,y+41,1,2,vert_moyen)
  set_pixel(x+32,y+42,vert_moyen)
  fill_rect(x+11,y,3,1,"k")
  fill_rect(x+29,y,3,1,"k")
  fill_rect(x+7,y+1,5,1,"k")
  fill_rect(x+13,y+1,17,1,"k")
  fill_rect(x+31,y+1,5,1,"k")
  fill_rect(x+6,y+2,1,2,"k")
  fill_rect(x+36,y+2,1,2,"k")
  fill_rect(x+4,y+4,35,1,"k")
  fill_rect(x+3,y+5,1,2,"k")
  fill_rect(x+39,y+5,1,2,"k")
  fill_rect(x+1,y+7,41,1,"k")
  fill_rect(x,y+8,1,3,"k")
  fill_rect(x+42,y+8,1,3,"k")
  fill_rect(x+1,y+11,41,1,"k")
  fill_rect(x+5,y+12,1,28,"k")
  fill_rect(x+37,y+12,1,28,"k")
  fill_rect(x+6,y+40,1,2,"k")
  fill_rect(x+36,y+40,1,2,"k")
  set_pixel(x+7,y+42,"k")
  set_pixel(x+35,y+42,"k")
  fill_rect(x+8,y+43,27,1,"k")
  fill_rect(x+11,y+44,2,1,"k")
  fill_rect(x+30,y+44,2,1,"k")
  fill_rect(x+10,y+45,2,1,"k")
  fill_rect(x+31,y+45,2,1,"k")
  # bras
  set_pixel(x+4,y+21,"k")
  set_pixel(x+38,y+21,"k")
  fill_rect(x+3,y+22,1,2,"k")
  fill_rect(x+39,y+22,1,2,"k")
  fill_rect(x+2,y+24,1,8,"k")
  fill_rect(x+40,y+24,1,8,"k")
  fill_rect(x+1,y+30,1,2,"k")
  fill_rect(x+41,y+30,1,2,"k")
  # yeux
  for k in (0,1):
      fill_rect(x+14+13*k,y+16,2,1,"k")
      fill_rect(x+13+13*k,y+17,4,2,"k")
      fill_rect(x+14+13*k,y+19,2,1,"k")
  # bouche
  fill_rect(x+20,y+18,1,2,"k")
  fill_rect(x+22,y+18,1,2,"k")
  set_pixel(x+21,y+20,"k")
  # joues
  for k in (0,1):
    fill_rect(x+12+17*k,y+20,2,1,"pink")
    fill_rect(x+11+17*k,y+21,4,1,"pink")
    fill_rect(x+12+17*k,y+22,2,1,"pink")
  # flèches blanches
  fill_rect(x+19,y+22,6,1,"w")
  fill_rect(x+17,y+23,9,1,"w")
  fill_rect(x+16,y+24,11,1,"w")
  fill_rect(x+15,y+25,6,1,"w")
  fill_rect(x+23,y+25,6,1,"w")
  fill_rect(x+15,y+26,5,1,"w")
  fill_rect(x+24,y+26,5,1,"w")
  fill_rect(x+17,y+27,2,1,"w")
  fill_rect(x+25,y+27,4,1,"w")
  fill_rect(x+23,y+28,6,1,"w")
  fill_rect(x+28,y+23,1,2,"w")

  fill_rect(x+12,y+29,7,1,"w")
  fill_rect(x+14,y+30,5,1,"w")
  fill_rect(x+13,y+31,6,1,"w")
  fill_rect(x+12,y+32,5,1,"w")
  fill_rect(x+12,y+33,4,2,"w")
  fill_rect(x+12,y+35,5,1,"w")
  fill_rect(x+12,y+36,9,1,"w")
  fill_rect(x+13,y+37,8,1,"w")
  fill_rect(x+14,y+38,7,1,"w")
  fill_rect(x+16,y+39,5,1,"w")
  fill_rect(x+18,y+32,1,2,"w")

  fill_rect(x+28,y+30,3,1,"w")
  fill_rect(x+26,y+31,5,1,"w")
  fill_rect(x+27,y+32,5,1,"w")
  fill_rect(x+28,y+33,4,2,"w")
  fill_rect(x+27,y+35,5,1,"w")
  fill_rect(x+23,y+36,9,1,"w")
  fill_rect(x+22,y+37,9,1,"w")
  fill_rect(x+22,y+38,8,1,"w")
  fill_rect(x+23,y+39,5,1,"w")
  fill_rect(x+23,y+35,1,6,"w")
  fill_rect(x+24,y+34,1,8,"w")


draw_string("Trash Dice",110,70,"purple")
draw_string("Dés à la poubelle",75,95,"purple")
draw_string("Valider avec OK",85,135,"purple")
for k in range(2): 
  fill_rect(60,49+k*122,200,1,"g")

for k in range(14):
  dessine_de(25+43*(k%7),18+172*(k//7),randint(1,6),"bg"[k%2-k//7])
for k in range(6):
  dessine_de(25+258*(k//3),61+43*(k%3),randint(1,6),"bg"[1-k%2-k//3])


while not (keydown(KEY_OK) or keydown(KEY_EXE)):1
while keydown(KEY_OK) or keydown(KEY_EXE):1

fill_rect(0,0,320,222,"w")

draw_string("Présentation",100,10,(80,150,50))
Regles=("Chaque joueur lance un dé","puis le place dans la roue","s'il n'y est pas déjà.","Sinon, il est jeté.","Si un joueur complète la","roue, alors il récupère","les 6 dés qu'elle contient.","Le premier joueur qui n'a","plus de dés a perdu.","Lancer de dé : ")
for k in range(len(Regles)):
  draw_string(Regles[k],20,33+18*k,"b")

draw_string("<            >",170,195,"orange")

mode_auto=0
chg=1
while not (keydown(KEY_OK) or keydown(KEY_EXE)):
  if chg:
    draw_string(("manuel","automatique")[mode_auto],210-25*mode_auto,195,"w")
    mode_auto=1-mode_auto
    draw_string(("manuel","automatique")[mode_auto],210-25*mode_auto,195,"purple")
    sleep(0.2)
  chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
while keydown(KEY_OK) or keydown(KEY_EXE):1

fill_rect(0,0,320,222,"w")

Des=[[0]*20,[1]*20]
Plateau=dict()

for joueur in (0,1):
  draw_string("Joueur",25+210*joueur,20,"bg"[joueur])
  draw_string(("bleu","vert")[joueur],35+210*joueur,40,"bg"[joueur])
  for k in range(20):
    X=k%4
    if joueur==1:
      X=3-X
    dessine_de(14+23*X+210*joueur,195-23*(k//4),randint(1,6),"bg"[joueur])

dessine_poubelle(139,166)

for k in range(1,7):
  dessine_de(124+59*(k==3)+14*(k in (1,5))+45*(k in (2,4)),20+30*(k%3==0)+60*(k in (4,5)),k,(230,230,230))

while Des[0]!=[] and Des[1]!=[]:
  for joueur in (0,1): # on alterne entre les joueurs
    if not mode_auto:
      draw_string("Appuyer",125,120,"bg"[joueur])
      draw_string("sur OK",130,140,"bg"[joueur])
      while not (keydown(KEY_OK) or keydown(KEY_EXE)):1
      draw_string("Appuyer",125,120,"w")
      draw_string("sur OK",130,140,"w")

    X=(len(Des[joueur])-1)%4
    if joueur==1:
      X=3-X
    Y=(len(Des[joueur])-1)//4
    dessine_de(14+23*X+210*joueur,195-23*Y,6,"w") # on efface le dé qu'on va lancer
    for k in range(20):
      dessine_de(154,130,randint(1,6),"bg"[Des[joueur][-1]])
      sleep(0.1)
    N=randint(1,6)
    dessine_de(154,130,N,"bg"[Des[joueur][-1]])
    sleep(1)
    if N not in Plateau.keys():
      Plateau[N]=Des[joueur].pop()
      dessine_de(124+59*(N==3)+14*(N in (1,5))+45*(N in (2,4)),20+30*(N%3==0)+60*(N in (4,5)),N,"bg"[Plateau[N]])
      dessine_de(154,130,N,"w")
    else:  # on jette le dé
      Des[joueur].pop()
      for k in range(4):
        fill_rect(146,125+k,22,1,"w")
        dessine_de(154,130+k**2,N,"w")
        dessine_de(154,130+(k+1)**2,N,"r")
        sleep(0.02)
      dessine_de(154,146,N,"w")
      dessine_poubelle(139,166,1) # mode rouge
      sleep(0.5)
      dessine_poubelle(139,166) # mode vert
      
    sleep(1)
    #for i in range(1,7):
    #  if i in Plateau.keys():
    #    dessine_de(50+30*i,50,i,"bg"[Plateau[i]])
    if len(list(Plateau.keys()))==6:
      draw_string("Bravo !",125,130,"bg"[joueur])
      sleep(2)
      for k in range(1,7):
        Des[joueur].append(Plateau[k])
        X=(len(Des[joueur])-1)%4
        if joueur==1:
          X=3-X
        Y=(len(Des[joueur])-1)//4
        dessine_de(14+23*X+210*joueur,195-23*Y,randint(1,6),"bg"[Plateau[k]])
        dessine_de(124+59*(k==3)+14*(k in (1,5))+45*(k in (2,4)),20+30*(k%3==0)+60*(k in (4,5)),k,(230,230,230))
        sleep(0.2)
      Plateau=dict()
      draw_string("Bravo !",125,130,"w")

if Des==[[],[]]:
  draw_string("Egalité !",115,130,"r")
else:
  clr="bg"[Des[0]==[]]
  draw_string("Joueur",130,105,clr)
  draw_string(("bleu","vert")[Des[0]==[]],140,125,clr)
  draw_string("a gagné !",115,145,clr)

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.