Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom.

This commit is contained in:
Dominik Jagosz 2022-03-21 19:41:34 +01:00
parent 9ca4f821e1
commit e8aa87ff54
5 changed files with 23 additions and 59 deletions

View File

@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </content>
<orderEntry type="jdk" jdkName="Python 3.9 (sztucznosc)" jdkType="Python SDK" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>

View File

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

View File

@ -1,6 +1,7 @@
import random import random
import pygame import pygame
from enumy import *
from stale import * from stale import *
@ -8,6 +9,7 @@ from stale import *
class Agent1: class Agent1:
bok = BOK_AGENTA1 bok = BOK_AGENTA1
bok_w_polach = BOK_AGENTA1_W_POLACH bok_w_polach = BOK_AGENTA1_W_POLACH
Agenci = []
def __init__(self, pole_lewe_gorne, tekstura, kierunek, droga): def __init__(self, pole_lewe_gorne, tekstura, kierunek, droga):
self.pole_lewe_gorne = pole_lewe_gorne self.pole_lewe_gorne = pole_lewe_gorne
@ -15,6 +17,7 @@ class Agent1:
self.tekstura = tekstura self.tekstura = tekstura
self.kierunek = kierunek self.kierunek = kierunek
self.droga = droga self.droga = droga
Agent1.Agenci.append(self)
def obierzNowyKierunek(self): def obierzNowyKierunek(self):
self.kierunek = KIERUNEK(random.randint(0, 3)) self.kierunek = KIERUNEK(random.randint(0, 3))
@ -59,13 +62,13 @@ class Agent1:
else: else:
self.droga = 0 self.droga = 0
def czyWszedlesWInnegoAgenta(self, Agenci): def czyWszedlesWInnegoAgenta(self):
for a in Agenci: for a in self.Agenci:
if a.hitbox.colliderect(self.hitbox) and a != self: if a.hitbox.colliderect(self.hitbox) and a != self:
return True return True
return False return False
def ruszSie(self, Agenci): def ruszSie(self):
if self.kierunek == KIERUNEK.GORA: if self.kierunek == KIERUNEK.GORA:
self.idzWGore() self.idzWGore()
elif self.kierunek == KIERUNEK.DOL: elif self.kierunek == KIERUNEK.DOL:
@ -74,7 +77,7 @@ class Agent1:
self.idzWLewo() self.idzWLewo()
elif self.kierunek == KIERUNEK.PRAWO: elif self.kierunek == KIERUNEK.PRAWO:
self.idzWPrawo() self.idzWPrawo()
if self.czyWszedlesWInnegoAgenta(Agenci): if self.czyWszedlesWInnegoAgenta():
self.cofnijSie() self.cofnijSie()
self.zawroc() self.zawroc()
self.okreslDlugoscDrogi() self.okreslDlugoscDrogi()
@ -103,4 +106,4 @@ class Agent1:
def zaznacz_zajmowane_pola_na_kracie(self, Krata): def zaznacz_zajmowane_pola_na_kracie(self, Krata):
for wiersz in range(self.pole_lewe_gorne.wiersz, self.pole_lewe_gorne.wiersz + self.bok_w_polach): for wiersz in range(self.pole_lewe_gorne.wiersz, self.pole_lewe_gorne.wiersz + self.bok_w_polach):
for kolumna in range(self.pole_lewe_gorne.kolumna, self.pole_lewe_gorne.kolumna + self.bok_w_polach): for kolumna in range(self.pole_lewe_gorne.kolumna, self.pole_lewe_gorne.kolumna + self.bok_w_polach):
Krata[wiersz][kolumna] = POLE.AGENT Krata.krata[wiersz][kolumna] = POLE.AGENT

38
main.py
View File

@ -1,30 +1,16 @@
import os import os
from klasy import *
from agenci import * from agenci import *
from stale import *
OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pygame.display.set_caption("Okno1") pygame.display.set_caption("Okno1")
Agenci1 = [] Krata = Krata(OKNO)
Krata = []
for rzad in range(LICZBA_POL_W_PIONIE):
Krata.append([])
for kolumna in range(LICZBA_POL_W_POZIOMIE):
Krata[rzad].append(POLE.PUSTE)
def wyswietl_krate():
OKNO.fill(SZARY1)
for rzad in range(LICZBA_POL_W_PIONIE):
for kolumna in range(LICZBA_POL_W_POZIOMIE):
pygame.draw.rect(OKNO, BIALY, [(ODSTEP_MIEDZY_POLAMI + BOK_POLA) * kolumna + ODSTEP_MIEDZY_POLAMI,
(ODSTEP_MIEDZY_POLAMI + BOK_POLA) * rzad + ODSTEP_MIEDZY_POLAMI,
BOK_POLA, BOK_POLA])
def wyswietl_agentow(): def wyswietl_agentow():
for a in Agenci1: for a in Agent1.Agenci:
OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y)) OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y))
if a.droga == 0: if a.droga == 0:
a.obierzNowyKierunek() a.obierzNowyKierunek()
@ -37,7 +23,7 @@ def czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne):
wynik = True wynik = True
for wiersz in range(pole_lewe_gorne.wiersz, pole_lewe_gorne.wiersz + BOK_AGENTA1_W_POLACH): for wiersz in range(pole_lewe_gorne.wiersz, pole_lewe_gorne.wiersz + BOK_AGENTA1_W_POLACH):
for kolumna in range(pole_lewe_gorne.kolumna, pole_lewe_gorne.kolumna + BOK_AGENTA1_W_POLACH): for kolumna in range(pole_lewe_gorne.kolumna, pole_lewe_gorne.kolumna + BOK_AGENTA1_W_POLACH):
if Krata[wiersz][kolumna] != POLE.PUSTE: if Krata.krata[wiersz][kolumna] != POLE.PUSTE:
wynik = False wynik = False
break break
if wynik == False: if wynik == False:
@ -47,22 +33,22 @@ def czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne):
def dodaj_agenta1(): def dodaj_agenta1():
los = None los = None
if len(Agenci1) in range(0, 40): if len(Agent1.Agenci) in range(0, 40):
los = random.randint(1, 150) los = random.randint(1, 150)
elif len(Agenci1) in range(40, 50): elif len(Agent1.Agenci) in range(40, 50):
los = random.randint(1, 15) los = random.randint(1, 15)
if los != None: if los != None:
pom = None pom = None
if los in (1, 2) or len(Agenci1) == 0: if los in (1, 2) or len(Agent1.Agenci) == 0:
pom = 'wozek.png' pom = 'wozek.png'
elif los in (3, 4): elif los in (3, 4):
pom = 'wozek_ze_skrzynka.png' pom = 'wozek_ze_skrzynka.png'
elif los == 5 and len(Agenci1) > 6: elif los == 5 and len(Agent1.Agenci) > 6:
pom = 'traktor_ikona.png' pom = 'traktor_ikona.png'
if pom != None: if pom != None:
pole_lewe_gorne = Pole(random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH), pole_lewe_gorne = Pole(random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH)) random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH))
if len(Agenci1) == 0: if len(Agent1.Agenci) == 0:
pole_lewe_gorne = Pole(0, 0) pole_lewe_gorne = Pole(0, 0)
if czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne): if czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne):
pom = 'test1_ikona.png' pom = 'test1_ikona.png'
@ -70,7 +56,7 @@ def dodaj_agenta1():
(BOK_AGENTA1, BOK_AGENTA1)) (BOK_AGENTA1, BOK_AGENTA1))
nowy_agent = Agent1(pole_lewe_gorne, ikona, KIERUNEK.GORA, 0) nowy_agent = Agent1(pole_lewe_gorne, ikona, KIERUNEK.GORA, 0)
nowy_agent.zaznacz_zajmowane_pola_na_kracie(Krata) nowy_agent.zaznacz_zajmowane_pola_na_kracie(Krata)
Agenci1.append(nowy_agent) Agent1.Agenci.append(nowy_agent)
# print(Krata) # print(Krata)
@ -83,7 +69,7 @@ def main():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
warunek_dzialania = False warunek_dzialania = False
break break
wyswietl_krate() Krata.wyswietl_krate()
wyswietl_agentow() wyswietl_agentow()
dodaj_agenta1() dodaj_agenta1()
pygame.quit() pygame.quit()

View File

@ -1,5 +1,3 @@
from enum import Enum
FPS = 120 FPS = 120
# SZEROKOSC_OKNA = 1500 # SZEROKOSC_OKNA = 1500
@ -20,26 +18,3 @@ BIALY = (255, 255, 255)
JASNOSZARY1 = (200, 200, 200) JASNOSZARY1 = (200, 200, 200)
SZARY1 = (150, 150, 150) SZARY1 = (150, 150, 150)
ZIELONY1 = (26, 122, 26) ZIELONY1 = (26, 122, 26)
class KIERUNEK(Enum):
GORA = 0
DOL = 1
LEWO = 2
PRAWO = 3
class POLE(Enum):
PUSTE = 0
AGENT = 1
LAWA = 2
class Pole():
bok = BOK_POLA
def __init__(self, wiersz, kolumna):
self.wiersz = wiersz
self.kolumna = kolumna
self.x_lewego_boku = (Pole.bok + ODSTEP_MIEDZY_POLAMI) * kolumna + ODSTEP_MIEDZY_POLAMI
self.y_gory = (Pole.bok + ODSTEP_MIEDZY_POLAMI) * wiersz + ODSTEP_MIEDZY_POLAMI