igendel icon

Skyline

igendel | PRO | 06/03/21 12:04:50 PM UTC (Edited) | 0 ⭐ | 413 👁️ | Never ⏰ | []
Python |

1.31 KB

|

None

|

0 👍

/

0 👎

import random
 
screen_lines = 30
screen_columns = 100
 
# Building-row parameters
# Each row has: Graphic chars, building width,
#               min height, max height, height list (that will be filled later)
params = [["#H", 8, 4, 20, []],
          ["I/", 4, 6, 24, []]]
star_prob = 0
 
 
# Create the building height lists 
def prepare():
    for p in params:
        total_width = 0
        lst = []
        while total_width < screen_columns:
            lst = lst + [random.randint(p[2], p[3])]
            total_width = total_width + p[1]
        p[4] = lst
 
 
# Check which building is seen in a specific coordinate
def get_char(curr_x, curr_y):
    for p in params:
        b_index = curr_x // p[1]
        if curr_y <= p[4][b_index]:
            return p[0][b_index % 2]
    if random.random() < star_prob:
        return random.choice(["*", "."])
    else:
        return " "
 
 
while True:
    print("_" * screen_columns)
    seed = input("Random seed [empty to quit] = ")
    if seed == "":
        break
    
    random.seed(seed)
    prepare()
    star_prob = random.random() / 15
    
    y = screen_lines
    while y > 0:
        x = 0
        s = ""
        while x < screen_columns:
            s = s + get_char(x, y)
            x = x + 1
        print(s)
        y = y - 1

Comments