Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import pygame
- pygame.init()
- import sheet
- import generator
- import debugscreen
- ALPHA = (255, 0, 255)
- screen = pygame.display.set_mode((0, 0), pygame.RESIZABLE)
- SHEET = sheet.SpriteSheet("img/terrariatiles.png")
- IMAGES = SHEET.images(tilesize=16, colorkey=ALPHA)
- WORLD = generator.TerrariaGenerator(size=(160, 60))
- WORLD.generate()
- LEVEL = WORLD.level
- levelsurface = pygame.Surface((1900, 900))
- def doit():
- global level
- for y, row in enumerate(LEVEL):
- for x, tile in enumerate(row):
- if tile:
- try:
- air = row[x + 1]
- except Exception:
- pass
- else:
- if not air:
- if not LEVEL[y - 1][x]:
- tile = 3
- else:
- tile = 6
- air = row[x - 1]
- if not air:
- if not LEVEL[y - 1][x]:
- if tile == 3:
- tile = 5
- else:
- tile = 4
- else:
- if tile == 6:
- tile = 8
- else:
- tile = 7
- LEVEL[y][x] = tile
- for y, row in enumerate(LEVEL):
- for x, tile in enumerate(row):
- if LEVEL[y - 1][x] in (6, 3, 14):
- try:
- pos = LEVEL[y][x + 1]
- except Exception as e:
- print(e)
- else:
- if pos in (2, 3):
- LEVEL[y][x] = 11
- if LEVEL[y - 1][x] in (7, 4, 15):
- pos = LEVEL[y][x - 1]
- if pos in (2, 4):
- LEVEL[y][x] = 12
- if LEVEL[y - 1][x] in (5, 8):
- if LEVEL[y][x] == 1:
- LEVEL[y][x] = 13
- if LEVEL[y][x] == 6:
- if LEVEL[y][x - 1] in (2, 4):
- LEVEL[y][x] = 14
- if LEVEL[y][x] == 7:
- try:
- tile = LEVEL[y][x + 1]
- except Exception as e:
- print(e)
- if tile in (2, 3):
- LEVEL[y][x] = 15
- for y, row in enumerate(LEVEL):
- for x, tile in enumerate(row):
- if tile:
- levelsurface.blit(IMAGES[1], (x * 16, y * 16))
- levelsurface.blit(IMAGES[tile], (x * 16, y * 16))
- def add_water():
- global LEVEL
- pos = pygame.mouse.get_pos()
- x = pos[0] // 16
- y = pos[1] // 16
- if LEVEL[y][x] == 0:
- LEVEL[y][x] = [9, 255]
- else:
- LEVEL[y][x] = 0
- doit()
- def balance(y0, x0, y1, x1):
- global LEVEL
- while LEVEL[y0][x0][1] != 255 and LEVEL[y1][x1][1]:
- LEVEL[y0][x0][1] += 1
- LEVEL[y1][x1][1] -= 1
- def balance_side(x, y):
- global LEVEL
- try:
- pos1 = LEVEL[y][x + 1]
- except Exception:
- pos2 = LEVEL[y][x - 1]
- if type(pos2) == list:
- average = (LEVEL[y][x][1] + pos2[1]) // 2
- LEVEL[y][x][1] = average
- LEVEL[y][x - 1][1] = average
- if pos2 == 0:
- LEVEL[y - 1][x] = LEVEL[y][x]
- LEVEL[y][x] = 0
- return
- else:
- pos2 = LEVEL[y][x - 1]
- if type(pos1) == list:
- if type(pos2) == list:
- average = (LEVEL[y][x][1] + pos1[1] + pos2[1]) // 3
- LEVEL[y][x][1] = average
- LEVEL[y][x + 1][1] = average
- LEVEL[y][x - 1][1] = average
- print(average, "AVERAGE", 3)
- else:
- average = (LEVEL[y][x][1] + pos1[1]) // 2
- LEVEL[y][x][1] = average
- LEVEL[y][x + 1][1] = average
- print(average, "AVERAGE", 2)
- elif type(pos2) == list:
- average = (LEVEL[y][x][1] + pos2[1]) // 2
- LEVEL[y][x][1] = average
- LEVEL[y][x - 1][1] = average
- print(average, "AVERAGE", 2, 12)
- else:
- if not pos1:
- if not pos2:
- amount = LEVEL[y][x][1] // 3
- LEVEL[y][x] = [9, amount]
- LEVEL[y][x + 1] = [9, amount]
- LEVEL[y][x - 1] = [9, amount]
- else:
- amount = LEVEL[y][x][1] // 2
- LEVEL[y][x] = [9, amount]
- LEVEL[y][x + 1] = [9, amount]
- elif not pos2:
- amount = LEVEL[y][x][1] // 2
- LEVEL[y][x] = [9, amount]
- LEVEL[y][x - 1] = [9, amount]
- clock = pygame.time.Clock()
- fps = debugscreen.FPSDisplay(clock)
- run = True
- while run:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- run = False
- break
- if event.type == pygame.MOUSEBUTTONDOWN:
- add_water()
- for y, row in enumerate(LEVEL):
- for x, tile in enumerate(row):
- if type(tile) == list:
- #WATER SIMULATION
- try:
- pos = LEVEL[y + 1][x]
- except Exception as e:
- print(e)
- else:
- if type(pos) == list:
- if not LEVEL[y + 1][x][1] == 255:
- balance(y + 1, x, y, x)
- if not pos:
- LEVEL[y + 1][x] = tile
- LEVEL[y][x] = 0
- else:
- balance_side(x, y)
- if tile:
- if type(tile) == list:
- surface1 = IMAGES[9]
- surface1.set_alpha(None)
- surface1.set_alpha(tile[1])
- levelsurface.blit(surface1, (x * 16, y * 16))
- continue
- else:
- levelsurface.blit(IMAGES[1], (x * 16, y * 16))
- print(tile)
- levelsurface.blit(IMAGES[tile], (x * 16, y * 16))
- screen.fill((0, 0, 0))
- screen.blit(levelsurface, (0, 0))
- fps.draw(screen=screen)
- clock.tick(100)
- pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment