Guest User

HORRIBLE

a guest
Oct 14th, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.23 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. pygame.init()
  4.  
  5. import sheet
  6. import generator
  7. import debugscreen
  8.  
  9. ALPHA = (255, 0, 255)
  10.  
  11. screen = pygame.display.set_mode((0, 0), pygame.RESIZABLE)
  12. SHEET = sheet.SpriteSheet("img/terrariatiles.png")
  13. IMAGES = SHEET.images(tilesize=16, colorkey=ALPHA)
  14.  
  15. WORLD = generator.TerrariaGenerator(size=(160, 60))
  16. WORLD.generate()
  17. LEVEL = WORLD.level
  18.  
  19. levelsurface = pygame.Surface((1900, 900))
  20.  
  21.  
  22. def doit():
  23.     global level
  24.     for y, row in enumerate(LEVEL):
  25.         for x, tile in enumerate(row):
  26.             if tile:
  27.                 try:
  28.                     air = row[x + 1]
  29.                 except Exception:
  30.                     pass
  31.                 else:
  32.                     if not air:
  33.                         if not LEVEL[y - 1][x]:
  34.                             tile = 3
  35.                         else:
  36.                             tile = 6
  37.                 air = row[x - 1]
  38.                 if not air:
  39.                     if not LEVEL[y - 1][x]:
  40.                         if tile == 3:
  41.                             tile = 5
  42.                         else:
  43.                             tile = 4
  44.                     else:
  45.                         if tile == 6:
  46.                             tile = 8
  47.                         else:
  48.                             tile = 7
  49.                 LEVEL[y][x] = tile
  50.     for y, row in enumerate(LEVEL):
  51.         for x, tile in enumerate(row):
  52.             if LEVEL[y - 1][x] in (6, 3, 14):
  53.                 try:
  54.                     pos = LEVEL[y][x + 1]
  55.                 except Exception as e:
  56.                     print(e)
  57.                 else:
  58.                     if pos in (2, 3):
  59.                         LEVEL[y][x] = 11
  60.             if LEVEL[y - 1][x] in (7, 4, 15):
  61.                 pos = LEVEL[y][x - 1]
  62.                 if pos in (2, 4):
  63.                     LEVEL[y][x] = 12
  64.             if LEVEL[y - 1][x] in (5, 8):
  65.                 if LEVEL[y][x] == 1:
  66.                     LEVEL[y][x] = 13
  67.             if LEVEL[y][x] == 6:
  68.                 if LEVEL[y][x - 1] in (2, 4):
  69.                     LEVEL[y][x] = 14
  70.             if LEVEL[y][x] == 7:
  71.                 try:
  72.                     tile = LEVEL[y][x + 1]
  73.                 except Exception as e:
  74.                     print(e)
  75.                 if tile in (2, 3):
  76.                     LEVEL[y][x] = 15
  77.  
  78.     for y, row in enumerate(LEVEL):
  79.         for x, tile in enumerate(row):
  80.             if tile:
  81.                 levelsurface.blit(IMAGES[1], (x * 16, y * 16))
  82.             levelsurface.blit(IMAGES[tile], (x * 16, y * 16))
  83.  
  84.  
  85. def add_water():
  86.     global LEVEL
  87.     pos = pygame.mouse.get_pos()
  88.     x = pos[0] // 16
  89.     y = pos[1] // 16
  90.     if LEVEL[y][x] == 0:
  91.         LEVEL[y][x] = [9, 255]
  92.     else:
  93.         LEVEL[y][x] = 0
  94.     doit()
  95.  
  96.  
  97. def balance(y0, x0, y1, x1):
  98.     global LEVEL
  99.     while LEVEL[y0][x0][1] != 255 and LEVEL[y1][x1][1]:
  100.         LEVEL[y0][x0][1] += 1
  101.         LEVEL[y1][x1][1] -= 1
  102.  
  103.  
  104. def balance_side(x, y):
  105.     global LEVEL
  106.     try:
  107.         pos1 = LEVEL[y][x + 1]
  108.     except Exception:
  109.         pos2 = LEVEL[y][x - 1]
  110.         if type(pos2) == list:
  111.             average = (LEVEL[y][x][1] + pos2[1]) // 2
  112.             LEVEL[y][x][1] = average
  113.             LEVEL[y][x - 1][1] = average
  114.         if pos2 == 0:
  115.             LEVEL[y - 1][x] = LEVEL[y][x]
  116.             LEVEL[y][x] = 0
  117.         return
  118.     else:
  119.         pos2 = LEVEL[y][x - 1]
  120.         if type(pos1) == list:
  121.             if type(pos2) == list:
  122.                 average = (LEVEL[y][x][1] + pos1[1] + pos2[1]) // 3
  123.                 LEVEL[y][x][1] = average
  124.                 LEVEL[y][x + 1][1] = average
  125.                 LEVEL[y][x - 1][1] = average
  126.                 print(average, "AVERAGE", 3)
  127.             else:
  128.                 average = (LEVEL[y][x][1] + pos1[1]) // 2
  129.                 LEVEL[y][x][1] = average
  130.                 LEVEL[y][x + 1][1] = average
  131.                 print(average, "AVERAGE", 2)
  132.         elif type(pos2) == list:
  133.             average = (LEVEL[y][x][1] + pos2[1]) // 2
  134.             LEVEL[y][x][1] = average
  135.             LEVEL[y][x - 1][1] = average
  136.             print(average, "AVERAGE", 2, 12)
  137.         else:
  138.             if not pos1:
  139.                 if not pos2:
  140.                     amount = LEVEL[y][x][1] // 3
  141.                     LEVEL[y][x] = [9, amount]
  142.                     LEVEL[y][x + 1] = [9, amount]
  143.                     LEVEL[y][x - 1] = [9, amount]
  144.                 else:
  145.                     amount = LEVEL[y][x][1] // 2
  146.                     LEVEL[y][x] = [9, amount]
  147.                     LEVEL[y][x + 1] = [9, amount]
  148.             elif not pos2:
  149.                 amount = LEVEL[y][x][1] // 2
  150.                 LEVEL[y][x] = [9, amount]
  151.                 LEVEL[y][x - 1] = [9, amount]
  152.  
  153.  
  154. clock = pygame.time.Clock()
  155. fps = debugscreen.FPSDisplay(clock)
  156. run = True
  157. while run:
  158.     for event in pygame.event.get():
  159.         if event.type == pygame.QUIT:
  160.             run = False
  161.             break
  162.         if event.type == pygame.MOUSEBUTTONDOWN:
  163.             add_water()
  164.  
  165.     for y, row in enumerate(LEVEL):
  166.         for x, tile in enumerate(row):
  167.             if type(tile) == list:
  168.                 #WATER SIMULATION
  169.                 try:
  170.                     pos = LEVEL[y + 1][x]
  171.                 except Exception as e:
  172.                     print(e)
  173.                 else:
  174.                     if type(pos) == list:
  175.                         if not LEVEL[y + 1][x][1] == 255:
  176.                             balance(y + 1, x, y, x)
  177.                     if not pos:
  178.                         LEVEL[y + 1][x] = tile
  179.                         LEVEL[y][x] = 0
  180.                     else:
  181.                         balance_side(x, y)
  182.             if tile:
  183.                 if type(tile) == list:
  184.                     surface1 = IMAGES[9]
  185.                     surface1.set_alpha(None)
  186.                     surface1.set_alpha(tile[1])
  187.                     levelsurface.blit(surface1, (x * 16, y * 16))
  188.                     continue
  189.                 else:
  190.                     levelsurface.blit(IMAGES[1], (x * 16, y * 16))
  191.             print(tile)
  192.             levelsurface.blit(IMAGES[tile], (x * 16, y * 16))
  193.  
  194.     screen.fill((0, 0, 0))
  195.  
  196.     screen.blit(levelsurface, (0, 0))
  197.  
  198.     fps.draw(screen=screen)
  199.     clock.tick(100)
  200.     pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment