Traktor/board.py

122 lines
5.3 KiB
Python
Raw Normal View History

2024-03-10 02:46:14 +01:00
import pygame
from constant import size, rows, cols
2024-03-24 19:28:14 +01:00
import random
2024-06-08 19:46:06 +02:00
import numpy as np
2024-03-10 02:46:14 +01:00
class Board:
2024-06-08 19:46:06 +02:00
def __init__(self,load_from_file=False, filename='generated_board.npy'):
2024-03-10 02:46:14 +01:00
self.board = []
2024-05-18 22:51:09 +02:00
self.vegetables = []
self.soil_features = None
2024-05-26 05:12:46 +02:00
self.vegetable_names = []
2024-06-08 19:46:06 +02:00
self.load_images()
if load_from_file:
self.load_board_from_file(filename)
2024-03-10 02:46:14 +01:00
def load_images(self):
2024-03-24 19:28:14 +01:00
self.grass = pygame.image.load("board/grass.png")
self.dirt = pygame.image.load("board/dirt.png")
2024-05-18 17:10:56 +02:00
self.rock = pygame.image.load("board/rock.png")
self.weeds = pygame.image.load("board/weeds.png")
2024-03-24 20:54:05 +01:00
self.soil = pygame.image.load("board/zyzna.png")
2024-03-24 19:28:14 +01:00
2024-05-18 22:51:09 +02:00
self.warzywa_images = {
2024-06-08 19:46:06 +02:00
"marchewka": [pygame.image.load(f"warzywa/Carrot/{i}.jpg") for i in range(1, 10)],
"ziemniak": [pygame.image.load(f"warzywa/Potato/{i}.jpg") for i in range(1, 10)],
2024-05-26 05:12:46 +02:00
"pomidor": [pygame.image.load(f"warzywa/tomato/{i}.jpg") for i in range(1, 10)],
"fasola": [pygame.image.load(f"warzywa/Bean/{i}.jpg") for i in range(1, 10)],
"dynia": [pygame.image.load(f"warzywa/Pumpkin/{i}.jpg") for i in range(1, 10)],
"rzodkiewka": [pygame.image.load(f"warzywa/Radish/{i}.jpg") for i in range(1, 10)],
"ogorek": [pygame.image.load(f"warzywa/Cucumber/{i}.jpg") for i in range(1, 10)],
"kalafior": [pygame.image.load(f"warzywa/Cauliflower/{i}.jpg") for i in range(1, 10)],
"kapusta": [pygame.image.load(f"warzywa/Cabbage/{i}.jpg") for i in range(1, 10)],
"brokul": [pygame.image.load(f"warzywa/Broccoli/{i}.jpg") for i in range(1, 10)]
2024-05-18 22:51:09 +02:00
}
self.vegetable_types = {
2024-06-08 19:46:06 +02:00
"marchewka": 2,
"ziemniak": 3,
"pomidor": 4,
"fasola": 5,
"dynia": 6,
"rzodkiewka": 7,
"ogorek": 8,
"kalafior": 9,
"kapusta": 10,
"brokul": 11
2024-05-18 22:51:09 +02:00
}
2024-06-08 19:46:06 +02:00
def load_board_from_file(self, filename):
self.board = np.load(filename)
self.vegetables = [[None for _ in range(cols)] for _ in range(rows)]
self.vegetable_names = [[None for _ in range(cols)] for _ in range(rows)]
2024-05-26 05:12:46 +02:00
for row in range(rows):
for col in range(cols):
2024-06-08 19:46:06 +02:00
if self.board[row][col] in self.vegetable_types.values():
vegetable_type = list(self.warzywa_images.keys())[self.board[row][col] - 2]
2024-05-26 05:12:46 +02:00
vegetable_image = random.choice(self.warzywa_images[vegetable_type])
self.vegetables[row][col] = vegetable_image
self.vegetable_names[row][col] = vegetable_type
2024-05-18 22:51:09 +02:00
self.soil_features = self.generate_soil_features()
print(f"Shared soil features: {self.soil_features}")
2024-06-09 19:56:01 +02:00
def count_vegetable_type(self, vegetable_type):
# Funkcja zliczająca ilość pól z określonym typem warzywa
count = 0
for row in range(rows):
for col in range(cols):
if self.vegetable_names[row][col] == vegetable_type:
count += 1
return count
2024-05-18 22:51:09 +02:00
def generate_soil_features(self):
return {
"wilgotnosc_gleby": random.randint(30, 70),
"temperatura_gleby": random.randint(13, 26),
"opady_deszczu": random.randint(0, 11),
"wiek_rosliny": random.randint(1, 9),
"proc_ekspo_na_swiatlo": random.randint(10, 90),
"pora_dnia": random.randint(8, 20),
"pora_roku": random.randint(1, 4)
}
2024-03-10 02:46:14 +01:00
def draw_cubes(self, win):
for row in range(rows):
for col in range(cols):
2024-05-18 17:10:56 +02:00
cube_rect = pygame.Rect(col * size, row * size, size, size)
cube = self.board[row][col]
2024-06-08 19:46:06 +02:00
if cube == 0:
2024-03-10 02:46:14 +01:00
win.blit(self.grass, cube_rect)
2024-06-08 19:46:06 +02:00
elif cube == 1:
2024-03-24 19:28:14 +01:00
rock_scale = pygame.transform.scale(self.rock, (size, size))
2024-03-10 02:46:14 +01:00
win.blit(self.dirt, cube_rect)
2024-05-18 17:10:56 +02:00
win.blit(rock_scale, cube_rect)
2024-06-08 19:46:06 +02:00
elif cube == 12:
2024-03-24 20:54:05 +01:00
win.blit(self.soil, cube_rect)
2024-05-18 22:51:09 +02:00
if self.vegetables[row][col]:
2024-05-26 05:12:46 +02:00
vegetable_image = pygame.transform.scale(self.vegetables[row][col], (size, size))
2024-05-18 22:51:09 +02:00
win.blit(vegetable_image, cube_rect)
2024-06-08 19:46:06 +02:00
elif cube == 13:
2024-05-18 22:51:09 +02:00
win.blit(self.dirt, cube_rect)
if self.vegetables[row][col]:
2024-05-26 05:12:46 +02:00
vegetable_image = pygame.transform.scale(self.vegetables[row][col], (size, size))
2024-05-18 22:51:09 +02:00
win.blit(vegetable_image, cube_rect)
2024-03-24 19:28:14 +01:00
else:
2024-05-18 17:10:56 +02:00
win.blit(self.dirt, cube_rect)
2024-05-18 22:51:09 +02:00
if self.vegetables[row][col]:
2024-05-26 05:12:46 +02:00
vegetable_image = pygame.transform.scale(self.vegetables[row][col], (size, size))
2024-05-18 22:51:09 +02:00
win.blit(vegetable_image, cube_rect)
2024-03-10 02:46:14 +01:00
2024-03-24 19:49:08 +01:00
def is_rock(self, row, col):
return self.board[row][col] == 1
2024-03-24 20:54:05 +01:00
2024-05-18 17:10:56 +02:00
def is_dirt(self, row, col):
2024-06-08 19:46:06 +02:00
return self.board[row][col] in (2,3,4,5,6,7,8,9,10,11)
2024-03-24 20:54:05 +01:00
def set_soil(self, row, col):
2024-06-08 19:46:06 +02:00
self.board[row][col] = 12
2024-05-18 22:51:09 +02:00
self.vegetables[row][col] = self.vegetables[row][col]
2024-05-26 05:12:46 +02:00
def set_fakedirt(self, row, col):
2024-06-08 19:46:06 +02:00
self.board[row][col] = 13
2024-06-06 23:15:26 +02:00