2022-04-17 18:43:08 +08:00

83 lines
3.6 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
import pygame as pg
from .. import tool
from .. import constants as c
class Map():
def __init__(self, background_type):
self.background_type = background_type
if self.background_type in {c.BACKGROUND_POOL, c.BACKGROUND_FOG}:
self.width = c.GRID_POOL_X_LEN
self.height = c.GRID_POOL_Y_LEN
elif self.background_type in {c.BACKGROUND_ROOF, c.BACKGROUND_ROOFNIGHT}:
self.width = c.GRID_ROOF_X_LEN
self.height = c.GRID_ROOF_Y_LEN
else:
self.width = c.GRID_X_LEN
self.height = c.GRID_Y_LEN
# 要把记录信息改成元组的话这里又得改
# 而且不同场地还不一样
self.map = [[c.MAP_STATE_EMPTY for x in range(self.width)] for y in range(self.height)]
def isValid(self, map_x, map_y):
if (map_x < 0 or map_x >= self.width or
map_y < 0 or map_y >= self.height):
return False
return True
# 判断能否种植
def isMovable(self, map_x, map_y):
# 目前没有南瓜头,所以用是否为空判断
# 可将南瓜头新定义一个状态2基于此进一步判断
# 应当改成元组,保存南瓜头、花盆、睡莲等状态(字典也可,还更方便)
# 当然,不用元组的话字符串也行,但是得把判断植物写在母函数中,并且需要更多参数
# 这样返回的就是一个具体信息而非bool值了
# 到时候还要改一下变量名还叫isMovable不合适
return (self.map[map_y][map_x] == c.MAP_STATE_EMPTY)
def getMapIndex(self, x, y):
# 引入新地图后需要增加这里的内容
if self.background_type in {c.BACKGROUND_POOL, c.BACKGROUND_FOG}:
x -= c.MAP_POOL_OFFSET_X
y -= c.MAP_POOL_OFFSET_Y
return (x // c.GIRD_POOL_X_SIZE, y // c.GRID_POOL_Y_SIZE)
elif self.background_type in {c.BACKGROUND_ROOF, c.BACKGROUND_ROOFNIGHT}:
x -= c.MAP_ROOF_OFFSET_X
y -= c.MAP_ROOF_OFFSET_X
girdX = x // c.GRID_ROOF_X_SIZE
if girdX >= 5:
gridY = y // c.GRID_ROOF_Y_SIZE
else:
gridY = (y - 20*(6 - girdX)) // 85
return (girdX, gridY)
else:
x -= c.MAP_OFFSET_X
y -= c.MAP_OFFSET_Y
return (x // c.GRID_X_SIZE, y // c.GRID_Y_SIZE)
def getMapGridPos(self, map_x, map_y):
if self.background_type in {c.BACKGROUND_POOL, c.BACKGROUND_FOG}:
return (map_x * c.GRID_ROOF_X_SIZE + c.GRID_X_SIZE//2 + c.MAP_ROOF_OFFSET_X,
map_y * c.GRID_ROOF_Y_SIZE + c.GRID_Y_SIZE//5 * 3 + c.MAP_ROOF_OFFSET_Y)
elif self.background_type in {c.BACKGROUND_ROOF, c.BACKGROUND_ROOFNIGHT}:
return (map_x * c.GRID_POOL_X_SIZE + c.GRID_X_SIZE//2 + c.MAP_POOL_OFFSET_X,
map_y * c.GRID_POOL_Y_SIZE + 20 * max(0, (6 - map_y)) + c.GRID_Y_SIZE//5 * 3 + c.MAP_POOL_OFFSET_Y)
else:
return (map_x * c.GRID_X_SIZE + c.GRID_X_SIZE//2 + c.MAP_OFFSET_X,
map_y * c.GRID_Y_SIZE + c.GRID_Y_SIZE//5 * 3 + c.MAP_OFFSET_Y)
def setMapGridType(self, map_x, map_y, type):
self.map[map_y][map_x] = type
def getRandomMapIndex(self):
map_x = random.randint(0, self.width-1)
map_y = random.randint(0, self.height-1)
return (map_x, map_y)
def showPlant(self, x, y):
pos = None
map_x, map_y = self.getMapIndex(x, y)
if self.isValid(map_x, map_y) and self.isMovable(map_x, map_y):
pos = self.getMapGridPos(map_x, map_y)
return pos