129 lines
4.1 KiB
Python
129 lines
4.1 KiB
Python
from mycolors import BLACK,WHITE,BLUE,RED
|
|
from mycamera import Camera
|
|
|
|
import random
|
|
import pygame
|
|
|
|
class Map:
|
|
def __init__(self,size):
|
|
self.size=size
|
|
self.colors=[BLACK,WHITE]
|
|
self.camera=Camera(position=[0,0],size=[30,20],borders=[0,0]+self.size)
|
|
self.generate()
|
|
|
|
|
|
def generate(self):
|
|
sx,sy=self.size
|
|
self.grid=[[0 for x in range(sx)] for x in range(sy)]
|
|
for x in range(sx):
|
|
self.grid[0][x]=1
|
|
for y in range(sy):
|
|
for x in range(sx):
|
|
if random.randint(0,9)==0:
|
|
self.grid[y][x]=1
|
|
|
|
def update(self):
|
|
pass
|
|
|
|
def showAll(self,position,size,window):
|
|
psx,psy=size
|
|
px,py=position
|
|
vision=self.camera([px-psx/2,py-psy/2],window)
|
|
window.print(text="Camera's vision: "+str(vision),position=[10,90])
|
|
#print("self.camera.position:",self.camera.position)
|
|
#print("self.camera.direction:",self.camera.direction)
|
|
vx,vy,vsx,vsy=vision
|
|
px,py=position
|
|
wsx,wsy=window.size
|
|
sx,sy=self.size
|
|
|
|
#Draw Map
|
|
for y in range(sy):
|
|
for x in range(sx):
|
|
if self.grid[y][x]==1:
|
|
_x=x
|
|
_y=(sy-1)-y
|
|
coordonnates=[_x*wsx/sx,_y*wsy/sy,wsx/sx,wsy/sy]
|
|
pygame.draw.rect(window.screen,WHITE,coordonnates,0)
|
|
|
|
#Draw Player
|
|
_y=(sy-1)-py
|
|
_x=px
|
|
coordonnates=[_x*wsx/sx,_y*wsy/sy,wsx/sx,wsy/sy]
|
|
pygame.draw.rect(window.screen,BLUE,coordonnates,0)
|
|
coordonnates=[_x*wsx/sx,(_y-1)*wsy/sy,wsx/sx,wsy/sy]
|
|
pygame.draw.rect(window.screen,BLUE,coordonnates,0)
|
|
#Draw Camera
|
|
_y=(sy-1)-(vy+vsy) #sy map size, vy vision, vsy vision size
|
|
_x=vx
|
|
coordonnates=[_x*wsx/sx,_y*wsy/sy,vsx*wsx/sx,vsy*wsy/sy]
|
|
pygame.draw.rect(window.screen,RED,coordonnates,1)
|
|
|
|
|
|
def show(self,position,size,window):
|
|
psx,psy=size
|
|
px,py=position
|
|
vision=self.camera([px-psx/2,py-psy/2],window) #takes position to return coordonnates
|
|
window.print(text="Camera's vision: "+str(vision),position=[10,50])
|
|
#print("self.camera.position:",self.camera.position)
|
|
#print("self.camera.direction:",self.camera.direction)
|
|
self.displayMap(vision,window)
|
|
self.displayPlayer(position,vision,window)
|
|
|
|
def displayMap(self,vision,window):
|
|
wsx,wsy=window.size
|
|
vx,vy,vsx,vsy=vision
|
|
vmx,vmy=int(vsx)+1,int(vsy)+1
|
|
sx,sy=self.size
|
|
for y in range(vmy):
|
|
for x in range(vmx):
|
|
_x=(vsx-1)-x
|
|
_y=(vsy-1)-y
|
|
gx=x+int(vx)
|
|
gy=y+int(vy)
|
|
dx=int(vx)-vx
|
|
dy=int(vy)-vy
|
|
#_y=(sy-1)-(vy+vsy) #sy map size, vy vision, vsy vision size
|
|
#_x=vx
|
|
coordonnates=[(dx+x)*wsx/vsx,wsy-(dy+y)*wsy/vsy,wsx/vsx,wsy/vsy]
|
|
if self.grid[gy][gx]==1:
|
|
#print(coordonnates)
|
|
pygame.draw.rect(window.screen,WHITE,coordonnates,0)
|
|
|
|
def displayPlayer(self,position,vision,window):
|
|
wsx,wsy=window.size
|
|
sx,sy=self.size
|
|
x,y=position
|
|
vx,vy,vsx,vsy=vision
|
|
#_x=(sx-1)-x
|
|
#_y=(sy-1)-y
|
|
_x=x-vx
|
|
_y=y-vy
|
|
coordonnates=[_x*wsx/vsx,wsy-_y*wsy/vsy,wsx/vsx,wsy/vsy]
|
|
pygame.draw.rect(window.screen,BLUE,coordonnates,0)
|
|
coordonnates=[_x*wsx/vsx,wsy-(_y+1)*wsy/vsy,wsx/vsx,wsy/vsy]
|
|
pygame.draw.rect(window.screen,BLUE,coordonnates,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def old_show(self,vision,window):
|
|
wsx,wsy=window.size
|
|
px,py,vx,vy=vision
|
|
for y in range(vy):
|
|
for x in range(vx):
|
|
X,Y=int(x+px),int(y+py)
|
|
size=[wsx/vx,wsy/vy]
|
|
print(vx,vy)
|
|
print(x,y)
|
|
print(vx-x-1,vy-y-1)
|
|
position=[(vx-x-1)*wsx/vx,(vy-y-1)*wsy/vy]
|
|
coordonnates=position+size
|
|
print(X,Y)
|
|
print("")
|
|
color=self.colors[self.grid[Y][X]]
|
|
pygame.draw.rect(window.screen,color,coordonnates,0)
|