Sunteți pe pagina 1din 6

Simularea unui robot care se deplasează printr-un

labirint

Rezumat. Labirintul este o construcție cu foarte multe încăperi și galerii în care


orientarea este dificilă, un fel de joc de inteligență care cere a găsi ieșirea dintr-o rețea
de linii întortocheate. În lucrarea aceasta se încearcă dezvoltarea unui simulator al
labirintului, printr-o metodă de rezolvare care presupune folosirea inteligenței umane
pentru finalizarea acestuia, depășind anumite obstacole care apar pe parcurs, totodată
lăsându-se o portiță către extinderea și perfecționarea programului. În lucrare se prezintă
și alte tipuri de labirint(ca de exemplu, jocurile copilăriei) cu scop informativ.

1. Conținut

1.1 Introducere

Am ales această temă din dorința de a ne autodepăși și de a învăța câteva lucruri despre
meseria de programator, prin prisma vechiului joc “Maze” din copilărie, pe care am
încercat să îl personalizăm aducându-l in tendințele prezentului.

1.2 Stadiul actual

Am ales să ne luăm inspirația dintr-o serie de


jocuri cunoscute care ne-au marcat copilăria, precum:
“Pac-Man”, “The Maze Runner” și
“Fireboy&Watergirl”.

În „Pac-Man”(Fig. 1), jucătorul trebuie să-l facă


pe „Pac-Man”, un disc galben, să se miște de-a
lungul unui labirint. Scopul este să mănânce toate
biluțele încercând în același timp să nu fie prins de
fantome/monștri. Pentru puncte bonus, fructele care
apar pot fi de asemenea mâncate. Când Pac-Man
înghite o bilă albă, fantomele capătă culoarea albastră
Fig. 1 Jocul « Pac-Man »
și pot fi înghițite. Printre avantajele acestui joc avem faptul că jocul are 256 de moduri de
rezolvare, că este disponibil pe toate platformele și că este într-o continuă perfecționare
datorată succesului pe care l-a dobandit de-a lungul timpului. Ca și dezavantaje regăsim
rezoluția slabă a versiunilor inițiale și faptul că ultimul nivel al jocului nu poate fi terminat
din cauza unei probleme apărute la crearea jocului.

Fig. 2 Jocul « Fireboy&Watergirl  »

În “Fireboy&Watergirl”(Fig. 2) există 2 jucători care trebuie să își sincronizeze


mișcările astfel încât să rezolve cât mai rapid și în mod eficient labirintul în care se află,
colecționând toate diamantele. Avantajele acestuia sunt că dezvoltă lucrul în echipă,
dezvoltă gândirea rațională, având totodată și o rezoluție bună pentru perioada în care a fost
creat și, desi oarecum învechit, atrage în continuare generațiile actuale, iar ca principal
dezavantaj avem că în timpul jocului pot aparea erori care duc la nesincronizarea
personajelor.

“The Maze Runner”(Fig. 3) este un joc cunoscut,


actual, plin de suspans, in care personajul trebuie sa
depășească obstacolele pe care le întâlnește de-a lungul
călătoriei. Avantajele acestuia sunt că: oferă
posibilitatea de a personaliza jocul printr-un avarat care
ne definește, este disponibil pe toate device-urile și
deasemenea are o grafică bună, însă dezavantajul său
principal este acela că deși este un joc actual, de
acțiune, acesta are o rezoluție care lasă de dorit.

Fig. 3 Jocul «  The Maze


Runner  »
1.3 Soluția proprie

Backtracking-ul este o tehnică utilizată pentru a rezolva probleme cu spațiu de căutare


mare, încercând sistematic și eliminând posibilitatile. Un exemplu standard de backtracking
este labirintul. Labirintul este exemplul cel mai des folosit pentru a ilustra backtracking-ul
recursiv. Exista mai multe metode prin care acesta se poate rezolva, precum:algoritmul
mouse-ului, regula mâinii strângi, o vedere recursiva a labirintului, algoritmul lui Tremaux,
etc.

Regula mâinii stângi mai este denumita și


“Metoda urmăririi peretelui” și este una dintre
cele mai cunoscute și utilizate metode. Pentru a
rezolva labirintul se pune mâna dreapta pe perete
și se păstrează acolo pâna se găsește o ieșire. Din
păcate, aceasta nu funcționează în cazul în care
exista bucle in labirint care înconjoară poziția
inițială, trimițând avatarul într-o buclă infinită.

Vederea recursivă a labirintului Fig. 4 Regula mâinii stângi


reprezintă împrarțirea acestuia în mai multe diviziuni, de obicei patru. Astfel, labirintul
original este rezolvabil numai dacă unul dintre cele patru labirinturi este rezolvabil. Fiecare
dintre acestea este mai simplu deoarece conține mai puține pătrate.

Fig. 5 Rezolvare labirint


Această lucrare se bazează pe algoritmul mouse-ului, având mai multe strategii de
rezolvare. La un moment dat, în labirint, am putea avea doua opțiuni de alegere a direcției.
O strategie poate fi încercarea de a se trece prin porțiunea “A” a labirintului dintr-o
intersecție. Dacă se ajunge la o înfundătură înainte de a găsi calea de ieșire, atunci se va
reveni la intersecție. In acest moment, se știe că porțiunea “A” nu conduce la ieșirea din
labirint, așa că se va alege porțiunea “B”. Dacă se încearcă toate alegerile și nu se găsește o
ieșire, atunci nu există nici o soluție a labirintului. Aceasta este o metodă trivială care poate
fi implementată de un robot foarte inteligent sau poate de un șoarece. S-a ales această
modalitate de rezolvare a labirintului punând accent pe creierul uman, în detrimentul unei
rezolvări directe, poate mai rapide, dar robotizate, deoarece se consideră că totul stă la baza
gândirii și rațiunii omului, care trebuie să o ținem mereu activă.

Astfel că programul nostru permite introducerea unor noi caracteristici de structură.Ca


de exemplu, implementarea unui robot care rezolvă singur labirintul. Prima dată când
robotul explorează labirintul, bineînțeles că va pierde mult timp "gândindu-se" la ce să facă
la orice intersecție. Odată ce robotul a găsit o soluție posibilă de labirint, ar trebui să-și
optimizeze soluția găsind "calea cea mai scurtă de la început până la sfârșit".În final,
robotul își găsește calea de ieșire dintr-un "labirint perfect cunoscut". Nu contează unde ați
pus-o în labirint, va găsi o "soluție".

public int m_PlayerNumber = 1; //Utilizat pentru a identifica care avatar aparține


acelui jucător. Acest lucru este stabilit de managerul acestui avatar.
public float m_Speed = 12f; //Cat de repede se deplasează înainte și înapoi.
public float m_TurnSpeed = 180f; //Cat de repede se întoarce in grade pe secundă.
public AudioSource m_MovementAudio; //Referință la sursa audio folosită pentru a
reda sunetele motorului.
public AudioClip m_EngineIdling; //Sunet din timpul staționării.
public AudioClip m_EngineDriving; //Sunet din timpul mișcării.

private void OnEnable ()


{
// Când avatarul este pornit,asigurați-vă că nu este cinematic.
m_Rigidbody.isKinematic = false;

// Resetați valorile inițiale.


m_MovementInputValue = 0f;
m_TurnInputValue = 0f;
}
private void OnDisable ()
{
//Când avatarul este oprit,setați-l la cinematic.
m_Rigidbody.isKinematic = true;
}

private void FixedUpdate ()


{
// Ajustați poziția și orientarea
Move ();
Turn ();
}

private void Move ()


{
//Creați un vector în direcția în care se află avatarul cu o magnitudine bazată pe
intrare, viteză și timpul dintre cadre.
Vector3 movement = transform.forward * m_MovementInputValue * m_Speed *
Time.deltaTime;
//Aplicați această mișcare la poziția rigidă a corpului.
m_Rigidbody.MovePosition(m_Rigidbody.position + movement);
//transform.position=transform.position+movement;
}
private void Turn ()
{
//Determină numărul de grade pe care trebuie să le întoarcă în funcție de intrare, de
viteză și de timp dintre cadre.
float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime;
//Vector3 m=new Vector3(0.0f,turn,0.0f);
//Faceți acest lucru într-o rotație pe axa y.
Quaternion turnRotation = Quaternion.Euler (0f, turn, 0f);
// Aplicați această rotație la rotirea rigidă a corpului.
//m_Rigidbody.MoveRotation (m_Rigidbody.rotation * turnRotation);
m_Rigidbody.MoveRotation (m_Rigidbody.rotation * turnRotation);
}}

1.4 Concluzii

În această lucrare au fost prezentate metodele cele mai folosite pentru rezolvarea
labirinturilor.
S-a exemplificat faptul că pornind de la cel mai simplu joc cu un labirint se poate
ajunge la un sistem complex care rezolvă labirintul automat.

2 Bibliografie
[1]
http://www.imst.pub.ro/Upload/Studenti/SSS_2016/lucrarile_sesiunii_stud_2016/IMPLEMENTAREA_ROBOTI
LOR_INDUSTRIALI.pdf -Aceesat la data de 09.05.2019, ora 18:16

[2] https://en.wikipedia.org/wiki/Maze_solving_algorithm -Accesat la data de 09.05.2019, ora 18:50

[3] https://www.instructables.com/id/Maze-Solver-Robot-Using-Artificial-Intelligence-Wi/ -.Accesat la data de


07.05.2019, ora 20:20

[4] https://prezi.com/zkque5gsrn-f/labirintul/ -Accesat la data de 04.05.2019, ora 10:19

[5] https://en.wikipedia.org/wiki/Maze -Accesat la data de 08.05.2019, ora 14:50

[6] https://ro.wikipedia.org/wiki/Pac-Man -Accesat la data de 05.05.2019, ora 09:41

[7] https://fbandwggame.fandom.com/wiki/Wiki_Content -Accesat la data de 02.05.2019, ora :15:00

[8] https://en.wikipedia.org/wiki/Maze_solving_algorithm#/media/File:Tremaux_Maze_Solving_Algorithm.gif
-Accesat la data de 09.05.2019, ora 19:36

S-ar putea să vă placă și