Compare commits

..

77 Commits

Author SHA1 Message Date
d82a3483d9 htretrhj 2022-12-17 10:25:27 +01:00
7c2f48fbfb tfi 2022-12-16 22:21:41 +01:00
1e421bd6cd Update 'main.py' 2022-06-09 09:03:46 +02:00
b7bbc1c317 Cel paczka 2022-06-08 22:54:13 +02:00
10f2235a71 Dodanie paczki na krate 2022-06-08 22:53:31 +02:00
aeb5bf3bc3 Dodanie paczki do style 2022-06-08 22:52:41 +02:00
fbdd2f6ac9 Upload files to 'Ikony' 2022-06-08 22:51:22 +02:00
d9c18a3a67 Modyfikacja lepszej pracy algorytmu (populacji, proby) 2022-06-08 22:20:08 +02:00
d1325ac00e Powrot do magazynu agenta po dostarczeniu wszystkich paczek 2022-06-08 22:10:25 +02:00
0b48f1647a Nadanie wlasciwego celu po kazdej paczce agentowi 2022-06-08 22:04:45 +02:00
610290e7cd Otrzymanie listy poprawnej sciezki 2022-06-08 22:01:24 +02:00
b25ef4a968 Wykorzystanie alg gen dla znalezenia najlepszej sciezki 2022-06-08 21:58:06 +02:00
213f34a0df Add 'algorytmy_genetyczne.py' 2022-06-08 21:56:45 +02:00
5342416278 Stworzenie def najlepsza sciezka 2022-06-08 21:52:46 +02:00
c4112e247b Dodanie listy paczek przed algorytmem genetycznym 2022-06-08 21:51:20 +02:00
eb7b8301fc Update 'main.py' 2022-06-08 21:10:37 +02:00
7b8c8842d8 Zaktualizuj '.idea/Sztuczna_Inteligencja_Gr16.iml'
3.9 a miało był 3.8
2022-06-08 10:00:28 +02:00
a191781465 Zaktualizuj '.idea/misc.xml'
3.9 a mialo byc 3.8
2022-06-08 09:59:48 +02:00
d15203280d zmiana nadaj_cel_agentowi(); ustawienie(); wroc() 2022-06-08 09:56:20 +02:00
Aniela
dc9cfef284 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	neural_network.py
2022-06-01 23:04:39 +02:00
Aniela
82711c4c98 sieci neuronowe, wózek po każdej paczce wraca na początek po kolejną, każdy numer paczki ma przypisana szafkę 2022-06-01 23:03:34 +02:00
1f17a731b2 Zaktualizuj 'neural_network.py' 2022-06-01 17:21:46 +02:00
Aniela
88dd3cf7ab Merge remote-tracking branch 'origin/master' 2022-06-01 17:21:17 +02:00
Aniela
c23fa7f35a dodanie cyfr 2022-06-01 17:21:09 +02:00
1e24b39da3 Zaktualizuj 'neural_network.py' 2022-06-01 17:17:20 +02:00
Aniela
15234836ce Merge remote-tracking branch 'origin/master' 2022-06-01 17:11:05 +02:00
Aniela
bb500aa26d Sieci neuronowe, agent porusza się zgodnie z numerem paczki 2022-06-01 17:08:33 +02:00
a17b2dc80b Prześlij pliki do 'digits' 2022-05-30 18:04:08 +02:00
8f76ea5a76 Dodanie 'digits2' 2022-05-30 18:03:05 +02:00
b61a339f23 Dodanie nowych cyfr 2022-05-30 18:01:38 +02:00
fc4af333dc Usuń 'digit5.png' 2022-05-30 18:01:15 +02:00
4c4ee05cb8 Usuń 'digit4.png' 2022-05-30 18:01:11 +02:00
aada62586b Usuń 'digit3.png' 2022-05-30 18:01:06 +02:00
84a7f06c49 Usuń 'digit2.png' 2022-05-30 18:01:01 +02:00
a301fd3b03 Usuń 'digit1.png' 2022-05-30 18:00:49 +02:00
81d69cc762 Dodatkowe liczby, zmiana 2022-05-30 17:58:23 +02:00
Aniela
7551296681 Losowanie trzech liczb i tworzenie z nich liczby trzycyfrowej 2022-05-30 17:56:30 +02:00
627a6b5ab8 poprawka 2022-05-26 16:06:01 +02:00
32179be076 Zaktualizuj 'neural_network.py'
poprawka sieci neuronowych
2022-05-26 16:05:08 +02:00
Aniela
c959093e38 poprawka zmiany 2022-05-25 20:26:52 +02:00
Aniela
7200dd8e38 sieć neuronowa, rozpoznawanie cyfry z obrazka oraz testowe cyfry 2022-05-25 20:21:27 +02:00
Aniela
4a49e5d829 sieć neuronowa, rozpoznawanie cyfry z obrazka oraz testowe cyfry 2022-05-25 20:20:09 +02:00
08a66b94f4 Merge remote-tracking branch 'origin/master' 2022-05-19 00:08:35 +02:00
17e38605c7 Drzewo decyzyjne - zmiana pliku ze zbiorem do uczenia się 2022-05-19 00:05:24 +02:00
463a21048a dodanie ikon poprawka 2022-05-18 08:46:35 +02:00
86d4793cd7 Merge remote-tracking branch 'origin/master' 2022-05-18 01:11:08 +02:00
457248b9fa Drzewo decyzyjne - uzupełnienie 2022-05-18 01:10:31 +02:00
s464917
e5d6b894bc dodane ikony dywanu i kaluzy, zmieniona ikona wozka 2022-05-16 21:41:38 +02:00
bf0f1a4362 Drzewo decyzyjne - decyzja, czy osoba ma natychmast opuścić magazyn 2022-05-11 17:32:28 +02:00
domjag5
18ab66459c dopasowanie kosztu, obracanie agenta 2022-04-28 16:50:19 +02:00
domjag5
d606f376c9 dopasowanie kosztu 2022-04-21 15:54:58 +02:00
544bda1766 A-gwiazdka. Na podłodze dywany i kałuże. 2022-04-18 23:28:28 +02:00
1c4c851c3d Możliwość zamknięcia okna w każdym momencie. Zmiana sposobu wyświetlania. Zastosowanie wzorca "obserwator". 2022-04-16 16:45:37 +02:00
c8ea93916b Succ używający akcji i stanów; poprawa bfs - tworzenie ciągu akcji; interpretacja ciągu akcji przez agenta. 2022-04-06 14:05:40 +02:00
ccbb743403 algorytm bfs z funkcją następnika, dodatkowo zmieniono wielkość i ilość pól kraty 2022-04-04 16:28:25 +02:00
e4a0f19301 Zaktualizuj 'agent.py' 2022-04-02 14:05:51 +02:00
321ac8490e Szafki z półkami i miejscami na półkach 2022-04-01 18:18:30 +02:00
d3387c820c Szafki z półkami jako ściany 2022-03-27 23:08:35 +02:00
35073809ef Rozszerzenie wiedzy agenta (ram/klas). 2022-03-24 09:01:38 +01:00
ffddbbdf0a Zaktualizuj 'etykieta.py' 2022-03-23 16:09:42 +01:00
416e35b8b5 inna wersja klas szafka i miejsce 2022-03-23 14:59:37 +01:00
c9e4022dba Praca nad ramami (wiedzą agenta). Eksperymenty z kolorami i zawartością pól. 2022-03-22 21:52:05 +01:00
2afda6c7ff Dodanie rysowania kraty liniami z main2.py 2022-03-22 14:32:26 +01:00
e8b5d96263 Scalenie dodana_etykieta_i_paczka do mastera 2022-03-22 14:02:42 +01:00
746745caa0 Merge branch 'dodana_etykieta_i_paczka'
# Conflicts:
#	etykieta.py
#	main.py
2022-03-22 14:01:30 +01:00
ba8339b4b8 Skopiowanie etykieta.py do mastera w celu scalenia gałęzi 2022-03-22 13:59:05 +01:00
33faa91bd7 Ostateczne ręczne scalenie kratownicy1 do mastera
W masterze jest już wszystko z kratownicy.
2022-03-22 13:53:35 +01:00
dd487ac4fc Czwarta próba scalenia kratownicy1 z masterem. 2022-03-22 13:46:29 +01:00
08014b063f Merge remote-tracking branch 'origin/kratownica1'
# Conflicts:
#	agent.py
#	main.py
#	stale.py
2022-03-22 13:45:54 +01:00
a40fb0a8e3 Zaktualizuj 'main.py' 2022-03-22 13:26:51 +01:00
8d43f8abf6 Zaktualizuj 'agent.py' 2022-03-22 13:26:17 +01:00
21fccb422f Agent porusza się losowo po kracie zajmując 9 pól. 2022-03-22 11:20:58 +01:00
adece3ebc9 Poprawa struktury kodu. Ograniczenie się do jednego agenta. 2022-03-21 22:13:57 +01:00
2d05a136a0 Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom. 2022-03-21 22:12:01 +01:00
90356ec6d8 Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom. 2022-03-21 22:05:28 +01:00
e8aa87ff54 Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom. 2022-03-21 19:41:34 +01:00
9ca4f821e1 Stworzenie kraty (prawdziwej, z polami). Losowanie na nią agentów zajmujących nxn pól. 2022-03-10 19:41:05 +01:00
14 changed files with 411 additions and 254 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.10 (Sztuczna_Inteligencja_Gr16)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Python 3.9 (jakiesvirtualneenv)" jdkType="Python SDK" />
<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.10 (Sztuczna_Inteligencja_Gr16)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (jakiesvirtualneenv)" project-jdk-type="Python SDK" />
</project> </project>

BIN
Ikony/auto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 657 B

BIN
Ikony/auto2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

BIN
Ikony/test2_ikona.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

117
agent.py
View File

@ -1,117 +0,0 @@
import random
from krata import *
class Agent:
bok = BOK_AGENTA1
bokWPolach = BOK_AGENTA1_W_POLACH
def __init__(self, Krata, poleStartoweGorne, tekstura):
self.krata = Krata
self.poleStartoweGorne = poleStartoweGorne
self.tekstura = tekstura
self.okreslPolozenie()
self.obierzNowyKierunek()
self.okreslDlugoscDrogi()
Krata.agent = self
def ruszSie(self):
if self.droga <= 0:
self.obierzNowyKierunek()
self.okreslDlugoscDrogi()
self.zrobKrokWMoimKierunku()
self.droga -= 1
self.okreslPolozenie()
if self.wyszedlemPozaKrate():
self.cofnijSie()
self.zawroc()
self.okreslDlugoscDrogi()
def obierzNowyKierunek(self):
self.kierunek = Kierunek(random.randint(0, 3))
if self.maxDlugoscDrogiWMoimKierunku() < 1:
self.obierzNowyKierunek()
def okreslDlugoscDrogi(self):
self.droga = random.randint(1, self.maxDlugoscDrogiWMoimKierunku())
def cofnijSie(self):
self.zrobKrokWOdwrotnymKierunku()
self.okreslPolozenie()
def okreslPolozenie(self):
self.okreslPoleKoncoweDolne()
self.okreslHitbox()
def okreslHitbox(self):
self.hitbox = pygame.Rect(self.poleStartoweGorne.start, self.poleStartoweGorne.gora, self.bok, self.bok)
def okreslPoleKoncoweDolne(self):
wiersz = self.poleStartoweGorne.wiersz + self.bokWPolach - 1
kolumna = self.poleStartoweGorne.kolumna + self.bokWPolach - 1
self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna)
def wyszedlemPozaKrate(self):
if self.poleStartoweGorne.wiersz < 0:
return True
elif self.poleKoncoweDolne.wiersz > self.krata.liczbaPolPionowo - 1:
return True
elif self.poleStartoweGorne.kolumna < 0:
return True
elif self.poleKoncoweDolne.kolumna > self.krata.liczbaPolPoziomo - 1:
return True
else:
return False
def zawroc(self):
if self.kierunek == Kierunek.GORA:
self.kierunek = Kierunek.DOL
elif self.kierunek == Kierunek.DOL:
self.kierunek = Kierunek.GORA
elif self.kierunek == Kierunek.LEWO:
self.kierunek = Kierunek.PRAWO
elif self.kierunek == Kierunek.PRAWO:
self.kierunek = Kierunek.LEWO
def maxDlugoscDrogiWMoimKierunku(self):
if self.kierunek == Kierunek.GORA:
return self.poleStartoweGorne.wiersz
elif self.kierunek == Kierunek.DOL:
return self.krata.liczbaPolPionowo - self.poleKoncoweDolne.wiersz - 1
elif self.kierunek == Kierunek.LEWO:
return self.poleStartoweGorne.kolumna
elif self.kierunek == Kierunek.PRAWO:
return self.krata.liczbaPolPoziomo - self.poleKoncoweDolne.kolumna - 1
def zrobKrokWMoimKierunku(self):
if self.kierunek == Kierunek.GORA:
self.idzWGore()
elif self.kierunek == Kierunek.DOL:
self.idzWDol()
elif self.kierunek == Kierunek.LEWO:
self.idzWLewo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWPrawo()
def zrobKrokWOdwrotnymKierunku(self):
if self.kierunek == Kierunek.GORA:
self.idzWDol()
elif self.kierunek == Kierunek.DOL:
self.idzWGore()
elif self.kierunek == Kierunek.LEWO:
self.idzWPrawo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWLewo()
def idzWGore(self):
self.poleStartoweGorne.wiersz -= 1
def idzWDol(self):
self.poleStartoweGorne.wiersz += 1
def idzWLewo(self):
self.poleStartoweGorne.kolumna -= 1
def idzWPrawo(self):
self.poleStartoweGorne.kolumna += 1

View File

@ -1,14 +0,0 @@
from enum import Enum
class Kierunek(Enum):
GORA = 0
DOL = 1
LEWO = 2
PRAWO = 3
class ZawartoscPola(Enum):
PUSTE = 0
AGENT = 1
LAWA = 2

29
enumy_i_slowniki.py Normal file
View File

@ -0,0 +1,29 @@
from enum import Enum
from stale import *
class ZawartoscPola(Enum):
PUSTE = 0
SCIANA = 1
SCIANA2 = 2
SYGNALIZATOR_CZERWONY = 3
SYGNALIZATOR_ZOLTY = 4
SYGNALIZATOR_ZIELONY = 5
class Swiatlo(Enum):
CZERWONE = 0
CZERWONE_Z_ZOLTYM = 1
ZIELONE = 2
ZOLTE = 3
ZawartoscPolaNaKolorPola = {
ZawartoscPola.PUSTE: CZARNY,
ZawartoscPola.SCIANA: JASNOSZARY,
ZawartoscPola.SCIANA2: SZARY,
ZawartoscPola.SYGNALIZATOR_CZERWONY: CZERWONY,
ZawartoscPola.SYGNALIZATOR_ZOLTY: ZOLTY,
ZawartoscPola.SYGNALIZATOR_ZIELONY: ZIELONY
}

View File

@ -1,5 +0,0 @@
nazwa_paczki =""
producent =""
numer_paczki=int
cecha_paczki =""
data_wysylki= ""

View File

@ -1,73 +0,0 @@
import pygame
from enumy import *
from stale import *
class PoleKraty:
def __init__(self, Krata, wiersz, kolumna):
self.krata = Krata
self.bok = self.krata.bokPola
self._wiersz = wiersz
self._kolumna = kolumna
self.okreslGore()
self.okreslStart()
def okreslGore(self):
self.gora = (self.bok + self.krata.odstepMiedzyPolami) * self.wiersz + self.krata.odstepMiedzyPolami
def okreslStart(self):
self.start = (self.bok + self.krata.odstepMiedzyPolami) * self.kolumna + self.krata.odstepMiedzyPolami
def getWiersz(self):
return self._wiersz
def setWiersz(self, x):
self._wiersz = x
self.okreslGore()
def getKolumna(self):
return self._kolumna
def setKolumna(self, x):
self._kolumna = x
self.okreslStart()
wiersz = property(getWiersz, setWiersz)
kolumna = property(getKolumna, setKolumna)
class Krata:
def __init__(self, okno):
self.okno = okno
self.liczbaPolPoziomo = LICZBA_POL_W_POZIOMIE
self.liczbaPolPionowo = LICZBA_POL_W_PIONIE
self.bokPola = BOK_POLA
self.odstepMiedzyPolami = ODSTEP_MIEDZY_POLAMI
self.krata = self.utworzPustaKrate()
self.agent = None
def utworzPustaKrate(self):
self.krata = []
for rzad in range(self.liczbaPolPionowo):
self.krata.append([])
for kolumna in range(self.liczbaPolPoziomo):
self.krata[rzad].append(ZawartoscPola.PUSTE)
def wyswietlKrate(self):
self.narysujKrate()
self.narysujAgenta()
pygame.display.update()
def narysujKrate(self):
self.okno.fill(SZARY1)
for rzad in range(self.liczbaPolPionowo):
for kolumna in range(self.liczbaPolPoziomo):
start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami
gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami
pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola])
def narysujAgenta(self):
if self.agent is not None:
self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y))
self.agent.ruszSie()

380
main.py
View File

@ -1,35 +1,369 @@
import os import os
import random
from agent import * import pygame
import etykieta
Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pygame.display.set_caption("Okno1")
Krata = Krata(Okno)
from enumy_i_slowniki import *
# #
def dodaj_agenta(): okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH), #
random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH)) droga_A = [[False, w, 7] for w in range(LICZBA_POL_W_PIONIE)]
pom = 'test1_ikona.png' swiatlo_A = Swiatlo.CZERWONE
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)), pole_postojowe_A = (9, 7)
(BOK_AGENTA1, BOK_AGENTA1)) sygnalizator_A = ((10, 9), (11, 9), (12, 9))
Agent(Krata, pole_lewe_gorne, ikona) indeks_petli_A = None
for i in range(len(droga_A)):
x = droga_A[i]
if x[1] == pole_postojowe_A[0] and x[2] == pole_postojowe_A[1]:
indeks_petli_A = i
#
droga_B = [[False, w, 7] for w in range(0, 7)] + [[False, 7, k] for k in range(7, LICZBA_POL_W_POZIOMIE)]
swiatlo_B = Swiatlo.ZIELONE
pole_postojowe_B = (7, 8)
sygnalizator_B = ((3, 10), (4, 10), (5, 10))
indeks_petli_B = None
for i in range(len(droga_B)):
x = droga_B[i]
if x[1] == pole_postojowe_B[0] and x[2] == pole_postojowe_B[1]:
indeks_petli_B = i
#
krata = [[_ for _ in range(LICZBA_POL_W_POZIOMIE)] for _ in range(LICZBA_POL_W_PIONIE)]
#
for w in range(LICZBA_POL_W_PIONIE):
for k in range(LICZBA_POL_W_POZIOMIE):
krata[w][k] = ZawartoscPola.SCIANA2
#
for w in range(LICZBA_POL_W_PIONIE):
krata[w][5] = ZawartoscPola.SCIANA
krata[w][6] = ZawartoscPola.PUSTE
krata[w][7] = ZawartoscPola.PUSTE
krata[w][8] = ZawartoscPola.SCIANA
#
krata[7][8] = ZawartoscPola.PUSTE
krata[8][8] = ZawartoscPola.PUSTE
#
for w in [7, 8]:
for k in range(8, LICZBA_POL_W_POZIOMIE):
krata[w][k] = ZawartoscPola.PUSTE
#
for k in range(8, LICZBA_POL_W_POZIOMIE):
krata[6][k] = ZawartoscPola.SCIANA
for k in range(8, LICZBA_POL_W_POZIOMIE):
krata[9][k] = ZawartoscPola.SCIANA
def main(): def wyswietl_okno():
dodaj_agenta() pygame.time.Clock().tick(FPS)
klatkaz = pygame.time.Clock()
warunek_dzialania = True
while warunek_dzialania:
klatkaz.tick(FPS)
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
warunek_dzialania = False # print("Użytkownik spróbował zamknąć okno.")
break
Krata.wyswietlKrate()
pygame.quit() pygame.quit()
narysuj_krate()
narysuj_pojazdy()
pygame.display.update()
main() def narysuj_krate():
okno.fill(SZARY)
for wiersz in range(LICZBA_POL_W_PIONIE):
for kolumna in range(LICZBA_POL_W_POZIOMIE):
start = (ODSTEP_MIEDZY_POLAMI + BOK_POLA) * kolumna + ODSTEP_MIEDZY_POLAMI
gora = (ODSTEP_MIEDZY_POLAMI + BOK_POLA) * wiersz + ODSTEP_MIEDZY_POLAMI
kolor_pola = ZawartoscPolaNaKolorPola[krata[wiersz][kolumna]]
pygame.draw.rect(okno, kolor_pola, [start, gora, BOK_POLA, BOK_POLA])
def narysuj_pojazdy():
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'auto.png')), (BOK_AGENTA, BOK_AGENTA))
for x in droga_A:
if x[0]:
okno.blit(ikona, ((BOK_POLA + ODSTEP_MIEDZY_POLAMI) * x[2] + ODSTEP_MIEDZY_POLAMI,
(BOK_POLA + ODSTEP_MIEDZY_POLAMI) * x[1] + ODSTEP_MIEDZY_POLAMI))
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'auto2.png')), (BOK_AGENTA, BOK_AGENTA))
for x in droga_B:
if x[0]:
okno.blit(ikona, ((BOK_POLA + ODSTEP_MIEDZY_POLAMI) * x[2] + ODSTEP_MIEDZY_POLAMI,
(BOK_POLA + ODSTEP_MIEDZY_POLAMI) * x[1] + ODSTEP_MIEDZY_POLAMI))
def rusz_pojazdy_na_drodze(droga, pole_postojowe, swiatlo):
nowa_droga = [[False, x[1], x[2]] for x in droga]
for i in range(len(droga) - 1, 0, -1):
x = droga[i]
if x[0]:
if x[1] == pole_postojowe[0] and x[2] == pole_postojowe[1] and swiatlo != Swiatlo.ZIELONE:
nowa_droga[i][0] = True
else:
if not droga[i - 1][0]:
nowa_droga[i][0] = False
nowa_droga[i - 1][0] = True
else:
nowa_droga[i][0] = True
return nowa_droga
def ustaw_czerwone(sygnalizator):
krata[sygnalizator[0][0]][sygnalizator[0][1]] = ZawartoscPola.SYGNALIZATOR_CZERWONY
krata[sygnalizator[1][0]][sygnalizator[1][1]] = ZawartoscPola.SCIANA2
krata[sygnalizator[2][0]][sygnalizator[2][1]] = ZawartoscPola.SCIANA2
def ustaw_czerwone_z_zoltym(sygnalizator):
krata[sygnalizator[0][0]][sygnalizator[0][1]] = ZawartoscPola.SYGNALIZATOR_CZERWONY
krata[sygnalizator[1][0]][sygnalizator[1][1]] = ZawartoscPola.SYGNALIZATOR_ZOLTY
krata[sygnalizator[2][0]][sygnalizator[2][1]] = ZawartoscPola.SCIANA2
def ustaw_zolte(sygnalizator):
krata[sygnalizator[0][0]][sygnalizator[0][1]] = ZawartoscPola.SCIANA2
krata[sygnalizator[1][0]][sygnalizator[1][1]] = ZawartoscPola.SYGNALIZATOR_ZOLTY
krata[sygnalizator[2][0]][sygnalizator[2][1]] = ZawartoscPola.SCIANA2
def ustaw_zielone(sygnalizator):
krata[sygnalizator[0][0]][sygnalizator[0][1]] = ZawartoscPola.SCIANA2
krata[sygnalizator[1][0]][sygnalizator[1][1]] = ZawartoscPola.SCIANA2
krata[sygnalizator[2][0]][sygnalizator[2][1]] = ZawartoscPola.SYGNALIZATOR_ZIELONY
def Czerwone_Czerwone_do_Zielone_Czerwone():
return swiatlo_A == Swiatlo.CZERWONE and swiatlo_B == Swiatlo.CZERWONE and poprzednio == "B"
def Czerwone_Czerwone_do_Czerwone_Zielone():
return swiatlo_A == Swiatlo.CZERWONE and swiatlo_B == Swiatlo.CZERWONE and poprzednio == "A"
def CzerwoneZZoltym_Czerwone():
return swiatlo_A == Swiatlo.CZERWONE_Z_ZOLTYM and swiatlo_B == Swiatlo.CZERWONE
def Zielone_Czerwone_1():
return swiatlo_A == Swiatlo.ZIELONE and swiatlo_B == Swiatlo.CZERWONE and poprzednio == "B"
def Zielone_Czerwone_2():
return swiatlo_A == Swiatlo.ZIELONE and swiatlo_B == Swiatlo.CZERWONE and poprzednio == "A"
def Zolte_Czerwone():
return swiatlo_A == Swiatlo.ZOLTE and swiatlo_B == Swiatlo.CZERWONE
def Czerwone_CzerwoneZZoltym():
return swiatlo_A == Swiatlo.CZERWONE and swiatlo_B == Swiatlo.CZERWONE_Z_ZOLTYM
def Czerwone_Zielone():
return swiatlo_A == Swiatlo.CZERWONE and swiatlo_B == Swiatlo.ZIELONE
def Czerwone_Zolte():
return swiatlo_A == Swiatlo.CZERWONE and swiatlo_B == Swiatlo.ZOLTE
def O_O():
return (not droga_A[indeks_petli_A][0]) and (not droga_B[indeks_petli_B][0])
def A_O():
return (droga_A[indeks_petli_A][0]) and (not droga_B[indeks_petli_B][0])
def O_B():
return (not droga_A[indeks_petli_A][0]) and (droga_B[indeks_petli_B][0])
def A_B():
return (droga_A[indeks_petli_A][0]) and (droga_B[indeks_petli_B][0])
def ustaw_Czerwone_Czerwone_do_Czerwone_Zielone():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
global poprzednio
poprzednio = "A"
def ustaw_Czerwone_Czerwone_do_Zielone_Czerwone():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
global poprzednio
poprzednio = "B"
def ustaw_CzerwoneZZoltym_Czerwone():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE_Z_ZOLTYM
ustaw_czerwone_z_zoltym(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
def ustaw_Zielone_Czerwone_1():
global swiatlo_A
swiatlo_A = Swiatlo.ZIELONE
ustaw_zielone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
global poprzednio
poprzednio = "B"
def ustaw_Zielone_Czerwone_2():
global swiatlo_A
swiatlo_A = Swiatlo.ZIELONE
ustaw_zielone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
global poprzednio
poprzednio = "A"
def ustaw_Zolte_Czerwone():
global swiatlo_A
swiatlo_A = Swiatlo.ZOLTE
ustaw_zolte(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_B)
def ustaw_Czerwone_CzerwoneZZoltym():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.CZERWONE_Z_ZOLTYM
ustaw_czerwone_z_zoltym(sygnalizator_B)
def ustaw_Czerwone_Zielone():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.ZIELONE
ustaw_zielone(sygnalizator_B)
def ustaw_Czerwone_Zolte():
global swiatlo_A
swiatlo_A = Swiatlo.CZERWONE
ustaw_czerwone(sygnalizator_A)
global swiatlo_B
swiatlo_B = Swiatlo.ZOLTE
ustaw_zolte(sygnalizator_B)
droga_A[14][0] = True
droga_A[12][0] = True
droga_A[10][0] = True
droga_A[9][0] = True
droga_B[len(droga_B) - 1][0] = True
droga_B[len(droga_B) - 2][0] = True
droga_B[len(droga_B) - 6][0] = True
droga_B[5][0] = True
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
ustaw_Czerwone_Czerwone_do_Zielone_Czerwone()
poprzednio = "B"
while True:
# print(droga_A[indeks_petli_A][0],droga_B[indeks_petli_B][0])
if O_O():
print("O - O")
elif A_O():
print("A - O")
elif A_B():
print("A - B")
elif O_B():
print("O - B")
czas_od_ostatniej_zmiany_swiatel = pygame.time.get_ticks() - czas_ostatniej_zmiany_swiatel
if Czerwone_Czerwone_do_Zielone_Czerwone():
print("Czerwone - Czerwone do Zielone - Czerwone")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
if O_O() or A_O() or A_B():
ustaw_CzerwoneZZoltym_Czerwone()
elif O_B():
ustaw_Czerwone_CzerwoneZZoltym()
elif CzerwoneZZoltym_Czerwone():
print("Czerwone z Zoltym - Czerwone")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
ustaw_Zielone_Czerwone_1()
elif Zielone_Czerwone_1():
print("Zielone - Czerwone 1")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_CYKLU:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
if O_O() or A_O() or A_B():
ustaw_Zielone_Czerwone_2()
elif O_B():
ustaw_Zolte_Czerwone()
elif Zielone_Czerwone_2():
print("Zielone - Czerwone 2")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_CYKLU:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
if O_O() or A_O():
pass
elif O_B() or A_B():
ustaw_Zolte_Czerwone()
elif Zolte_Czerwone():
print("Zolte - Czerwone")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
ustaw_Czerwone_Czerwone_do_Czerwone_Zielone()
elif Czerwone_CzerwoneZZoltym():
print("Czerwone - Czerwone z Zoltym")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
ustaw_Czerwone_Zielone()
elif Czerwone_Zielone():
print("Czerwone - Zielone")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_CYKLU:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
if O_B():
pass
elif O_O() or A_O() or A_B():
ustaw_Czerwone_Zolte()
elif Czerwone_Zolte():
print("Czerwone - Zolte")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
ustaw_Czerwone_Czerwone_do_Zielone_Czerwone()
elif Czerwone_Czerwone_do_Czerwone_Zielone():
print("Czerwone - Czerwone do Czerwone - Zielone")
if czas_od_ostatniej_zmiany_swiatel >= CZAS_ZMIANY_NA_SYGNALIZATORZE:
czas_ostatniej_zmiany_swiatel = pygame.time.get_ticks()
if A_O():
ustaw_CzerwoneZZoltym_Czerwone()
elif O_O() or O_B() or A_B():
ustaw_Czerwone_CzerwoneZZoltym()
#
wyswietl_okno()
droga_A = rusz_pojazdy_na_drodze(droga_A, pole_postojowe_A, swiatlo_A)
droga_B = rusz_pojazdy_na_drodze(droga_B, pole_postojowe_B, swiatlo_B)
#
los = random.random()
liczba_samochodow = len([x for x in droga_A if x[0]])
maks_samochodow = 7
szansa = (maks_samochodow - liczba_samochodow) / maks_samochodow -0.7
if los < szansa:
droga_A[len(droga_A) - 1][0] = True
#
liczba_samochodow = len([x for x in droga_B if x[0]])
maks_samochodow = 6
szansa = (maks_samochodow - liczba_samochodow) / maks_samochodow - 0.4
if los < szansa:
droga_B[len(droga_B) - 1][0] = True

View File

@ -1,20 +1,23 @@
FPS = 10 FPS = 2
#
# SZEROKOSC_OKNA = 1500 LICZBA_POL_W_POZIOMIE = 30
# WYSOKOSC_OKNA = 750 LICZBA_POL_W_PIONIE = 15
BOK_POLA = 45
LICZBA_POL_W_POZIOMIE = 60 ODSTEP_MIEDZY_POLAMI = 1
LICZBA_POL_W_PIONIE = 20
BOK_POLA = 20
ODSTEP_MIEDZY_POLAMI =2
SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
#
BOK_AGENTA1_W_POLACH = 1 BOK_AGENTA_W_POLACH = 1
BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI BOK_AGENTA = BOK_AGENTA_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI
KROK_AGENTA1 = 2 #
BIALY = (255, 255, 255) BIALY = (255, 255, 255)
JASNOSZARY1 = (200, 200, 200) JASNOSZARY = (200, 200, 200)
SZARY1 = (150, 150, 150) SZARY = (150, 150, 150)
ZIELONY1 = (26, 122, 26) CZARNY = (0, 0, 0)
#
CZERWONY = (255, 0, 0)
ZOLTY = (255, 255, 0)
ZIELONY = (0, 255, 0)
#
CZAS_ZMIANY_NA_SYGNALIZATORZE = 1500
CZAS_CYKLU = 6000