Advertisement
here2share

# Tk_fluid.py

Sep 5th, 2020 (edited)
1,788
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.02 KB | None | 0 0
  1. # Tk_fluid.py ZZZ
  2.  
  3. import random
  4. from Tkinter import *
  5. from itertools import product
  6.  
  7. s = "** Press Spacebar To Restart **"
  8.  
  9. ppp = '''
  10. ## OOOOOOOOOOOOOOOO  OOOOOO                                         OOOOOO ##
  11. ## OOOOOOOOOOOOOOOO  OOOOOO                                         OOOOOO ##
  12. ## OOOOOOOOOOOOOOOO  OOOOOO                     OOOOOO              OOOOOO ##
  13. ## OOOOOO            OOOOOO                     OOOOOO              OOOOOO ##
  14. ## OOOOOO            OOOOOO                     OOOOOO              OOOOOO ##
  15. ## OOOOOO            OOOOOO                                         OOOOOO ##
  16. ## OOOOOO            OOOOOO                                         OOOOOO ##
  17. ## OOOOOOOOOOOOOOOO  OOOOOO  OOOOOO     OOOOOO  OOOOOO              OOOOOO ##
  18. ## OOOOOOOOOOOOOOOO  OOOOOO  OOOOOO     OOOOOO  OOOOOO       OOOOO  OOOOOO ##
  19. ## OOOOOOOOOOOOOOOO  OOOOOO  OOOOOO     OOOOOO  OOOOOO    OOOOOOOOOOOOOOOO ##
  20. ## OOOOOO            OOOOOO  OOOOOO     OOOOOO  OOOOOO   OOOOOOOOOOOOOOOOO ##
  21. ## OOOOOO            OOOOOO  OOOOOO     OOOOOO  OOOOOO  OOOOOOO     OOOOOO ##
  22. ## OOOOOO   ####     OOOOOO  OOOOOO     OOOOOO  OOOOOO  OOOOOO      OOOOOO ##
  23. ## OOOOOO   ####     OOOOOO  OOOOOO     OOOOOO  OOOOOO  OOOOOO      OOOOOO ##
  24. ## OOOOOO   ####     OOOOOO  OOOOOO     OOOOOO  OOOOOO  OOOOOO      OOOOOO ##
  25. ## OOOOOO            OOOOOO  OOOOOO     OOOOOO  OOOOOO  OOOOOO      OOOOOO ##
  26. ## OOOOOO            OOOOOO  OOOOOOO    OOOOOO  OOOOOO  OOOOOOO     OOOOOO ##
  27. ## OOOOOO            OOOOOO   OOOOOOOOOOOOOOOO  OOOOOO   OOOOOOOOOOOOOOOOO ##
  28. ## OOOOOO            OOOOOO    OOOOOOOO OOOOOO  OOOOOO    OOOOOOOOO OOOOOO ##
  29. ## OOOOOO            OOOOOO      OOOO   OOOOOO  OOOOOO      OOOOO   OOOOOO ##
  30. ##                                                                         ##
  31. ##     ####                         ##########           ######            ##
  32. ##     ####                                              ######            ##
  33. ##     ####          ##                         ##       ######            ##
  34. ##                   ##        ###########      ##                         ##
  35. ##                   ##                         ####################       ##
  36. #################    ##                         ##                         ##
  37. ##                   ##                 ##########    #######################
  38. ##                   ##                                                    ##
  39. ##                   ##                                                    ##
  40. ##                   ##                                                    ##
  41. ##                   ##                                                    ##
  42. ##                   ##                                                    ##
  43. ##                   ##                                                    ##
  44. ##                   ##                                                    ##
  45. ##                   ##                                                    ##
  46. ##                   ##                                                    ##
  47. ##                   ##                                                    ##
  48. ##                                                                         ##
  49. ##                                                                         ##
  50. ##                                                                         ##
  51. ##                                                                         ##
  52. ###                                                                       ###
  53. ####                                                                   ####
  54.  #########################################################################  
  55.     ###################################################################    
  56. '''.splitlines()
  57.  
  58. nnn = (-1,-1),(0,-1),(1,-1),(-1,0),(0,0),(1,0),(-1,1),(0,1),(1,1)
  59. gravity = [-0.12,-0.1,-0.1,-0.01,0,-0.01,0.25,0.2,0.2]
  60. oLR = {3:1,5:2}
  61. def num_neighbors(pos):
  62.     zzz = {}
  63.     x,y = xy[pos]
  64.     for z in range(9):
  65.         a,b = nnn[z]
  66.         try:
  67.             zzz[z] = grid[(x+a,y+b)]
  68.         except:
  69.             zzz[z] = 2
  70.     for z in [7,6,8]:
  71.         if not zzz[z]:
  72.             a,b = nnn[z]
  73.             grid[(x+a,y+b)] = 1
  74.             grid[(x,y)] = 0
  75.             top[(x,y)] = 2
  76.             xy[pos] = (x+a,y+b)
  77.             vel[pos] += gravity[z]
  78.             return
  79.     LR = (0,(3,5),(5,3))[grid[(x,y)]]
  80.     for z in LR:
  81.         if not zzz[z]:
  82.             a,b = nnn[z]
  83.             grid[(x+a,y+b)] = oLR[z]
  84.             grid[(x,y)] = 0
  85.             top[(x,y)] = 20
  86.             xy[pos] = (x+a,y+b)
  87.             vel[pos] += gravity[z]
  88.             return
  89.     '''
  90.     if vel[pos] > 1: # ZZZ upward splash
  91.         for z in [1,0,2]:
  92.             if not zzz[z]:
  93.                 a,b = nnn[z]
  94.                 grid[(x+a,y+b)] = 1
  95.                 grid[(x,y)] = 0
  96.                 xy[pos] = (x+a,y+b)
  97.                 vel[pos] += gravity[z]
  98.                 return
  99.     '''
  100. 0
  101. def update_state():
  102.     xy.sort(key=lambda z: z[1],reverse=1)
  103.     for z in range(len(xy)):
  104.         num_neighbors(z)
  105. 0
  106. def print_grid():
  107.     ttt = list(top)
  108.     for x,y in ttt:
  109.         canvas.create_text(x*4+10,y*4+60,text='.', font=fff, fill='blue', tag='temp')
  110.         top[(x,y)] -= 1
  111.         t = (x,y+1)
  112.         if not top[(x,y)]:
  113.             del top[(x,y)]
  114.         elif t in grid:
  115.             if grid[t] in (0,'#'):
  116.                 del top[(x,y)]
  117.     for x,y in xy:
  118.         canvas.create_text(x*4+10,y*4+60,text='.', font=fff, fill='blue', tag='temp')
  119.     canvas.update()
  120.     canvas.delete('temp')
  121. 0
  122. fff = ('Times New Roman', 16, "bold")
  123. root = Tk()
  124. ww = len(ppp[1])*4+16
  125. hh = len(ppp)*4+80
  126. canvas = Canvas(root, bg='lightgray', height=hh, width=ww)
  127. canvas.pack()
  128. go = [1]
  129. def restart(e):
  130.     go[0] = 0
  131. root.bind("<space>", restart)
  132.  
  133. canvas.create_text(10, 36, text=s, font=('Ariel', 16, "italic"), fill='black', anchor=NW)
  134. s = 'A Basic Fluid Simulation'
  135. canvas.create_text(18, 6, text=s, font=('Ariel', 19, 'bold'), fill='darkred', anchor=NW)
  136. while 1:
  137.     xy = []
  138.     vel = []
  139.     top = {}
  140.     solid = []
  141.     grid = {}
  142.     for y in range(len(ppp)):
  143.         for x in range(len(ppp[y])):
  144.             if ppp[y][x] in (' '):
  145.                 grid[(x,y)] = 0
  146.             elif ppp[y][x] in ('#'):
  147.                 grid[(x,y)] = '#'
  148.                 solid += [(x*4+10,y*4+60)]
  149.             else:
  150.                 grid[(x,y)] = 1
  151.                 xy += [(x,y)]
  152.                 vel += [0]
  153.     for x,y in solid:
  154.         canvas.create_text(x, y, text='.', font=fff, fill='red')
  155.     while go[0]:
  156.         print_grid()
  157.         update_state()
  158.     go[0] = 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement