chocolate.py 
Created by
schraf 
Created on
December 21, 2022
6.35 KB
 
 
from  kandinsky  import  fill_rect ,  get_pixel 
from  random  import  randint ,  random ,  choice 
from  time  import  sleep 
def  draw_image ( rle ,  x0 ,  y0 ,  w ,  pal ,  zoomx = 1 ,  zoomy = 1 ,  itransp =- 1 ): 
  i ,  x  =  0 ,  0 
  x0 ,  y0  =  int ( x0 ),  int ( y0 ) 
  nvals  =  len ( pal ) 
  nbits  =  0 
  nvals  -=  1 
  while ( nvals ): 
    nvals  >>=  1 
    nbits  +=  1 
  maskval  =  ( 1  <<  nbits )  -  1 
  maskcnt  =  ( 0xFF  >>  nbits  >>  1 )  <<  nbits 
  while  i < len ( rle ): 
    v  =  rle [ i ] 
    mv  =  v  &  maskval 
    c  =  ( v  &  maskcnt )  >>  nbits 
    if  ( v  &  0b10000000  or  nbits  ==  8 ): 
      i  +=  1 
      c  |=  rle [ i ]  <<  ( 7  -  nbits  +  ( nbits  ==  8 )) 
    c  =  c  +  1 
    while  c : 
      cw  =  min ( c ,  w  -  x ) 
      if  mv  !=  itransp : 
        fill_rect ( x0  +  x * zoomx ,  y0 ,  cw * zoomx ,  zoomy ,  pal [ mv ]) 
      c  -=  cw 
      x  =  ( x  +  cw )  %  w 
      y0  +=  x  ==  0  and  zoomy 
    i  +=  1 
class  particule (): 
  def  __init__ ( self ): 
    self . x  =  randint ( 0 , 70 ) 
    self . y  =  randint ( 1 , 60 ) 
    self . v  =  1 
  def  tombe ( self ): 
    if  self . y  <  49  or  self . y  >  65 :  fill_rect ( int ( self . x ),  int ( self . y ),  1 ,  1 ,  ( 0 , 0 , 0 )) 
    self . y  +=  self . v 
    self . v  +=  random () / 3 
    self . x  +=  randint ( - 1 , 1 ) 
    if  self . y  <  49  or  self . y  >  65 :  fill_rect ( int ( self . x ),  int ( self . y ),  1 ,  1 ,  ( 216 , 200 , 216 )) 
palette  =  ( 
" #081448 " , " #000020 " , " #606c98 " , " #482c40 " , " #281410 " , " #482428 " , " #604c58 " , " #986450 " , " k " , " #983c20 " , " #582018 " , " #d0c0c0 " , " #504828 " , " #b89468 " , " #a098a8 " , " #788080 " , 
) 
image  =  ( 
b " \xc0\1 a \2\x93\1\4\1\4\25\3\5\24\3\6\5\6\a\6\24\b\xa4\1 9 \b\24\b\24\x18 48 \xc0\1 a \2\x93\1\4\1\4\25\23\24\23\5\6\a\6\x84\1\x05 4) \n 4 \b\4\b\4\5 $8 \xb0\1\xf1\0\2\3\6\xf3\x00 4% \24\25\4\6\27\24\b\4\5\xf4\0\5 * \4\5 * \4 ( \32 $( \xb0\1\xf1\0\2\x83\1\x05 4% \1\24\5\4\6\27\5\4\b\xc4\1\25\24\n\t\n TH \xa0\1\x81\1\2\x83\1\x05 4 \3\25\1 $ \5 & \5\4\b\xa4\1\5\24\5\4\n\t\v\t\n\24\5\4 X \x90\1\x91\1\2\x83\1\5 $54 \5\26\a\5\4\30 % \4\5\4\a D \5\f\24\n\t * \4\6\n\4 8 \4\x90\1\x91\1\2\x83\x01 4 \25\3\x05 4 \5\6\3\6\5 $e \4\5\x1a 4 \5\24\n\t\v * \31 ( \4\x80\1\xa1\1\2\x83\x01 4 \25\x03 4 \5\3\34\3\5 $E \n\5\4\n\v\t\n\4\3\f 4 \a\v\n\4\n\33\4\30\4\x80\1\xa1\1\2 C \5\23\5\3 $ \25\x03 4 \5\23\5\x03 4 \5 : \34\5 * \25\4\5\34\4\b\4\n\4\b\4\32 ( \4\xf0\0\xb1\1\2 C \5\3\25\3 $ \25\x03 4% \f\3\5\24\5\32\26\5\4\5 $ \5\24\b\4\f\24\30\24\5\n\5\6 ( \4\xf0\0\xb1\1\x02 3U$%4% \26\5\24\f\32\t\6\30\4\25\a\t\5\4\b\4\5\24 ( \4\25\6\3\30\24 ` \xc1\1\2\23\5\3 e \24\5\3\x05 4 \5\23\26\5\24\f\32\t\6\4\b $ \v\r\f\4\b\4\5 D \5\4\34 ( \4\f\xb2\2\6\23\5\3\xf5\0\4\5\3\v 4 \5\3\f\a\6\f\24\n\5\32\a\t\34\24\32\5\4\30\4\5\f $< \4\6\30\f\x83\x01 6W \6\23\5\3\x85\1\24\5\v $ \25\3\n ' Z \a\t\r\v\f\24\5\4 (T \6 , \30\4\b\4\xa3\1\6 ' - ' \x06 5 \4 U \24\5\v 4 \5\3\n ' Z \a\t\a\6\f\4\b $ \30\24\5\f\24 <( \24\x90\1 #& \x17 6 \3 % \4 % \4\25\4\5\a\v $ \5\f\5\n\a\r\a\32\t : \f\6\5\30\24\30\4\30\24\f DX \xb1\2\6\a\6\25\24\25\24\25\4\5\33 $ \5\f\5\f\a\r\a\n ' \f\n\5\4 (T( \3 D \f X \xb1\2\6\a\6\25\24\25\24\25\24\33 $ \5\3\n\6 ' \n 7 \32\5\4 (d \b 4 \f\27 $( \xb1\2\6\a\6\25\24\5\24 % \4\5\33 $ \23\5\6 ' \n 7 \f\5 $ \30 $ \t\n\30\4\f % \n ) \4 8 \xb1\2\6\27\6\25\4\25\24\25\n\16\33\r\a\25\32\f\6\27\n 7 \x06 4 \5 $ \5\v\r\b\4\f\25\f\v\27\31\32 ( \xa1\2\b\6 ' \6 % \4\5\4\5\x8b\1\32\f\26\f\n G \5\n\f\4\5\f\4\30\32\34 % \6\a\n\4\b\24\n\b\4\b\x91\2\30\x06 7 \6\n % \4\xab\1 &% \31 ' \f\a\f\25 T \f\4\b\24 ; \a\f\32\24\b\x91\2\30\3 G \6\t\6\5\4\xab\1\6\x03 5L \n\r\n\25\4\30\4\b\4\x05 4 \a + \a\n\4\n\4\30\xf1\1 8 \3\xf7\0\f\n\xab\1\n\5\32\f\5 , \n\16\a\t\n\4 <$ \f\n\4\v\5\f\r\v ' \32\t\b\4\xe1\1 H \3 W \35\a\5\xab\1\32\6\27\n\a\31\f\v\r\31\4\6 , \5\4\5\n\f\b\v\16\f\5 - \t\n $ \v\xc1\1 h \3\6 W \r\t\6\xab\1\f\t - \t ' \t\4\r\n\t\n , \4\f\t\r\33\4\v\b\33\r\a\31\n $ \r\xa1\1\x88\1\3\f\t G \r\n\a\xab\1\27 - \t\35\27\n\r\31\4 , \4\n\33\4\v\b\3\v\6\33\b\v\30 $ \b\x91\1\x98\1\3\n\f\6\t ' \r\t\a\x9b\1\r\a\35\v\r\n\35 ' \32\4\b\4\r\v\17\6\v\b\v\b\v\b\16\b\v\b\16\v\16\f\b $ \x81\1\xa8\1\3\25 < \27\t\a\x9b\1\r\a = \t\a\r\a\t\f\4\f\4\b\37\f\a\30\26\33\b\4\30\33\36\26 ( \xf1\0\xb8\1\3 % \n\5\n\27\31\x9b\1\16\27 - \t ' \t D \6\34\17\v\16\b + \b\4\16\b\v\4\16\a\5\6\5\30 Q \xd8\1\4 U \f\t\f\n\x9b\1\16\27 - \n ' \f\24\b\4\f\6 $K \16\a\6\36\v\17\6\a\5\b\5\6\b A \xe8\1\4 % \24\25\f\32\x9b\1\a\f\a\35\a\n\t\a\f $ \b\24\a\34\4 K. \r\a\r ' \4\b\5\a\b ! \x88\2 % \4 % \f\n\f\5 ;.+ \a\n\6 ' \f\t\f\n\4\x05 4 \6\f\b\4 ] ' \n\t * \4\v\a\v\b ! \x88\2 e, \n ;. \33\16\6\32\t\27\f\32\f\n\25 $ \f $- \27\31 j \5\4\f\v\4\1\xa8\2\3\x1c 5 \n\3\34 +n \6\32\t\a\f\n\5\f\6\x1a 4 \f\4\2\4 - \27\31 j \4\f\v\34\xb8\2\3\a\t\f 5 \3\34 +n \6\4\32\34\5\4 , \n 4 \b\f\30 - ' \t j \4\f\17\a\n\xb8\2\6 ' \f\n E+n \6\24\5\f\n\25\f\4\32\24\n 4 \5 - ' \t j \f\a\b\4\f\xb8\2\6 ' \t\f\n\f\5\f\6 +n \6\4 % \32\34\4\n $ \n\t\24\b\f = \27\t j \6 ( \4\xb8\2\6 - \a\t\f\6\f\a\n\t\27 n \a\24\25\n\4\5 , \n\t\r\n\v\t\30\f\a\t\a\r\27\t j \v\f\4\b\4\xb8\2\6 - \27\t\a\6\f\n\a\n\a\6 ^ \a % \24\5 $ \34\t\v\t\n\v\4\a\r\f\r\f\r\27\t j \t\f\n\24\xb8\2\6 =7 \32\34\32\a N \6\f\n\5 $ \5 $ \26\n\t\6\4\v\r\t\f\t\f\a\r\a\t Z \t\n\4\f\4\f B \xee\1\6 =7 \f\t : \f\17 . \17\a\6\x1a 5 \34\3 F \16\35 ' \r\f\27\t J \4\r FK \16\v\xee\1 / \6\16\17\16\a\t\n\a\n\34 > \17\a\n\4\x05 6 \3 E \n\5\27\r , \t\34\r : \24 e^o \6\17\2 V \3\6\3\f & \n\f\32\a\4\n\36\37\26\n\4\25\n\x86\1\r\t\27\r L \t\a\n\24\5\a 6# \v\xfe\x01 2 \16\22\6\a\r\f ' \n\a\n\4\n\5\17\3 & \5\26\n\5\n\xf7\0\v\r\32\a , \n\t\a\16\n\24\f\36 V+n \x82\1\36 ?4 \16\4\n\a * \4\t\26\f\27\5\n\t\6\25\6 W+]. \a\17\f\6\v\16\4\5\23\5\3\xce\2\2\6\24\f\b $ \b\6\5\24\t\32\r ' $ \5\4\5\4 f \a\v\r\33\16\a\v 7. \26\4\x15 6B \16\"\16 B \26\2\26\22\6\4\b\4\6\b D \b\4\n\5\f\4\f\4\25 D \5\23\26\23\17\6\v - \27\r\t\n\6 %DE \"\6\20\6\3\20\3   \3\0\x03 0 \6\2\6\4\b\4 H \4\30\4\b\4\6\b\f\b\24\f\4\b $ \5\23\25\23\16 - ' \t\n\25\24 %T \5\36\v > \2\xbe\1\2\16\22\3 X \24\6\b 4( \4\b\4\30\24\3\4\22\26\"\6\5 & \5\4\xd5\1\3\xfe\1\x82\1\24\25\4\b\4 ( \4\3\4\5 H \4\xf8\0\3\0\4 @ \4\1 d \3\5\xf4\0\"\6\xa2\1\16\17 . \17\16\17\16\2 . \26\f\xb6\1\3 %45 \17\6\x03 6 \17\2\x06 3 \6\3\xf6\0\3\6\23\0\3\6\23\2\26\3\26 # \26\23 &B \16\17\23\6\5\f\6\f\5 ,f \f\25\xa6\1\3\26 # \5\3\5\23 %$ \2\3\0\6\2\3\6\2 #& \"\x06 2 \17\16\2\17\36\17 N \v .g \t\a Y \f\n\f ' \x0f 6? \a\xf6\0\23\6\v\36\33\16\33\xbe\2 + \16 K \16\33\36 G \xba\1\3\xf6\0\3\26 S \5\24 " 
) 
draw_image ( image ,  0 ,  1 ,  80 ,  palette ,  zoomx = 4 ,  zoomy = 4 ,  itransp =- 1 ) 
neige  =  [ particule ()  for  _  in  range ( 50 )] 
boules  =  ( 240 , 41 ),( 248 , 73 ),( 264 , 17 ),( 272 , 17 ),( 302 , 27 ),( 216 , 93 ) 
freq  =  ( 7 , 2 , 0 ),( 7 , 2 , 0 ),( 5 , 2 , 0 ),( 5 , 2 , 1 ),( 5 , 2 , 1 ),( 1 , 2 , 2 ),( 1 , 2 , 2 ),( 0 , 3 , 2 ),( 0 , 1 , 3 ) 
coul  =  ( 213 , 213 , 160 ),( 156 , 60 , 32 ),( 74 , 44 , 65 ) 
def  alea ( f ): 
  t  =  sum ( f ) 
  s  =  f [ 0 ] 
  i  =  0 
  r  =  random () 
  while  r  >  s  /  t : 
    i  +=  1 
    s  +=  f [ i ] 
  return  i 
def  flamme (): 
  for  f  in  range ( 9 ): 
    y  =  66  -  3  *  f 
    for  u  in  range ( 3 ): 
      x  =  139  +  3  *  u 
      c  =  coul [ alea ( freq [ f ])] 
      fill_rect ( x , y , 3 , 3 , c ) 
def  sapin (): 
  ( x , y )  =  choice ( boules ) 
  c  =  choice ([( 255 , 255 , 0 ),( 0 , 255 , 0 ),( 255 , 0 , 0 ),( 0 , 0 , 255 )]) 
  fill_rect ( x , y , 3 , 3 , c ) 
while  True : 
  for  p  in  neige : 
    p . tombe () 
    if  get_pixel ( int ( p . x ) + randint ( - 1 , 1 ), int ( p . y ) + 1 )  ==  ( 216 , 200 , 216 )  or  p . y  >  160 : 
      neige . remove ( p ) 
      neige . append ( particule ()) 
  flamme () 
  sapin () 
  sleep (. 1 )