wip
This commit is contained in:
parent
eba8fd76fe
commit
f67570eed4
18 changed files with 1435 additions and 77 deletions
90
cave_survival/map.py
Normal file
90
cave_survival/map.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
from noise import snoise2
|
||||
import pydantic
|
||||
import pygame
|
||||
from rich.console import Console
|
||||
|
||||
console = Console()
|
||||
|
||||
# Generate the map using perlin noise
|
||||
|
||||
BLACK = (0, 0, 0)
|
||||
WHITE = (255, 255, 255)
|
||||
GREY = (128, 128, 128)
|
||||
RED = (255, 128, 128)
|
||||
|
||||
|
||||
class Point(pydantic.BaseModel):
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
class Map:
|
||||
def __init__(self):
|
||||
self.resolution = 32
|
||||
self.scale = 0.1 # Determines the "smoothness" of the terrain
|
||||
self.offset = Point(x=0, y=0)
|
||||
self.last_offset = self.offset
|
||||
# self.width = int(screen_width / self.resolution)
|
||||
# self.height = int(screen_height / self.resolution)
|
||||
self.screen_width = 800
|
||||
self.screen_height = 600
|
||||
self.octaves = 6 # Number of layers of noise to combine
|
||||
self.persistence = 0.5 # Amplitude of each octave
|
||||
self.lacunarity = 2.0 # Frequency of each octave
|
||||
self.thresh = 128
|
||||
self.surf = pygame.Surface(
|
||||
(self.screen_width / self.resolution, self.screen_height / self.resolution)
|
||||
)
|
||||
self.pre_draw()
|
||||
|
||||
# self.noise_map = self.generate_noise_map()
|
||||
|
||||
# def generate_noise_map(self):
|
||||
|
||||
# noise_map = [
|
||||
# [self.get_noise(x, y) for x in range(self.width)]
|
||||
# for y in range(self.height)
|
||||
# ]
|
||||
# return noise_map
|
||||
|
||||
def get_noise(self, x, y):
|
||||
value = snoise2(
|
||||
(x + self.offset.x) * self.scale,
|
||||
(y + self.offset.y) * self.scale,
|
||||
self.octaves,
|
||||
self.persistence,
|
||||
self.lacunarity,
|
||||
)
|
||||
value = (value + 1) / 2 * 255
|
||||
return value
|
||||
|
||||
def draw(self, screen):
|
||||
# if self.last_offset != self.offset:
|
||||
# self.last_offset = self.offset
|
||||
screen.blit(
|
||||
pygame.transform.scale(self.surf, (self.screen_width, self.screen_height)),
|
||||
(0, 0),
|
||||
)
|
||||
|
||||
def point_check_collision(self, x, y):
|
||||
return self.get_noise(x / self.resolution, y / self.resolution) < self.thresh
|
||||
|
||||
def pre_draw(self):
|
||||
console.log("drawing")
|
||||
self.surf = pygame.Surface((self.screen_width, self.screen_height))
|
||||
for x in range(self.screen_width):
|
||||
for y in range(self.screen_height):
|
||||
if not self.point_check_collision(x, y):
|
||||
pygame.draw.rect(
|
||||
self.surf,
|
||||
WHITE,
|
||||
(
|
||||
x,
|
||||
y,
|
||||
1,
|
||||
1,
|
||||
# self.resolution,
|
||||
# self.resolution,
|
||||
),
|
||||
)
|
||||
pygame.image.save(self.surf, "map.png")
|
||||
Loading…
Add table
Add a link
Reference in a new issue