Robert - Adrian PUŞCAŞU - 'X si 0'

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

“X si 0” se joaca pe o tabla de 3 x 3 si este nevoie de doi jucatori.

   De obicei incepe jucatorul care reprezinta “X” (in cadrul proiectului meu acesta fiind Rosu). 
   Scopul jocului este ca un jucator sa obtina o linie, coloana sau diagonala.

Descriere generală

Pentru selectarea modului de joc se apasa unul din cele 3 butoane: stanga( mod normal, player vs player), sus (modul player vs bot mediocru), dreapta (modul player vs bot inteligent). Dupa alegerea modului de joc, se apasa butonul central si jocul incepe.Un player poate sa se deplaseze in 4 directii(sus,jos,dreapta,stanga).

Schema bloc:

Hardware Design

Led bicolor : 10 bucati , Butoane : 5 bucati , Rezistente 0.1k : 10 bucati , Fire conectoare , Placuta de test cu gaurele .

Software Design

Am folosit WinAVR și Notepad++. Am considerat că fiecare LED reprezintă o căsuță dintr-o matrice de 3×3. Jucătorul mută folosind butoanele într-una dintre cele patru direcții, iar când a decis unde să plaseze simbolul trebuie să apese Enter (butonul din mijloc). Mereu la prima mutare LED-ul se va aprinde verde. Din punct de vedere algoritmic, am reținut în matrice: 0 - LED selectat de roșu 1 - LED selectat de verde 2 - LED neselectat Pentru efectuarea mutării, rețin mereu poziția jucătorului, până când acesta își efectuează selecția și atunci o marchez ca ocupată. Pe scurt, se fac mutări pe matricea de LED-uri până când s-a apăsat Enter, moment în care LED-ul se aprinde în culoarea corespunzătoare și poziția este marcată cu 0 sau 1, în funcție de jucător.

Selectia modului de joc

Pentru a selecta modul de joc: player vs player(1), player vs bot bediocru(2), player vs bot inteligent(3), folosesc 3 din cele 5 butoane:

Pentru “1”: buton stanga (ledul corespunzator de pe placa de baza) Pentru “2”: buton sus (ledul din dreapta butoanelor in culoarea rosie) Pentru “3”: buton dreapta (ledul din dreapta butoanelor in culoarea verde) Pentru a porni jocul in modul dorit se apasa butonul central.

1. Modul de joc player vs player

Jocul porneste cu jucatorul 1 pentru selectie. Se va aprinde un led liber de pe matricea 3 x 3, urmand sa fie mutat in punctul dorit de jucator. Cand se apasa butonul din centru, ledul va ramane in acea pozitie. Matricea initiala are toate elementele egale cu 0. Cand jucatorul 1 a selectat un element, acel element din matrice va deveni 1. ( 0 reprezinta ledurile libere, 1 reprezinta ledurile jucatorului 1, 2 ledurile jucatorului 2). Acum jucatorul 2 va selecta si elemetul corespunzator ledului din matrice va deveni 2. Cu functia “check_win” verificam sa vedem daca avem acelasi elemente pe linie/coloana/diagonala. Daca avem, jocul se termina. In caz contrar, va fi egalitate.

2. Modul de joc player vs bot mediocru

Jocul porneste cu jucatorul 1 pentru selectie. Dupa ce acesta selecteaza ca si in modul “1”, bot-ul isi va alege mutarile aleator. Am folosit functia rand(). Pentru a nu avea aceleasi valori la fiecare pornire a jocului am folosit functia srand(), careia i-am atribuit ca parametru un intreg pe care il incrementez in “while(1)” corespunzator selectiei modului de joc. Astfel, la fiecare rulare a jocului voi avea un numar diferit. Am optat pentru acesata metoda deoarece nu dispuneam de functia “time” pe microcontroller.

3. Modul de joc player vs bot interligent

In acest mod, jocul porneste cu jucatorul 1 la selectie. Botul va face urmatoarea mutare.

Daca exista pericol din partea adversarului, vom muta astfel incat sa nu fie castigatoare mutarea acestuia. Daca botul are mutare castigatoare si exista pericol din partea adversarului, vom face mutarea noastra. Daca adversarul nu are mutare castigatoare, vom determina numarul maxim de leduri ce ne pot duce la succes pe linie/coloana/diagonala. (leduri deja aprinse de bot ( de exemplu “X”)). Daca numarul ledurilor aprinse este acelasi, vom muta unde sunt mai putine leduri neaprinse. (acolo unde sunt mai putine leduri aprinse din partea adversarului).

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

pm/prj2014/ddragomir/404.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0