Merge pull request 'Reprezentacja_wiedzy' (#1) from Reprezentacja_wiedzy into master

Reviewed-on: #1
This commit is contained in:
s481838 2024-03-26 00:23:07 +01:00
commit aa9519bc0f
18 changed files with 129 additions and 18 deletions

View File

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.10 (Traktor)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Traktor)" project-jdk-type="Python SDK" />
</project>

Binary file not shown.

Binary file not shown.

View File

@ -3,7 +3,7 @@ import pygame
WIDTH, HEIGHT = 1000, 1000
FIELD_WIDTH, FIELD_HEIGHT = 660, 330
ROWS, COLS = 10, 5
ROWS, COLS = 20, 20
# number of tiles in a row and column
TILE_SIZE = FIELD_WIDTH//ROWS
PLANT = ""

View File

@ -21,10 +21,9 @@ def positionFieldElements():
tractor.y += fieldY
def createTiles():
for y in range (0,COLS):
for x in range (0,ROWS):
for y in range(0, COLS):
for x in range(0, ROWS):
tile = Tile(x*TILE_SIZE, y*TILE_SIZE)
tile.randomize_photo()
tile.randomizeContent()
tiles.append(tile)
positionFieldElements()

View File

@ -1,9 +1,60 @@
from crop_protection_product import CropProtectionProduct
class Tractor:
x = None
y = None
image = None
cypermetryna = CropProtectionProduct("pests", "cereal")
diflufenikan = CropProtectionProduct("weeds", "cereal")
spirotetramat = CropProtectionProduct("pests", "fruit")
oksadiargyl = CropProtectionProduct("weeds", "fruit")
spinosad = CropProtectionProduct("pests", "vegetable")
metazachlor = CropProtectionProduct("weeds", "vegetable")
# etc
def __init__(self,x,y):
def __init__(self, x, y):
self.x = x
self.y = y
self.image = 'resources/images/tractor.png'
def work_on_field(self, tile, ground, plant1):
if plant1 is None:
tile.randomizeContent()
# sprobuj zasadzic cos
print("Tarctor planted something")
elif plant1.growth_level == 100:
tile.plant = None
ground.nutrients_level -= 40
ground.water_level -= 40
print("Tractor collected something")
else:
plant1.try_to_grow(50,50) #mozna dostosowac jeszcze
ground.nutrients_level -= 11
ground.water_level -= 11
if ground.pest:
# traktor pozbywa sie szkodnikow
if plant1.plant_type == self.cypermetryna.plant_type:
t = "Tractor used Cypermetryna"
elif plant1.plant_type == self.spirotetramat.plant_type:
t = "Tractor used Spirotetramat"
elif plant1.plant_type == self.spinosad.plant_type:
t = "Tractor used Spinosad"
print(t)
ground.pest = False
if ground.weed:
# traktor pozbywa się chwastow
if plant1.plant_type == self.diflufenikan.plant_type:
t = "Tractor used Diflufenikan"
elif plant1.plant_type == self.oksadiargyl.plant_type:
t = "Tractor used Oksadiargyl"
elif plant1.plant_type == self.metazachlor.plant_type:
t = "Tractor used Metazachlor"
print(t)
ground.weed = False
if ground.water_level < plant1.water_requirements:
ground.water_level += 20
print("Tractor watered the plant")
if ground.nutrients_level < plant1.nutrients_requirements:
ground.nutrients_level += 20
print("Tractor added some nutrients")

View File

@ -0,0 +1,4 @@
class CropProtectionProduct:
def __init__(self, strong_against, plant_type):
self.strong_against = strong_against # pestycyd, herbicyd
self.plant_type = plant_type

View File

@ -1,6 +1,26 @@
import random
class Dirt:
state = None
def __init__(self, water_level, nutrients_level):
self.water_level = water_level
self.nutrients_level = nutrients_level
self.pest = False
self.weed = False
self.obstacle = False
self.pests_and_weeds()
# add a couple new properties
# add init, getters,setters
def pests_and_weeds(self):
i = random.randint(1, 20) # 5% szans na szkodniki, 10% na chwasty, 5 na obydwa 15 na kamien
if i == 1:
self.pest = True
elif i == 2 or i == 3:
self.weed = True
elif i == 4:
self.weed = True
self.pest = True
elif i == 5 or i == 6 or i == 7:
self.obstacle = True
# add init, getters,setters

View File

@ -1,7 +1,13 @@
import pygame
import time
import random
from area.constants import WIDTH, HEIGHT
from area.field import drawWindow
from area.tractor import Tractor
from area.field import tiles
from ground import Dirt
from plant import Plant
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Intelligent tractor')
@ -15,6 +21,19 @@ def main():
if event.type == pygame.QUIT:
run = False
#small test:
time.sleep(2)
tile1 = tiles[0]
p1 = Plant('wheat', 'cereal', random.randint(1,100), random.randint(1,100), random.randint(1,100))
d1 = Dirt(random.randint(1, 100), random.randint(1,100))
d1.pests_and_weeds()
tile1.ground=d1
t1 = Tractor(10, 10)
t1.work_on_field(tile1, d1, p1)
time.sleep(3)
print("\n")
# in loop move tractor
main()

View File

@ -1,8 +1,25 @@
import random
class Plant:
name = None
def __init__(self, name, plant_type, water_requirements, nutrients_requirements, growth_level):
self.name = name
self.plant_type = plant_type
self.water_requirements = water_requirements
self.nutrients_requirements = nutrients_requirements
self.growth_level = growth_level
def try_to_grow(self, water, nutrients):
if (water >= self.water_requirements) and (nutrients >= self.nutrients_requirements):
i = random.randint(5, 12)
if self.growth_level+i > 100:
i = 100 - self.growth_level
self.growth_level += i
print("The plant is growing")
else:
print("Unable to grow due to bad condition of the ground")
# more properties
# add init, getters,setters

View File

@ -1,7 +1,7 @@
import random
import os
#path to plant images folder (used in randomize_photo function)
# path to plant images folder (used in randomize_photo function)
folder_path = "resources\images\plant_photos"
@ -26,7 +26,7 @@ class Tile:
# called on a created tile
#choose random photo from the folder:
# choose random photo from the folder:
def randomize_photo(self):
random_photo = random.choice(os.listdir(folder_path))
@ -35,14 +35,13 @@ class Tile:
def randomizeContent(self):
photo_path = self.randomize_photo()
i = random.randint(1, 3) #szansa 1/3
i = random.randint(1, 3) # szansa 1/3
if i == 1:
self.image = "resources/images/sampling.png"
self.photo = photo_path
#self.photo losuje dodatkowo zdjecie jakies rosliny do danego rzędu
# self.photo losuje dodatkowo zdjecie jakies rosliny do danego rzędu
else:
self.image = "resources/images/dirt.png"
self.photo = "resources/images/background.jpg"
# DISCLAMER check column and choose plant type ("potato","wheat" etc)
# DISCLAMER check column and choose plant type ("potato","wheat" etc.)