Sunteți pe pagina 1din 45

Proiect de diplom

Universitatea Politehnic Timioara


Facultatea de Inginerie Hunedoara
Departamentul tiine Aplicate
Specializarea Informatic Industrial

PROIECT DE DIPLOM

Coordonator tiinific :
ef lucrri dr. Iordan Anca Elena
Absolvent
Papi Roxana Mihaela

Hunedoara
2015
1

Proiect de diplom

Cuprins
Introducere
Capitolul I: Ce este Java?
Medii de dezvoltare integrate
Compilare vs. Interpretare
Maina virtual Java
Particularitile limbajului Java
NetBeans
Interfaa grafic a utilizatorului
Capitolul II: Sudoku.Elemente Java utilizate
Problema ofierilor
Cum se aplic matematica n Sudoku
Cum rezolv un informatician Sudoku
Strategia mea
Metodele folosite
Elementele Java folosite n Sudoku
Capitolul III: Funcionarea jocului n imagini
Concluzii
Bibliografie

3
4
pag. 5
pag. 5
pag. 7
pag. 8
pag. 9
pag. 10
pag. 11
pag. 11
pag. 13
pag. 14
pag. 15
pag. 16
pag. 26
pag. 31
pag. 47
pag. 48

Proiect de diplom

Introducere

Sudoku este cea mai bun metod de a-i cre te coeficientul de inteligen .
tiai c?
Memoria i logica merg mn cnd jucai Sudoku: v folosi i memoria pentru a
memora locaia numerelor i logica pentru a v da seama unde trebuie puse acele
numere
Sudoku antreneaz gndirea logic
Exist studii tiiinifice care au demonstrate c Sudoku reduce riscul apari iei bolii
Alzeihmer
Dac jucai n fiecare zi Sudoku, v vei sim i mult mai concentra i pe parcursul zilei
ntrecnd efectul cafelei
Sudoku v menine creierul n form i v ajut s v contrenta i mai bine.
Am decis s cercetez acest subiect i de aceea am ales aceast aplica ie,
combinnd elemente de Java, pentru a-mi putea antrena creierul n fiecare zi.
Fie c suntei n metrou,n autobuz sau a teptnd avionul acest joc este un exerci iu
bun pentru a v menine creierul n form i astfel reduce i riscurile apari iei oboselii sau
chiar a unor boli.
n cele ce urmeaz am descris mai bine cum am construit aceste joc,folosind
elemente Java spernd c v voi capta aten ia i v voi trezi curiozitatea n ceea ce
privete efectele dovedite tiinifice ale logicii acestui joc.

Proiect de diplom
Capitolul I
Ce este Java?

Java este
un limbaj
de
programare orientat-obiect, puternic tipizat,
conceput de ctre James Gosling la Sun
Microsystems (acum
filial Oracle)
la
nceputul anilor 90, fiind lansat n 1995. Cele
mai multe aplicaii distribuite sunt scrise n
Java, iar noile evoluii tehnologice permit
utilizarea sa i pe dispozitive mobile gen
telefon, agenda electronic, palmtop etc. n
felul acesta se creeaz o platform unic, la
nivelul programatorului, deasupra unui mediu
eterogen extrem de diversificat. Acesta este
utilizat n prezent cu succes i pentru
programarea aplicaiilor destinate intraneturilor.
Limbajul mprumut o mare parte din
sintax de la C i C++, dar are un model al
obiectelor mai simplu i prezint mai puine
faciliti de nivel jos. Un program Java
compilat, corect scris, poate fi rulat fr
modificri pe orice platform care e instalat o
main virtual Java (englez Java Virtual
Machine, prescurtat JVM). Acest nivel de
portabilitate (inexistent pentru limbaje mai
vechi cum ar fi C) este posibil deoarece
sursele
Java
sunt
compilate
ntr-un
format standard numit
cod
de
octei
(englez byte-code) care este intermediar ntre
codul
main
(dependent
de
tipul
calculatorului) i codul surs.
Maina virtual Java este mediul n care se execut programele Java. n prezent,
exist mai muli furnizori de JVM, printre care Oracle, IBM, Bea, FSF. n 2006, Sun a
anunat c face disponibil varianta sa de JVM ca open-source.
Exist 4 platforme Java furnizate de Oracle:

Java Card - pentru smartcard-uri (carduri cu cip)

Java Platform, Micro Edition (Java ME) pentru hardware cu resurse limitate, gen
PDA sau telefoane mobile,

Proiect de diplom

Java Platform, Standard Edition (Java SE) pentru sisteme gen workstation, este
ceea ce se gsete pe PC-uri,

Java Platform, Enterprise Edition (Java EE) pentru sisteme de calcul mari,
eventual distribuite.

Medii de dezvoltare integrate


Un IDE (englez integrated development environment) este un mediu de lucru care
permite dezvoltarea de aplicaii folosind anumite limbaje de programare (cele suportate de
IDE, adic cele pentru care a fost creat acel IDE). Pentru Java sunt folosite urmtoarele:

JCreator

Eclipse

NetBeans

BEA Workshop

BlueJ

CodeGuide

DrJava

IntelliJ IDEA

JBuilder

JDeveloper

KDevelop (platform GNU/Linux, Cygwin)

Compilare vs Interpretare
nainte de a prezenta mecanismul de ma in virtual, voi face o scurt descriere a
metodelor de execuie a programelor pentru diferite limbaje de programare.
5

Proiect de diplom
Procesorul unui calculator (sau a unei ma ini de calcul n general) poate executa un
numr fix de instruciuni cunoscute procesorului, numit set de instruciuni. Un program
poate fi scris folosind direct aceste instruciuni (mnemonicile lor), adic n limbaj de
asamblare, sau ntr-un limbaj de nivel nalt. Exist avantaje i dezavantaje pentru ambele
variante.
Un program scris n limbaj de asamblare nu este deloc portabil, deci nu poate fi
executat dect pe maina pentru care a fost scris, adic depinde de setul de instruc iuni pe
care procesorul tie s l execute, de sistemul de operare care ruleaz pe ma in, de
perifericele prezente, etc. Alt dezavantaj este c pentru o func ionalitate relativ simpl a
programului, trebuie scris o cantitate mult mai mare de cod dect ntr-un limbaj de nivel
nalt (cum ar fi C sau Java), lucru care face ca mentenan a codului, ca i posibilit ile de
dezvoltare s fie mult limitate. Pe de alt parte, un programator cu experien poate face
cele mai bune optimizri n limbaj de asamblare, el avnd control absolut asupra tuturor
resurselor disponibile.
Totui, pentru aplicaii foarte complexe, este necesar un compromis ntre
performan i dimensiunea/ complexitatea codului. Astfel au aprut limbaje formale, de
nivel nalt, care sunt mult mai intuitive, mai u or de nv at i de n eles, i care
abstractizeaz o mare parte din straturile de nivel jos ale unei ma ini de calcul (setul de
instruciuni, harta memoriei, structura stivei de execu ie, alocarea memoriei, etc.).
Avantajele sunt uriae, ncepnd cu simplitatea sintactic i semantic a unui program i
terminnd cu faptul c apare acum un anumit grad de portabilitate. Aceast portabilitate
apare datorit faptului c limbajul n sine este unic i un algoritm este descris n acela i fel
pentru orice main, dar astfel apare i problema: din moment ce un procesor nu tie s
execute dect setul lui de instruciuni, cum se face tranzi ia de la un program scris ntr-un
limbaj de nivel nalt generic, la limbajul de asamblare? Exist dou solu ii: interpretarea i
compilarea.

Interpretarea

Interpretarea unui program se face folosind un alt program, numit interpretor. Acesta
parseaz codul surs al programului pe care dori i s-l executa i i l transform n timpul
rulrii n cod main. Avantajul acestui sistem este c exist posibilitatea generrii de
6

Proiect de diplom
program dinamic, la runtime, adic la momentul rulrii acestuia. Un exemplu de limbaj
interpretat este Javascript. Acesta accept construc ii de forma:

eval("x=10;y=20;document.write(x*y)");
document.write("<br />" + eval("2+2"));
document.write("<br />" + eval(x+17));

Se vede faptul c funcia eval ia ca argument un ir de caractere care este construit


dinamic, i apoi evaluat ca o expresie a limbajului. Acest lucru nu este posibil n cazul
programelor compilate. Dezavantajul major al programelor interpretate este viteza redus
de execuie (n timpul rulrii se face translaia de la limbajul de nivel nalt la codul ma in).
Compilarea

Compilatorul este un program care are ca rol, traducerea unui limbaj n alt limbaj. n
principiu, acesta este un program de traducere, dar nu ntre dou limbi, ci ntre dou
limbaje formale. Diferena dintre limb i limbaj formal este c acesta din urm are un set
de reguli stricte care fac traducerea riguroas posibil pentru un algoritm. Spre deosebire
de interpretor, compilatorul face traducerea static, adic la ceea ce se nume te compiletime, ntre limbajul de nivel nalt i limbajul de asamblare a unui procesor specific. Odat
programul translatat n limbaj de asamblare, apoi n cod ma in cu ajutorul unui asamblor
i al unui linker, acesta este rulat direct pe procesor, fr alte programe ajuttoare.

Maina Virtual Java


Programele Java sunt compilate i apoi interpretate. Motivul pentru acest sistem este
introducerea n flow-ul de execuie a unui strat suplimentar, numit Maina Virtual Java.
Dup cum i spune i numele, JVM este un procesor, dar nu unul real, fizic, realizat pe
siliciu, ci un procesor virtual, simulat de procesorul gazd. n esen , ma ina virtual este
un alt program. Exist dou mari avantaje pentru utilizarea acestui concept:
7

Proiect de diplom

portabilitate - maina virtual Java are o


specificaie clar, i fiecare implementare de
main virtual este identic, indiferent pe ce
procesor ruleaz; asta implic faptul c odat
programul compilat pentru JVM, acesta va
rula pe orice implementare, adic pe orice
procesor gazd i pe orice sistem de
operare;

securitate - layer-ul mainii virtuale se comport ca un sandbox, astfel nct execuia


programului se reflect n cea mai mare msur n interiorul ma inii virtuale, i nu n
maina real, oferind un grad ridicat de protec ie.

n prima faz, programul iniial, care este stocat ntr-un fi ier cu extensia .java, este
compilat, folosind compilatorul Java (javac) i este generat fiierul executabil pentru JVM,
care are extensia .class. Acest fiier este ncrcat de ctre ma ina virtual ( java) i este
interpretat.

Particularitile limbajului Java


Cu toate c sintaxa limbajului Java provine n cea mai mare msur din C, exist
unele particulariti, n special legate de modul de acces la memorie, care este
fundamental diferit:

n Java nu exist pointeri, doar referine; implicit, nu exist aritmetica pointerilor;

runtime checking - un sistem care verific accesul la locaiile de memorie ntr-un


vector i arunc excepii atunci cnd se ncearc accesul n zone nepermise;

garbage collection - programatorul nu trebuie s in seama de memoria alocat, o


zon de memorie este eliberat n mod automat atunci cnd nu mai exist referin e
active ctre ea;

distributed computing - Java pune la dispoziie n bibliotecile implicite clase care


faciliteaz conectivitatea (java.net) i execuia distribuit (java.rmi);

multithreading - Java pune la dispoziie n bibliotecile implicite clase care faciliteaz


execuia concurent a mai multor metode i sincronizarea acestora.

Proiect de diplom
n plus fa de aplicaiile de sine stttoare ( standalone), n Java exist suport
pentru un tip de aplicaii numite applet-uri, care se execut n interiorul unui browser de
web. Acest lucru faciliteaz dezvoltarea aplica iilor interactive pe web.
Totui, poate cel mai important avantaj al limbajului Java, este setul de clase puse la
dispoziie de Oracle, numit generic Application Programming Interface, care con ine o
vast colecie de funcii deja implementate, gata de a fi folosite pentru o gam larg de
aplicaii.

NetBeans IDE este un program destul de avansat ce ofer o mul ime de func ii utile.
Lucrul cu fiierele se face prin intermediul unui proiect, astfel toate fi ierele sunt asociate
unui proiect iar modul de lucru este mult mai organizat.
Este o platform de dezvoltarre software creat n Java.Platforma NetBeans ce
permite aplicaiilor s fie dezvoltate pornind de la un pachet modular de component
software numite module.Aplicaiile create pe platform NetBeans, incluznd mediul de
dezvoltare integrat(IDE), se pot extinde i de ctre al i utilizatori.
IDE a fost iniial creat pentru dezvoltarea n Java dar suport i alte limbaje de
programare cum ar fi: PHP,C/C++ i HTML 5.
NetBeans poate rula pe Microsoft Windows,MAC OS X,LINUX,SOLARIS.

Platforma NetBeans
Poate instala module n mod dinamic.Orice aplica ie include modulul Centru de
Update-uri ce permite utilizatorilor aplica iilor s descarce update-urile existente i
elementele noi direct n aplicaia ce ruleaz.Reinstalnd o alt variant sau alte upgrade-uri
nu presupune reinstalarea ntrgii aplica ii.
Platforma ofer servicii ce pot fi reutilizate,permi nd dezvoltatorilor ce lucreaz cu
NetBeans s i mbuntteasc aplicaia.Printre aceste aspecte se numr:
management-ul interfeei de ctre utilizator
management-ul setrilor de ctre utilizator
management-ul salvrilor datelor
NetBeans Visual Library

NetBeans IDE
Este o aplicaie de tip open-source.NetBeans IDE permite dezvoltarea tutror
aplicaiilor JavaJava SE,Java ME,welo i a aplica iilor mobile.Printre caractersitici se
numr un system de proiecte bazate pe Ant,support Maven i controlul versiunii.
Toate funciile provin din module.Fiecare modul are o func ie bine definit cum ar fi in cazul
limbajului Java editarea.NetBeans conine toate modulele de care Java are nevoie pentru a
9

Proiect de diplom
rula dintr-o singura descrcare,permind utilizatorilor folosirea aplica iei imediat dup
descarcare.Modulele mai permit aplicaiei NetBeans s fie extinsa.

Interfaa Grafic a Utilizatorului(GUI)


Cunoscut anterior sub numele Proiectul Matisse, GUI permite utilizatorilor s
creeze i s editeze Swing GUI prin poziionarea componentelor GUI.

10

Proiect de diplom

Capitolul II
Sudoku.Elemente Java utilizate

Sudoku (din japonez , s - cifr i


, doku - unic), este un joc n form de gril
inventat n 1979 i inspirat de ptratul latin i de
problema celor 36 ofieri a lui Leonhard Euler.
Scopul jocului este de a umple aceast gril cu
cifrele de la 1 la 9 respectnd anumite condi ii, cu
unele cifre fiind de la nceput dispuse n gril.
Grila jocului este un ptrat de nou pe nou
csue, subdivizat n tot attea ptrate identice,
numite regiuni. Regula jocului este simpl: fiecare
rnd, coloan sau regiune nu trebuie s con in
dect o dat cifrele de la unu la nou. Formulat
altfel, fiecare ansamblu trebuie s conin cifrele
de la unu la nou o singur dat.
Interesul jocului consist n simplitatea
regulilor sale i n complexitatea soluiilor sale.
Grilele publicate au de obicei un nivel de
dificultate indicat, iar editorul are posibilitatea s indice i un timp de rezovare probabil. Cu
toate c, n general, grilele ce con in mai multe cifre completate sunt mai u oare, inversul
nu este n totdeauna adevrat. Dificultatea veritabil a jocului rmne totu i n a gsi suita
exact a cifrelor rmase.

11

Proiect de diplom
Problema ofierilor
n 1782, matematicianul elveian Leonhard Euler i
imagineaz urmtoarea problem ntr-o gril. Unii atribuie
paternitatea Sudokului elveianului, cu att mai mult cu ct
munca lui Euler consista n studiul ptratelor latine i teoria
grafurilor.
Problema ofierilor se poate enuna astfel: fie ase
regimente diferite, fiecare regiment posednd ase ofi eri de
grade diferite. Se cere s se plaseze cei 36 ofi eri ntr-o gril
de 6 x 6, fiecare ofier ocupnd cte csu, n a a fel c
fiecare rnd i fiecare coloan s conin toate gradele i
toate regimentele.
Legtura ntre Sudoku i problema celor 36 de ofi eri este condi ia care mpiedic
repetiia unui acelai element n gril, ajungndu-se n final tot la un joc care se folose te
de principiul ptratului latin (combinarea a dou ptrate latine n cazul ptratului grecolatin, ptrat latin subdivizat n mai multe regiuni n cazul Sudoku).
Chiar dac grilele clasice sunt cele mai obi nuite, exist mai multe variante:

grile de 44 care conin regiuni de 22 (n general pentru copii)

grile de 55 care conin regiuni n form de pentamino i care au fost publicate sub
numele de Logi-5

grile de 66 care conin regiuni de 23 (propus la Campionatului Mondial de


Puzzle)

grile de 77 cu ase regiuni n form de hexamino i o regiune despr it (propus


la Campionatului Mondial de Puzzle)

grile de 99 cu regiuni n form de polyomino

grile de 1616 cu regiuni de 44 (numite Number Place Challenger i publicate


de Dell, sau numite uneori Super Sudoku)

grile de 2525 cu regiuni de 55 (numite Sudoku the Giant i publicate de Nikoli)

12

Proiect de diplom

Exist o variant care n plus impune ca cifrele din diagonalele principale s fie
unice. Number Place Challenger, menionat anterior, i Sudoku X din Daily Mail, o gril
de 66, aparin acestei categorii

grile de 88 coninnd regiuni de 24 i 42, i unde rndurile, coloanele i


diagonalele principale conin o cifr unic

O meta-gril compus din cinci grile de 99 n quincunx care se ncalec la col uri
este publicat n Japonia sub numele de Gattai 5 (care nseamn "cinci fuzionai")
sau Samura. n ziarul The Times, aceast form est numit Samurai Su Doku

Grile cu regiuni rectangulare: dac o regiune este de dimensiunile LiniixColoane


csue, grila global se descompune n ColoanexLinii regiuni ; valorile urmnd a fi
completate sunt cuprinse n intervalul de la 1 la ColoanexLinii

Dion Church a creat o gril 3D, pe care Daily


Telegraph a publicat-o n mai 2005.

Au fost publicate de asemenea, variante alfabetice, care folosesc litere n loc de


cifre. The Guardian le numete Godoku i le descrie ca fiind diabolice. Knight
Features prefer numele de Sudoku Word . Wordoku al lui Top Notch arat literele, n
dezordine, ale unui cuvnt care pleac de la col ul stnga sus i ajunge n col ul dreapta
jos. Un juctor avnd o bun cultur poate s l gseasc i s i foloseasc descoperirea
pentru rezolvarea Sudokului.
Code Doku conceput de Steve Schaefer conine o fraz complet, pe cnd Super
Wordoku al lui Top Notch conine dou cuvinte de nou litere, fiecare gsindu-se pe una
din diagonalele principale. Aceste jocuri nu sunt considerate de ctre pasiona i ca fiind
adevrate, pentru c logica nu este suficient pentru a le rezolva, chiar dac au o solu ie
unic. Top Notch affirm c aceste jocuri sunt concepute de o a a manier nct s
mpiedice soluiile generate de ctre programe de rezolvare automat.
Cum se aplic matematica n Sudoku?
13

Proiect de diplom
E simplu! Este evident c numrul de grile este mai mic dect numrul de moduri de
a plasa nou cifre 1, nou cifre 2, ... nou cifre 9 ntr-o gril de 81 de csu e. Numrul
grilelor este deci mai mic dect

ntr-adevr, n aceast numrtoare, nu se ine cont de nici o constrngere de


unicitate.
Numrul grilelor complete posibile este inferior numerelor ptratelor latine de latur
9.
n sfrit, numrul grilelor complete posibile este inferior lui
care ar corespunde
numrului de feluri de a construi regiunile fr a ine cont de constrngerile liniilor i ale
coloanelor.
n 2005, Bertram Felgenhauer i Frazer Jarvis au demonstrat c acest numr de
grile este:
sau
Ultimul factor este un numr prim. Acest rezultat a fost demonstrat cu ajutorul unei
cutri exhaustive. Frazer Jarvis a simplificat apoi considerabil demonstra ia cu ajutorul
unei analize detaliate. Demonstraia a fost validat de manier independent de ctre Ed
Russell. Jarvis i Russell au artat c n innd cont de simetrii, exist 5.472.730.538
soluii.
Problema cu plasarea cifrelor pe o gril de n 2n2 cuprinznd nn regiuni este
demonstrat ca fiind NP-complet. Aceasta nseamn c este absolut imposibil (s-a
demonstrat de asemenea c nu depinde de nivelul nostru actual de cuno tin e) de a gsi
un algoritm eficace (polinomial n mrimea grilei i determinist) pentru a rezolva toate
grilele de sudoku de fr limite de mrime (vede i teoria complexitii pentru mai multe
detalii n ceea ce privete NP-completitudinea). n limbaj obi nuit, aceasta nseamn c
exist grile de sudoku pentru care cutarea solu iei cere la anumite momente folosirea
metodei backtracking . Pe grilele de mrime finit dat, rezolvarea poate s se fac cu
ajutorul unui automat finit care cunoate ansamblul arborelui de joc. Backtracking-ul
(refcnd calea) consist n a face o presupunere fr ca aceasta s fie justificat i n a
continua cutarea soluiei, existnd posibilitatea revenirii la pasul anterior i schimbarea
presupunerii fcute dac aceasta a dus la imposibilitatea continurii.
Rezolvarea unui Sudoku poate fi formalizat asemenea problemei colorrii
grafurilor. Scopul, n versiunea clasic a jocului, este aceea de a aplica 9 culori pe un graf
dat, plecnd de la o colorare parial (configura ia ini ial a grilei). Acest graf posed
81 vrfuri, unul pentru fiecare celul. Fiecare poate fi etichetat cu un cuplu ordonat (x, y),
unde x i y sunt ntregi cuprini ntre 1 i 9. Dou vrfuri distincte etichetate cu (x, y) i (x,
y) sunt legate printr-o margine dac i doar dac:

x = x sau,

14

Proiect de diplom

y = y sau,

x/3 = x/3 i y/3 = y/3


Grila se completeaz atribuind un ntreg ntre 1 i 9 pentru fiecare vrf, astfel nct toate
vrfurilor legate printr-o margine s nu aib comun acela i ntreg .

Cum rezolv un informatician Sudoku?


Pentru un informatician, a programa cutarea unei soluii prin intermediul
contingenelor sau multiplelor contingen e (a a cum se cere pentru problemele cele mai
dificile) este o sarcin relativ simpl. Un astfel program imit un juctor uman care caut o
soluie fr s caute la ntmplare.
Este de asemenea relativ simplu conceperea unui algoritm de cutare
prin backtracking. De obicei, este suficient ca algoritmul s aleag 1 pentru prima celul,
apoi 2 pentru urmtoarea, atta timp ct nu apare nici o contradic ie. Cnd apare o astfel
de contradicie, algoritmul ncearc o alt valoare pentru csu a care duce la contradic ie.
O dat epuizate toate posibilitile pentru aceast csu , algoritmul "revine" i rencepe cu
penultima celul.
Chiar dac acest algoritm nu este foarte eficace, el va gsi o solu ie dac dispune
de suficient timp. O gril de 99 este de obicei rezolvat n mai pu in de trei secunde de
un computer modern care are acces la un interpretor, i n mai puin timp cu un limbaj
compilat.
Un program mai eficace se va baza pe cifre candidate poten iale pentru fiecare
csu, eliminnd cifrele candidat imposibile pn cnd rmne o singur cifr. Cunoscnd
aceast cifr, algoritmul poate gsi o alt cifr pentru o alt csu , i tot a a.
O alternativ la backtracking este aceea de a recurge la metodele preconizate
de programarea logic, aa cum este implementat de Prolog i de Scheme. n acest caz,
se furnizeaz programului constrngerile grilei (o cifr pe rnd, pe coloan i pe regiune;
cifrele descoperite); acest program va lua singur deciziile pentru rezolvarea problema.
tiind c majoritatea grilelor au o soluie unic, cutarea va avea cu siguran succes.
Donald Knuth a pus la punct un algoritm care face apel la listele dublu nln uite, i care se
pare c este foarte eficace pentru rezolvarea acestui tip de problem. S-a demonstrat c
acest algoritm este indicat pentru rezolvarea unui Sudoku, durnd doar cteva
milisecunde. Datorit vitezei sale, este acum preferat de majoritatea programatorilor.

Strategia mea

15

Proiect de diplom

Programul este redus la o serie de func ii care pot fi redate cu ajutorul GUI. Interfa a
GUI este prevzut cu 5 butoane,o imagine mare i pozi ionarea unui mouse.Este
prevzut pentru a apela funciile din central codului-surs.
n Windows am folosit VisualBasic IDE pentru a reda GUI. Func iile sunt redate prin
compilarea codului-surs printr-un ansamblu DLL.
Imaginea SUDOKU const dintr-un fiier necomprimat de tip bitmap n formatul
Windows BMP.Aceasta poate fi afiat n Windows.
Programul este simplu,constnd din:
Simpla GUI
Codul-surs
Nu necesit compilare individual pentru fiecare platfotm capabil s l suporte.
Avantajul acestui program este c acest cod poate fi rulat direct pe orice platform fr
nicio observaie sau vreo modificare.
Se poate folosi i Eclipse.Dar am folosit JavaFoundationClasses(JFC) i
SWING.Codul poate fi scris i modificat cu un editor de texte folosindu-se javac pentru
compilare i java pentru a rula aplicaia.

Metodele folosite
Sudoku este un aranjament special de 9 X 9 ptrate ale numerelelor de la 1 la 9.
Programul funcioneaz prin selectarea aleatorie a unui numr X(de la 0 la 8), a unui
numr Y(de la 0 la 8) i a unui numr oarecare dispus n intervalul [1,9].
Primul numr va fi pus n poziia X i Y. Pentru a arta c acest numr a fost
selectat i-am adugat nc 10.Astfel n loc de numere de la 1 la 9 vor fi numere de la 11 la
16

Proiect de diplom
19.Fiecare cellalt numr din acea pozi ie va fi egalat cu 0 deoarece el nu va mai putea fi
selectat.
De exemplu, dac selectez numrul 5 va aprea 0000150000 n locul irului
123456789.
n continuare fiecare numr de 5 din rndul X selectat l pun pe 0 pentru a nu mai
putea fi selectat.
Acest pas trebuie repetat pentru coloana Y selectat i pentru ptratul de 3 X 3
selectat.
Cu numerele urmtoare,trebuie verificat c nu au fost selectate(cele de la 11 la 19)
sau c nu pot fi selectate(egalate cu 0).
Pe msura ce ruleaz, numerele selectate vor rmne singurele din ptratele de 3 X
3.i aceste numere vor rmne unicele ce vor putea fi selectate.Aplica ia va selecta orice
numr din irul acesta.
La fiecare ncercare a codului numerele nu vor mai putea fi selectate.Astfel numrul
din ptratul de 3 X 3 va fi 000000000. Atunci programul a terminat i voi spune c am ajuns
n punctual final al secvenei.Sudoku se va termina.
Va ncepe urmtoarea secven Sudoku.Se va ajunge la cele 9 X 9 posibilt i pn
cnd acestea au fost excluse i atunci voi spune c am ajuns la un SUDOKU complet si
fr goluri.
La rularea codului va aprea urmtoarea imagine:

Principal
genereaz vizulizarea jocului
panoul central ce conine butoanele i pentru vizualizarea jocului
La nceput se declar variabilele pentru rezolvarea jocului,pentru a re ine pa ii parcur i n
soluionare,pentru a stabili limea i nal imea panoului central.
public static byte[][] joc = new byte[729][82];
public static byte pas = 0;
17

Proiect de diplom
private static final int latime = 777;
private static final int inaltime = 636;
Clasa pentru vizualizarea jocului ShowGUI ncepe prin iniializarea pailor de parcurgere a
jocului cu 0 deoarece niciun numar nu a fost selectat.Se afi eaz careul Sudoku dear
nainte de asta am fixat limea,nl imea i pozi ia cursorului.Se fixeaz imaginea de
fundal pe negru peste care se adaug careul Sudoku pe care l-am construit.
Strategie.start(joc);
final byte border = 14;
JFrame f = new JFrame("Principal");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage image = null;
try {
image = ImageIO.read(new File("joc.png"));
} catch (IOException e) {
}
f.setResizable(false);
f.setIconImage(image);
f.setSize(latime, inaltime);
f.setLocation(0, 0);
f.setLayout(new BorderLayout());
f.add(new PanouS(new Dimension(latime,border)), BorderLayout.NORTH);
f.add(new PanouS(new Dimension(latime,border)), BorderLayout.SOUTH);
f.add(new PanouS(new Dimension(border,inaltime)), BorderLayout.EAST);
f.add(new PanouS(new Dimension(0,inaltime)), BorderLayout.WEST);
VizualizareJoc dp =new VizualizareJoc();
dp.setBackground(Color.BLACK);
f.add(dp, BorderLayout.CENTER);
f.setVisible(true);
Ultima clas sic ea principal este cea n care se apeleaz func ia ShowGUI i o ruleaz
avnd ca rezultat afisarea careului pe fundalul negru dup care se opre te rularea GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
vizualizareInterfata();

Vizualizare Joc
Conine panoul central.Are 6 butoane pe partea stng i o regiune desenat pentru
a viazualiza careul Sudoku.
18

Proiect de diplom
Am creat panoul de afiare.Am fixat careul principal Sudoku la 557 pixeli l ime,580
pixeli nlime i butoanele la 200 pixeli l ime.Am stabilitt culorile liniilor groase,sub iri i a
numerelor.
private static final long versiune1 = 1L;
private int latime = 557;
private int inaltime = 580;
private int latimeButoane = 200;
private final Color LB = new Color(0xAD,0xD8, 0xE6);
private final Color DB = new Color(0x1E,0x90, 0xFF);
private final Color P = new Color(0x80,0, 0x80);
Am continuat prin a construi panoul de vizualizare Sudoku dup care am adugat
cursorul mouse-ului. Procedura jocului ncepe prin a fixa cursorul pe coordonatele
numrului ce urmeaz a fi selectat.
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
selectareNumar(e.getX(),e.getY());
}
});
this.setLayout(new BorderLayout());
Urmtorul pas a fost s creez butoanele. Am setat nl imea,l imea i fundalul. Am
denumit butoanele pentru a permite utilizatorilor aplica iei s n eleag mai bine structura.
JPanel pb = new JPanel();
pb.setPreferredSize(new Dimension(latimeButoane,inaltime));
pb.setBackground(LB);
FlowLayout FL = new FlowLayout();
FL.setVgap(55);
FL.setHgap(100);
pb.setLayout(FL);
Butoane EYS = new Butoane("Creaza Sudoku Nou", "EYS");
EYS.addActionListener(this);
pb.add(EYS);
Butoane SHS = new Butoane("Dificultate ridicata", "SHS");
SHS.addActionListener(this);
pb.add(SHS);
Butoane SMS = new Butoane("Dificultate medie", "SMS");
SMS.addActionListener(this);
pb.add(SMS);
19

Proiect de diplom
Butoane SES = new Butoane("Dificultate redusa", "SES");
SES.addActionListener(this);
pb.add(SES);
Butoane GBS = new Butoane("Sterge ultima miscare", "GBS");
GBS.addActionListener(this);
pb.add(GBS);
Butoane STS = new Butoane("Solutii", "STS");
STS.addActionListener(this);
pb.add(STS);
this.add(pb,BorderLayout.WEST);
Urmeaz selectarea numerelor din careurile de 3 X 3. Ele sunt situate ntr-un
system de coordinate xOy fiecare ax avnd numere de la 0 la 8. Pe msur ce un numr
este selctat, poziia lui va fi notat. n felul acesta numrul nu se repet evitnd apari ia
erorilor. Exist 2 variabile ce numr selctarea pozi iilor numarPozX i numarPozY de pe
cele 2 axe. Cnd aceste variabile ating valoarea maxima,numerele nu mai pot fi selectate
deoarece toate pobilitile au fost eliminate. Dac sunt selectate butoanele, comenzile
acestora se vor apela ntr-o structur IF.
int numarPozitie[] = {3,63,124,187,248,309,372,433,494};
final byte numarPozY = 19;
if( x < latimeButoane + numarPozitie[0])
return;
x -= latimeButoane - numarPozitie[0];
byte count;
byte pozitieX = 0;
for(count = 0; count < 9; count++)
{
if(x > numarPozitie[count])
pozitieX = count;
}
byte pozitieY = 0;
for(count = 0; count < 9; count++)
{
if(y > numarPozitie[count])
pozitieY = count;
}
byte pozitie = (byte) (pozitieX + pozitieY*9);
byte numarX = 0;
x -= numarPozitie[pozitieX];
for(count = 0; count < 3; count++)
{
if(x > numarPozY*count)
20

Proiect de diplom
numarX = count;
}
byte numarY = 0;
y -= numarPozitie[pozitieY];
for(count = 0; count < 3; count++)
{
if(y > numarPozY*count)
numarY = count;
}
byte numar = (byte) (numarX + numarY*3);
Principal.pas = Strategie.select(Principal.joc, numar, pozitie, Principal.pas);
repaint(latimeButoane,0, latime,inaltime);
}
public Dimension getPreferredSize()
{
return new Dimension(latime + latimeButoane,inaltime);
}
protected void paintComponent(Graphics g)
{
final byte mas = 24;
final byte nrX = 11;
final byte nrY = 54;
final byte marime = 59;
final byte pnrX = 4;
final byte pnrY = 18;
final byte numarPozX = 20;
final byte numarPozY = 19;
final int masMesajX = 96;
final int masMesajY = 574;
final int masnrX = 211;
final int masnrY = 574;
int liniiMari[] = {0, 184, 369, 554, 577};
int liniiMici[] = {62, 123, 247, 308, 432, 493};
int numarPozitie[] = {3,63,124,187,248,309,372,433,494};
Font fontSelected = new Font("SansSerif", Font.ROMAN_BASELINE, 50);
Font fontmas = new Font("SansSerif", Font.ROMAN_BASELINE, 20);
Font fontPencil = new Font("SansSerif", Font.ROMAN_BASELINE, 20);
super.paintComponent(g);
g.setColor(DB);
21

Proiect de diplom
g.setFont(fontPencil);
byte count;
for(count = 0; count < 5; count++)
g.fillRect(0, liniiMari[count], latime + latimeButoane, 3);
for(count = 0; count < 6; count++)
g.drawLine(0, liniiMici[count], latime + latimeButoane, liniiMici[count]);
g.fillRect(liniiMari[0] + latimeButoane , 0, 3, inaltime);
g.fillRect(liniiMari[1] + latimeButoane , 0, 3, inaltime - mas);
g.fillRect(liniiMari[2] + latimeButoane , 0, 3, inaltime - mas);
g.fillRect(liniiMari[3] + latimeButoane , 0, 3, inaltime);
for(count = 0; count < 6; count++)
g.drawLine(liniiMici[count] + latimeButoane, 0, liniiMici[count] + latimeButoane,
inaltime -mas);
g.setFont(fontmas);
g.drawString("Miscarea
in rezolvarea careului", masMesajX + latimeButoane,
masMesajY);
g.drawString(String.valueOf(Principal.pas), masnrX + latimeButoane, masnrY);
byte numarcount;
for(numarcount = 0; numarcount < 81; numarcount++)
{
g.setColor(DB);
byte numarNul = 0;
byte outercount;
for(outercount = 0; outercount < 3; outercount++)
{
for(count = 0; count < 3; count++)
{
byte creion = Principal.joc[count + outercount*3 + numarcount*9][ Principal.pas];
if(creion > 0)
{
if(creion < 10)
{
g.setFont(fontPencil);
g.drawString(String.valueOf(creion ), numarPozitie[numarcount%9] +
(count*numarPozX) + pnrX + latimeButoane, numarPozitie[numarcount/9] +
outercount*numarPozY + pnrY);
}
else
{
g.setFont(fontSelected);
g.drawString(String.valueOf(creion - 10), numarPozitie[numarcount%9] +
latimeButoane + nrX, numarPozitie[numarcount/9] + nrY);
}
22

Proiect de diplom
}
else
numarNul += 1;
}
}
if(numarNul == 9)
{
g.setColor(P);
g.fillRect(numarPozitie[numarcount%9] + latimeButoane,
numarPozitie[numarcount/9], marime, marime);
}
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand() == "EYS")
Principal.pas = 0;
else if(e.getActionCommand() == "SHS")
{
Strategie.incercarisudoku(Principal.joc, (byte) 0);
Principal.pas = 25;
}
else if(e.getActionCommand()== "SMS")
{
Strategie.incercarisudoku(Principal.joc, (byte) 0);
Principal.pas = 35;
}
else if(e.getActionCommand() == "SES")
{
Strategie.incercarisudoku(Principal.joc, (byte) 0);
Principal.pas = 45;
}
else if(e.getActionCommand() == "STS")
{
Strategie.incercarisudoku(Principal.joc, Principal.pas);
}
else if(e.getActionCommand() == "GBS")
{
if(Principal.pas > 0)
Principal.pas -= 1;
}
repaint(latimeButoane,0, latime,inaltime);
}

PanouS
23

Proiect de diplom
Creaz marginile paginii principale.
Aceast clas creaz marginile panoului de afisare si stabile te culoarea de fundal.
public class PanouS extends Panel
{
private static final long versiuneS = 1L;
Color LB = new Color(0xAD,0xD8, 0xE6);
public PanouS(Dimension set)
{
super();
this.setBackground(LB);
this.setPreferredSize(set);
}
}

Strategie
Conine codul-surs folosit pentru soluionarea careului meu Sudoku.
Se ncepe procedura. Am iniiat o variabil numarat care va numra toate cele 81 de
posibili.
public static void start(byte[][] sudoku)
{
int numarat = 0;
for(numarat = 0; numarat < 729; numarat++)
sudoku[numarat][0] = (byte) (1 + (numarat % 9));
}
Clasa incercarisudoku iniiaz o variabil pas care numr totalul posibilitilor
pentru a soluiona careul.Am folosit o structur DO pentru a parcurge toate cele 81 de
posibili fr goluri.
public static void incercarisudoku(byte[][] sudoku, byte startpas)
{
java.util.Random generator = new java.util.Random(System.currentTimeMillis());
byte pas = startpas;
int incercari = 0;
do
{
incercari += 1;
boolean faragoluri = true;
pas = startpas;
while((pas < 81) && (faragoluri))
Urmtoarea structur DO caut i verific numerele care sunt unice n careu. Totul
se repet pn cnd careul este completat cu numerele deja puse.

24

Proiect de diplom
byte nmr = (byte) generator.nextInt(9);
byte pozitie = (byte) generator.nextInt(81);
pas = Strategie.select(sudoku,nmr,pozitie,pas);
boolean ind = false;
do
{
ind = false;
byte numarat;
byte numaratinv;
for(numarat = 0; numarat < 81; numarat++)
{
byte nzeros = 0;
for(numaratinv = 0; numaratinv < 9; numaratinv++)
{
if(sudoku[numarat * 9 + numaratinv][pas] == 0)
nzeros += 1;
else
nmr = (byte) (sudoku[numarat * 9 + numaratinv][pas] - 1);
if(nzeros == 9)
faragoluri = false;
}
if((nzeros == 8) && (nmr < 10))
{
pas = Strategie.select(sudoku,nmr,numarat,pas);
ind = true;
}
}
}
while(ind);
}
Principal.pas = pas;
}
while((pas != 81) && (incercari < 500));
}
Ultima clas reprezint alegerea numerelor care sunt selectate manual. Pe masur
ce ele sunt alese dispar att de pe orizontal ct i de pe vertical. Dup care urmeaz a fi
verificate dac nu se repet n careul de 3 X 3.
public static byte select(byte[][] sudoku, byte nmr, byte pozitie, byte pas)
{
if((sudoku[pozitie*9 + nmr][pas] == 0) || (sudoku[pozitie*9 + nmr][pas] > 9))
return pas;
pas += 1;
int numarat = 0;
for(numarat = 0; numarat < 729; numarat++)
25

Proiect de diplom
sudoku[numarat][pas] = sudoku[numarat][pas - 1];
for(numarat = 0; numarat < 9; numarat++)
sudoku[pozitie*9 + numarat][pas] = 0;
byte rand = (byte) (pozitie/9);
for(numarat = 0; numarat < 9; numarat++)
sudoku[rand * 81 + numarat * 9 + nmr][pas] = 0;
byte coloana = (byte) (pozitie%9);
for(numarat = 0; numarat < 9; numarat++)
sudoku[coloana * 9 + numarat * 81 + nmr][pas] = 0;
int brand = (pozitie/27)*243;
coloana = (byte) (((pozitie%9)/3)*27);
byte numaratinv;
for(numaratinv = 0; numaratinv < 3; numaratinv++)
{
for(numarat = 0; numarat < 3; numarat++)
sudoku[brand + coloana + numarat * 9 + numaratinv * 81 + nmr ][pas] = 0;
}
sudoku[pozitie*9 + nmr][pas] = (byte) (nmr + 11);
return pas;
}

Butoane
Se creaz butoanele folosite pentru a putea controla jocul.
Prima clas creaza un JButton cu proprieti stabilite.
class Butoane extends JButton
{
private static final long versiuneS = 1L;
Color DB = new Color(0x1E,0x90, 0xFF);
Color LB = new Color(0xAD,0xD8, 0xE6);
A doua clas l construiete.
public Butoane(String actionare, String comanda)
{
super(actionare);
this.setBackground(LB);
this.setForeground(DB);
this.setBorder(BorderFactory.createBevelBorder(0, DB, DB));
this.setActionCommand(comanda);
}
Iar ultima i stabilete dimensiunea.
26

Proiect de diplom
public Dimension getPreferredSize()
{
return new Dimension(130,30);
}

Elemente Java utilizate n Sudoku


Clasa Principal
java.lang.Object
Principal
Metode motenite de la clasa java.langObject:
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Clasa Strategie
java.lang.Object
Smethods
Metode motenite de la clasa java.langObject:
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Clasa Panou
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
PanouS
Interfeele implementate:
ava.awt.image.ImageObserver,
javax.accessibility.Accessible

java.awt.MenuContainer,

Cmpuri motenite de la clasa java.awt.Component:


BOTTOM_ALIGNMENT,
CENTER_ALIGNMENT,
RIGHT_ALIGNMENT, TOP_ALIGNMENT

java.io.Serializable,

LEFT_ALIGNMENT,

Cmpuri motenite de la clasa java.awt.image.ImageObserver:


ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS,
WIDTH
Metode motenite de la clasa java.awt.Panel:
addNotify, getAccessibleContext
27

Proiect de diplom
Metode motenite de la clasa java.awt.Container:
add, add, add, add, add, addContainerListener, addPropertyChangeListener,
addPropertyChangeListener,
applyComponentOrientation,
areFocusTraversalKeysSet,
countComponents,
deliverEvent,
doLayout,
findComponentAt,
findComponentAt,
getAlignmentX,
getAlignmentY,
getComponent,
getComponentAt,
getComponentAt,
getComponentCount,
getComponents,
getComponentZOrder,
getContainerListeners,
getFocusTraversalKeys,
getFocusTraversalPolicy,
getInsets,
getLayout,
getListeners,
getMaximumSize,
getMinimumSize,
getMousePosition,
getPreferredSize,
insets,
invalidate,
isAncestorOf,
isFocusCycleRoot,
isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet,
layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print,
printComponents,
remove,
remove,
removeAll,
removeContainerListener,
removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys,
setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout,
transferFocusBackward, transferFocusDownCycle, update, validate
Metode motenite de la clasa java.awt.Component:
action,
add,
addComponentListener,
addFocusListener,
addHierarchyBoundsListener,
addHierarchyListener,
addInputMethodListener,
addKeyListener,
addMouseListener,
addMouseMotionListener,
addMouseWheelListener, bounds, checkImage, checkImage, contains, contains,
createImage, createImage, createVolatileImage, createVolatileImage, disable,
dispatchEvent, enable, enable, enableInputMethods, firePropertyChange,
firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange,
firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior,
getBounds,
getBounds,
getColorModel,
getComponentListeners,
getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor,
getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics,
getForeground,
getGraphics,
getGraphicsConfiguration,
getHeight,
getHierarchyBoundsListeners,
getHierarchyListeners,
getIgnoreRepaint,
getInputContext,
getInputMethodListeners,
getInputMethodRequests,
getKeyListeners, getLocale, getLocation, getLocation, getLocationOnScreen,
getMouseListeners,
getMouseMotionListeners,
getMousePosition,
getMouseWheelListeners,
getName,
getParent,
getPeer,
getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize,
getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus,
hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable,
isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable,
isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet,
isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list,
list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit,
mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage,
prepareImage, printAll, remove, removeComponentListener, removeFocusListener,
removeHierarchyBoundsListener,
removeHierarchyListener,
removeInputMethodListener,
removeKeyListener,
removeMouseListener,
28

Proiect de diplom
removeMouseMotionListener,
removeMouseWheelListener,
removePropertyChangeListener, removePropertyChangeListener, repaint, repaint,
repaint, repaint, requestFocus, requestFocusInWindow, reshape, resize, resize,
setBackground, setBounds, setBounds, setComponentOrientation, setCursor,
setDropTarget,
setEnabled,
setFocusable,
setFocusTraversalKeysEnabled,
setForeground,
setIgnoreRepaint,
setLocale,
setLocation,
setLocation,
setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize,
setVisible, show, show, size, toString, transferFocus, transferFocusUpCycle
Metode motenite de la clasa java.lang.Object:
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait

Clasa VizualizareJoc
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
VizualizareJoc
Cmpuri motenite de la clasa javax.swing.JComponent:
TOOL_TIP_TEXT_KEY,
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT,
WHEN_IN_FOCUSED_WINDOW

UNDEFINED_CONDITION,
WHEN_FOCUSED,

Cmpuri motenite de la clasa java.awt.Component:


BOTTOM_ALIGNMENT,
CENTER_ALIGNMENT,
RIGHT_ALIGNMENT, TOP_ALIGNMENT

LEFT_ALIGNMENT,

Cmpuri motenite de la clasa java.awt.image.ImageObserver:


ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS,
WIDTH
Metode motenite de la clasa javax.swing.JPanel:
getAccessibleContext, getUI, getUIClassID, setUI, updateUI
Metode motenite de la clasa javax.swing.JComponent:
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect,
contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange,
firePropertyChange,
getActionForKeyStroke,
getActionMap,
getAlignmentX,
getAlignmentY,
getAncestorListeners,
getAutoscrolls,
getBaseline,
getBaselineResizeBehavior,
getBorder,
getBounds,
getClientProperty,
getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions,
getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu,
getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners,
getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent,
29

Proiect de diplom
getPopupLocation,
getRegisteredKeyStrokes,
getRootPane,
getSize,
getToolTipLocation,
getToolTipText,
getToolTipText,
getTopLevelAncestor,
getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners,
getVisibleRect,
getWidth,
getX,
getY,
grabFocus,
isDoubleBuffered,
isLightweightComponent,
isManagingFocus,
isOpaque,
isOptimizedDrawingEnabled,
isPaintingForPrint,
isPaintingTile,
isRequestFocusEnabled, isValidateRoot, paint, paintImmediately, paintImmediately,
print, printAll, putClientProperty, registerKeyboardAction, registerKeyboardAction,
removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint,
repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow,
resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap,
setAlignmentX,
setAlignmentY, setAutoscrolls,
setBackground,
setBorder,
setComponentPopupMenu,
setDebugGraphicsOptions,
setDefaultLocale,
setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground,
setInheritsPopupMenu,
setInputMap,
setInputVerifier,
setMaximumSize,
setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize,
setRequestFocusEnabled,
setToolTipText,
setTransferHandler,
setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
Metode motenite de la clasa java.awt.Container:
add, add, add, add, add, addContainerListener, addPropertyChangeListener,
addPropertyChangeListener,
applyComponentOrientation,
areFocusTraversalKeysSet,
countComponents,
deliverEvent,
doLayout,
findComponentAt,
findComponentAt,
getComponent,
getComponentAt,
getComponentAt, getComponentCount, getComponents, getComponentZOrder,
getContainerListeners,
getFocusTraversalKeys,
getFocusTraversalPolicy,
getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot,
isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet,
layout, list, list, locate, minimumSize, paintComponents, preferredSize,
printComponents,
remove,
remove,
removeAll,
removeContainerListener,
setComponentZOrder,
setFocusCycleRoot,
setFocusTraversalPolicy,
setFocusTraversalPolicyProvider,
setLayout,
transferFocusBackward,
transferFocusDownCycle, validate
Metode motenite de la clasa java.awt.Component:
action,
add,
addComponentListener,
addFocusListener,
addHierarchyBoundsListener,
addHierarchyListener,
addInputMethodListener,
addKeyListener,
addMouseListener,
addMouseMotionListener,
addMouseWheelListener,
bounds,
checkImage,
checkImage,
contains,
createImage,
createImage,
createVolatileImage,
createVolatileImage,
dispatchEvent,
enable,
enableInputMethods,
firePropertyChange,
firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange,
getBackground,
getBounds,
getColorModel,
getComponentListeners,
getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor,
getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground,
30

Proiect de diplom
getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners,
getIgnoreRepaint,
getInputContext,
getInputMethodListeners,
getInputMethodRequests,
getKeyListeners,
getLocale,
getLocation,
getLocationOnScreen,
getMouseListeners,
getMouseMotionListeners,
getMousePosition, getMouseWheelListeners, getName, getParent, getPeer,
getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit,
getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside,
isBackgroundSet,
isCursorSet,
isDisplayable,
isEnabled,
isFocusable,
isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight,
isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid,
isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown,
mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus,
paintAll,
postEvent,
prepareImage,
prepareImage,
remove,
removeComponentListener,
removeFocusListener,
removeHierarchyBoundsListener,
removeHierarchyListener,
removeInputMethodListener,
removeKeyListener,
removeMouseListener,
removeMouseMotionListener,
removeMouseWheelListener,
removePropertyChangeListener, removePropertyChangeListener, repaint, repaint,
repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor,
setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint,
setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size,
toString, transferFocus, transferFocusUpCycle
Metode motenite de la clasa java.lang.Object:
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait

Capitolul III
Funcionarea jocului n imagini

31

Proiect de diplom

32

Proiect de diplom

33

Proiect de diplom

34

Proiect de diplom

35

Proiect de diplom

36

Proiect de diplom

37

Proiect de diplom

38

Proiect de diplom

39

Proiect de diplom

40

Proiect de diplom

41

Proiect de diplom

42

Proiect de diplom

Concluzii

43

Proiect de diplom

Bibliografie

Java Application Architecture


44

Kirk Knoernschild,

Proiect de diplom
Prentice Hall 2015
https://www.oracle.com/java/index.html
https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)
https://en.wikipedia.org/wiki/NetBeans#/media/File:NetBeans.sv
g
https://ro.wikipedia.org/wiki/Sudoku
http://perdevelopment.org/top-3-editoare-de-text-pentruprogramatori/
http://wiki.dcae.pub.ro/index.php/No%C8%9Biuni_despre_Java
https://en.wikipedia.org/wiki/NetBeans
http://crististefan.com/inteligent1/

45

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