Initial commit
This commit is contained in:
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
114
main.py
Normal file
114
main.py
Normal file
@ -0,0 +1,114 @@
|
||||
import sys
|
||||
import functools
|
||||
import random
|
||||
from noise import pnoise2
|
||||
from termcolor import colored
|
||||
|
||||
def addition(a, b):
|
||||
return a + b
|
||||
|
||||
seed = 0
|
||||
seed_codes = sys.argv[1].encode("utf-8")
|
||||
if seed_codes:
|
||||
seed = functools.reduce(addition, seed_codes)
|
||||
|
||||
scale = 25.0
|
||||
world_w, world_h = 16, 16
|
||||
|
||||
water_deepest = -0.3
|
||||
water_deep = -0.2
|
||||
water = -0.1
|
||||
grass = 0.3
|
||||
grass_high = 0.6
|
||||
mountains = 1
|
||||
block = "█"
|
||||
block = block + block
|
||||
|
||||
def generate_world(seed):
|
||||
try:
|
||||
print("Seed: " + str(seed))
|
||||
random.seed(seed)
|
||||
world = []
|
||||
for y in range(1, world_h + 1):
|
||||
row = []
|
||||
for x in range(1, world_w + 1):
|
||||
row_noise = pnoise2(
|
||||
x / scale,
|
||||
y / scale,
|
||||
octaves=10,
|
||||
persistence=0.5,
|
||||
lacunarity=2.0,
|
||||
base=seed
|
||||
)
|
||||
row.append(row_noise)
|
||||
world.append(row)
|
||||
return world
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def add_home(world):
|
||||
print("Choosing home location")
|
||||
home = (0, 0)
|
||||
|
||||
# build only on "grass"
|
||||
valid_locations = []
|
||||
for y in range(world_h):
|
||||
if y > 0 and y < world_h - 1:
|
||||
for x in range(world_w):
|
||||
if x > 0 and x < world_w - 1:
|
||||
cell = world[y][x]
|
||||
if cell > water and cell <= grass:
|
||||
valid_locations.append((x, y))
|
||||
|
||||
location = random.randrange(len(valid_locations))
|
||||
home = valid_locations[location]
|
||||
print(home)
|
||||
return home
|
||||
|
||||
def add_dock(world, home):
|
||||
print("Adding a dock")
|
||||
# find the closest bit of water to the house?
|
||||
# find the biggest body of water
|
||||
|
||||
|
||||
def percentage_of_land(world):
|
||||
total = world_w * world_h
|
||||
above_land = 0
|
||||
for y in range(world_h):
|
||||
for x in range(world_w):
|
||||
cell = world[y][x]
|
||||
if cell > water:
|
||||
above_land = above_land + 1
|
||||
return above_land / total
|
||||
|
||||
def print_map(world, home):
|
||||
for y in range(world_h):
|
||||
for x in range(world_w):
|
||||
cell = world[y][x]
|
||||
if home[0] == x and home[1] == y:
|
||||
print(colored(block, "magenta"), end="", flush=True)
|
||||
elif cell <= water_deepest:
|
||||
print(colored(block, "grey"), end="", flush=True)
|
||||
elif cell <= water_deep:
|
||||
print(colored(block, "blue", attrs=["dark"]), end="", flush=True)
|
||||
elif cell <= water:
|
||||
print(colored(block, "blue"), end="", flush=True)
|
||||
elif cell <= grass:
|
||||
print(colored(block, "green"), end="", flush=True)
|
||||
elif cell <= grass_high:
|
||||
print(colored(block, "green", attrs=["dark"]), end="", flush=True)
|
||||
else:
|
||||
print(colored(block, "white"), end="", flush=True)
|
||||
print("")
|
||||
|
||||
world = generate_world(seed)
|
||||
i = 1
|
||||
while (percentage_of_land(world) < 0.25 or 1 - percentage_of_land(world) < 0.25):
|
||||
world = generate_world(seed + i)
|
||||
i = i + 1
|
||||
|
||||
print(str(i - 1) + " seed iterations")
|
||||
|
||||
home = add_home(world)
|
||||
dock = add_dock(world, home)
|
||||
print_map(world, home)
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
noise==1.2.2
|
||||
termcolor==1.1.0
|
Reference in New Issue
Block a user