diff --git a/README.md b/README.md index 4d225d1..bc67ef5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -Repozytorium projektu z sztucznej inteligencji, temat "Inteligentny wózek widłowy". +Repozytorium projektu z sztucznej inteligencji, temat "Inteligentny wózek widłowy".
+Zespół: 444420, 444428, 444430 \ No newline at end of file diff --git a/environment.md b/environment.md new file mode 100644 index 0000000..7c15074 --- /dev/null +++ b/environment.md @@ -0,0 +1,44 @@ +# Raport 1 + +### Środowisko +Środowiskiem agenta jest plansza (mapa magazynu), która jest podzielona na pola. Każde pole może być puste lub zajęte. +Agent może się poruszać tylko po polach pustych. Na polach zajętych znajdują się regały, na których przechowywane jest towar. Regały są zaznaczone za pomocą funkcji `pokolorujRegaly()` +Plansza ma wymiar 11 kolumn indeksowanych od 0 do 11 i 7 wierszy indeksowanych od 0 do 6. Pola mogą być ponumerowane dzięki funkcji `ponumerujPola()`. + +### Agent + +Agent jest reprezentowany za pomocą klasy `Agent`. +Agent jest wyświetlany na planszy przy użyciu ikony wózka widłowego (`umiescAgenta()`). +Agent porusza się po dzięki metodzie `przemieszczenie()`, która najpierw usuwa agenta z planszy (funkcja: `usunAgenta()`) nasępnie przesuwa go metodami `right()`, `left()`, +`up()`, `down()` i umieszcza go na nowej pozycji (funkcja: `umiescAgenta()`). Droga agenta jest ustala funkcją `droga()`.Przykład drogi agenta https://youtu.be/RLe2ZN5SFLo. + +### Reprezentacja wiedzy + +Klasa `Field` - reprezentuje pola w magazynie. Posiada pola: +- `x` - współrzędna x +- `y` - współrzędna y +- `isEmpty` - określa czy pole jest puste, czy nie. + +
+ +Klasa `Product` - reprezentuje poszczególne produkty znajdujące się w magazynie. Posiada pola: +- `name` - nazwa produktu +- `type` - rodzaj produktu +- `specs` - krótki opis produktu +- `price` - cena produktu + +
+ +Klasa `Rack` - reprezentuje regały, które znajdują się w magazynie. Na jednym regale mogą znajdować się pordukty tego samego typu. Posiada pola: +- `noOfShelf` - liczbę półek danego regału + + +Metody: +- `addShelf()` - dodającą półkę do regału +- `isEmpty()` - zwracającą **true**, jeśli regał nie ma żadnych półek lub **false** w przeciwnym wypadku + +
+ +Klasa `Shelf` - reprezentuje półkę, w regale. Na jednej półce mogą znajdować się produkty o tej samej specyfikacji. Posiada pola: +- `number` - numer półki +- `typOfProduct` - rodzaj produktu, jaki znajduję się na półce \ No newline at end of file diff --git a/frontend/js/Archiwum/Agent.js b/frontend/js/Archiwum/Agent.js new file mode 100644 index 0000000..1a51fc2 --- /dev/null +++ b/frontend/js/Archiwum/Agent.js @@ -0,0 +1,87 @@ +export default class Agent{ + constructor(positionX, positionY, turn){ + this.positionX = positionX; + this.positionY = positionY; + this.turn = turn; + } + + getParams(){ + let params = {}; + + positionX = this.positionX; + positionY = this.positionY; + turn = this.turn; + + params = {positionX, positionY, turn}; + + return params; + } + + goForward(){ + if(this.turn == 'Up'){ + this.positionY += 1; + } + else if(this.turn == 'Down'){ + this.positionY -= 1; + } + else if(this.turn == 'Left'){ + this.positionX -= 1; + } + else if(this.turn == 'Right'){ + this.positionX += 1; + } + } + + turnLeft(){ + if(this.turn == 'Up'){ + this.turn = 'Left'; + } + else if(this.turn == 'Down'){ + this.turn = 'Right'; + } + else if(this.turn == 'Left'){ + this.turn = 'Down'; + } + else if(this.turn == 'Right'){ + this.turn = 'Up' + } + } + + turnRight(){ + if(this.turn == 'Up'){ + this.turn = 'Right'; + } + else if(this.turn == 'Down'){ + this.turn = 'Left'; + } + else if(this.turn == 'Left'){ + this.turn = 'Up'; + } + else if(this.turn == 'Right'){ + this.turn = 'Down' + } + } + + showAgent(){ + console.log(this.turn) + if(this.turn === "Up"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Up.png')"; + } + else if(this.turn === "Down"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Down.png')"; + } + else if(this.turn === "Right"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Right.png')"; + } + else if(this.turn === "Left"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Left.png')"; + } + + } + + hideAgent(){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = ""; + } + + +} \ No newline at end of file diff --git a/frontend/js/Archiwum/Board.js b/frontend/js/Archiwum/Board.js new file mode 100644 index 0000000..178bfb1 --- /dev/null +++ b/frontend/js/Archiwum/Board.js @@ -0,0 +1,30 @@ +import Field from './Field.js' + +export function createBoard(rangeX, rangeY){ + const board = []; + + for(let y = 0; y < rangeY; y++){ + const row = []; + for(let x = 0; x < rangeX; x++){ + let field = new Field(x, y, false, false, 1); + row.push(field) + } + board.push(row) + } + return board +} + +export function showBoard(board){ + for(let y = board.length - 1; y >= 0 ; y--){ + document.getElementById("board").innerHTML += "
"; + + for(let x = 0; x < board[y].length; x++){ + document.getElementById("row-" + y).innerHTML += "
" + } + } +} + + + + + diff --git a/frontend/js/Archiwum/Field.js b/frontend/js/Archiwum/Field.js new file mode 100644 index 0000000..7e2b03b --- /dev/null +++ b/frontend/js/Archiwum/Field.js @@ -0,0 +1,22 @@ +export default class Field{ + constructor(x, y, isShelf, isOccupiedByAgent, costOfTravel){ + this.xField = x; + this.yField = y; + this.isShelf = isShelf; + this.isOccupiedByAgent = isOccupiedByAgent; + this.costOfTravel = costOfTravel; + } + + getParams(){ + let params = {}; + + xField = this.xField; + yField = this.yField; + isShelf = this.isShelf; + isOccupiedByAgent = this.isOccupiedByAgent; + costOfTravel = this.costOfTravel; + params = {xField, yField, isShelf, isOccupiedByAgent, costOfTravel} + + return params; + } +} \ No newline at end of file diff --git a/frontend/js/Archiwum/script.js b/frontend/js/Archiwum/script.js new file mode 100644 index 0000000..44ad711 --- /dev/null +++ b/frontend/js/Archiwum/script.js @@ -0,0 +1,125 @@ +// import Agent from './Agent.js' + +// //Klasy + + +// class Field { +// constructor(x, y, isEmpty) { +// this.xField = x; +// this.yField = y; +// this.isFieldEmpty = isEmpty; +// } +// getCoordinates(){ +// return this.xField + this.yField; +// } + +// getStatus(){ +// return this.isFieldEmpty; +// } +// } + +// class Product { +// constructor(name, type, farcing, price) { +// this.name = name; +// this.type = type; +// this.farcing = farcing; +// this.price = price +// } +// } + +// class Rack{ +// constructor(noOfShelf, typOfProduct) { +// this.noOfShelf = noOfShelf; +// } + +// addShelf(){ +// this.noOfShelf = this.noOfShelf + 1; +// } + +// isEmpty(){ +// if (this.noOfShelf === 0){ +// return true; +// }else { +// return false; +// } +// } +// } + +// class Shelf { +// constructor(number) { +// this.number = number; +// } +// } + + +// //Objekty i zmienne +// var regaly = ['1-1', '1-3', '1-4', '1-6', '1-7', '1-9', '2-1', '2-9', '3-3', '3-4', '3-6', '3-7', '4-1', '4-9', '5-1', '5-3', '5-4', '5-6', '5-7', '5-9'] +// const agent1 = new Agent(3, 0); + +// //Funkcja uruchamiająca prace calego scriptu +// function start(){ +// //ponumerujPola(); +// pokolorujRegaly(); +// umiescAgenta(agent1); +// droga(agent1); +// } + +// //Funkcja kolorujaca miejsca na planszy gdzie znajduja sie regaly +// function pokolorujRegaly(){ +// let x; +// for(x = 0; x < regaly.length; x++){ +// document.getElementById(regaly[x]).className = 'regal'; +// } +// } + +// //Funkcja wyswietlajaca id pol +// function ponumerujPola(){ +// let x,y +// for(x = 0; x < 7; x++){ +// for(y = 0; y < 11; y++){ +// id = x.toString() + "-" + y.toString(); +// document.getElementById(id).innerHTML = id; +// } +// } +// } + +// //Funkcja usuwająca agenta z pola, przed przemieszczeniem +// function usunAgenta(agent){ +// document.getElementById(agent.getId()).style.backgroundImage = "none"; +// } + + +// //Funckja wyswietlajaca agenta gdy ten zmieni polozenie +// function umiescAgenta(agent) { +// document.getElementById(agent.getId()).style.backgroundImage = "url('Agent.jpg')"; +// } + +// //Funkcja zmieniajaca polozenie agenta o 1 pole +// function przemieszczenie(side, time, agent){ +// const lastPosition = agent.getId(); +// setTimeout(function(){ +// usunAgenta(agent) +// if(side == "left") +// agent.left(); +// if(side == "right") +// agent.right(); +// if(side == "up") +// agent.up(); +// if(side == "down") +// agent.down(); +// umiescAgenta(agent); +// }, time); +// } + +// //Funkcja ktora ustala droge agenta do przebycia +// function droga(agent) { +// przemieszczenie("right", 1000, agent); +// przemieszczenie("right", 2000, agent); +// przemieszczenie("up", 3000, agent); +// przemieszczenie("right", 4000, agent); +// przemieszczenie("right", 5000, agent); +// przemieszczenie("right", 6000, agent); +// przemieszczenie("right", 7000, agent); +// przemieszczenie("right", 8000, agent); +// przemieszczenie("right", 9000, agent); +// } diff --git a/frontend/js/main.js b/frontend/js/main.js index 735d905..178bb7e 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -1,27 +1,147 @@ -import * as Board from './Board.js' -import Agent from './Agent.js' +//Klasy +class Agent{ + constructor(positionX, positionY, turn){ + this.positionX = positionX; + this.positionY = positionY; + this.turn = turn; + } -let board = Board.createBoard(10,10); -Board.showBoard(board); + getParams(){ + let params = {}; + positionX = this.positionX; + positionY = this.positionY; + turn = this.turn; + + params = {positionX, positionY, turn}; + + return params; + } + + goForward(){ + if(this.turn == 'Up'){ + this.positionY += 1; + } + else if(this.turn == 'Down'){ + this.positionY -= 1; + } + else if(this.turn == 'Left'){ + this.positionX -= 1; + } + else if(this.turn == 'Right'){ + this.positionX += 1; + } + } + + turnLeft(){ + if(this.turn == 'Up'){ + this.turn = 'Left'; + } + else if(this.turn == 'Down'){ + this.turn = 'Right'; + } + else if(this.turn == 'Left'){ + this.turn = 'Down'; + } + else if(this.turn == 'Right'){ + this.turn = 'Up' + } + } + + turnRight(){ + if(this.turn == 'Up'){ + this.turn = 'Right'; + } + else if(this.turn == 'Down'){ + this.turn = 'Left'; + } + else if(this.turn == 'Left'){ + this.turn = 'Up'; + } + else if(this.turn == 'Right'){ + this.turn = 'Down' + } + } + + showAgent(){ + console.log(this.turn) + if(this.turn === "Up"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Up.png')"; + } + else if(this.turn === "Down"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Down.png')"; + } + else if(this.turn === "Right"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Right.png')"; + } + else if(this.turn === "Left"){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Left.png')"; + } + + } + + hideAgent(){ + document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = ""; + } + + +} + +class Field{ + constructor(x, y, isShelf, isOccupiedByAgent, costOfTravel){ + this.xField = x; + this.yField = y; + this.isShelf = isShelf; + this.isOccupiedByAgent = isOccupiedByAgent; + this.costOfTravel = costOfTravel; + } + + getParams(){ + let params = {}; + + xField = this.xField; + yField = this.yField; + isShelf = this.isShelf; + isOccupiedByAgent = this.isOccupiedByAgent; + costOfTravel = this.costOfTravel; + params = {xField, yField, isShelf, isOccupiedByAgent, costOfTravel} + + return params; + } +} + +//funckcje + +function createBoard(rangeX, rangeY){ + const board = []; + + for(let y = 0; y < rangeY; y++){ + const row = []; + for(let x = 0; x < rangeX; x++){ + let field = new Field(x, y, false, false, 1); + row.push(field) + } + board.push(row) + } + return board +} + +function showBoard(board){ + for(let y = board.length - 1; y >= 0 ; y--){ + document.getElementById("board").innerHTML += "
"; + + for(let x = 0; x < board[y].length; x++){ + document.getElementById("row-" + y).innerHTML += "
" + } + } +} + +let board = createBoard(10,10); let agent = new Agent(0,0, 'Right'); - -agent.showAgent(); - - - - - - - - - - - - - - - - + +function start(){ + showBoard(board); + agent.showAgent(); +}