56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
import numpy as np
|
|
import random
|
|
import noise
|
|
|
|
from block import *
|
|
|
|
class Map:
|
|
def __init__(self,blocks,size=[500,20],view=[0,0],view_size=[20,20]):
|
|
self.blocks=blocks
|
|
self.size=size
|
|
self.view=view
|
|
self.view_size=view_size
|
|
self.grid=[[None for i in range(self.size[0])] for j in range(self.size[1])]
|
|
self.randomGenerate()
|
|
|
|
def randomGenerate(self):
|
|
b=self.blocks
|
|
sx,sy=self.size
|
|
hights=[0 for i in range(self.size[0])]
|
|
|
|
for x in range(sx):
|
|
hights[x]=int(5.*noise.pnoise1(float(x)/20))+1
|
|
#print(hights[x])
|
|
for y in range(sy):
|
|
#print(hights[x])
|
|
z=hights[x]
|
|
if z<0 and y==1:
|
|
self.grid[y][x]=b["water"]
|
|
elif y<=z:
|
|
self.grid[y][x]=b["dirt"]
|
|
|
|
|
|
|
|
def generate(self):
|
|
hights=np.zeros(self.size[0])
|
|
|
|
def show(self,window):
|
|
wsx,wsy=window.size
|
|
vsx,vsy=self.view_size
|
|
vx,vy=self.view
|
|
for y in range(vsy):
|
|
for x in range(vsx):
|
|
gx=x+int(vy)
|
|
gy=y+int(vx)
|
|
if isinstance(self.grid[gy][gx],Block):
|
|
cx=vx+x*wsx/vsx
|
|
cy=vy+wsy-y*wsy/vsy
|
|
csx=wsx/vsx
|
|
csy=wsy/vsy
|
|
coordonnates=[cx,cy,csx,csy]
|
|
self.grid[gy][gx].show(window,coordonnates)
|
|
|
|
def update(self,game):
|
|
pass
|
|
#self.view=game.player.position[0]
|