Construieste un joc Sudoku si invata gestionarea starii in React

Sudoku este unul dintre puzzle-urile mele preferate pentru plasarea numerelor. porno sport Din cauza lipsei de aplicatii Sudoku de calitate pe web si in magazinele de aplicatii, am decis sa-mi construiesc propria versiune. blog porno Este plin de functii usor de utilizat si prietenoase pentru incepatori, care fac jocul mult mai placut. porno pov hd O puteti juca aici. porno perfect girls In aceasta postare, voi vorbi despre proiectarea, gestionarea si lucrul cu starea jocului pentru principalele UI. film porno chinois Veti citi despre modul in care designul corect al starii va ajuta sa pastrati codul curat si placut de lucrat. porno animal Sper ca va va ajuta sa argumentati, sa structurati si sa gestionati starea unei aplicatii. filme porno romanesti

Regulile jocului

Umpleti o grila 9 × 9 cu cifre, astfel incat fiecare coloana, fiecare rand si fiecare dintre cele noua patrate 3 × 3 care compun grila sa contina toate cifrele de la 1 la 9. porno xvideo

colegii: celule apartinand aceleiasi coloane, rand sau patrat

Jocul

Generarea jocului

Sudoku este o problema de satisfactie a constrangerilor. cote de pablo porno Rezolvarea si generarea de puzzle-uri Sudoku a fost un subiect explorat (vezi notele). casting film porno Aceasta postare se concentreaza pe gestionarea de stat a interfetei de utilizare a jocului, dar aici este aproximativ codul de generare a jocului daca sunteti interesat. porno plan a 3

Reprezentati puzzle-ul in matrice 2D

Puzzle-ul este reprezentat ca o matrice bidimensionala 9×9. porno nigeria Fiecare element al matricei reprezinta valoarea curenta a unei celule si notele sale:

cu obiectul fiecarei celule contine valoarea sa curenta, precum si notele sale. porno oops

Starea generala a jocului

Pentru ca jocul sa functioneze, trebuie sa fie capabil sa:

  • determinati progresul jocului: stiti daca jocul este finalizat si cate numere raman pentru fiecare grup de colegi, celule apartinand aceleiasi coloane, rand sau patrat. porno bureau
  • urmariti posibilele conflicte in cadrul fiecarui grup de peer: cunoasteti de cate ori este utilizat un numar per grup de peer (un grup complet este unul cu fiecare numar folosit exact o data)

Puteti identifica conflictele comparand valoarea numerica a unei celule cu valorile celor 24 de pari (8 pe coloana, rand sau patrat) si puteti determina progresul jocului scanand intregul puzzle 9×9. porno en foret Cu toate acestea, aceasta abordare este ineficienta, detaliata in cod si greu de inteles. film porno zoophile



  • porno gay teen
  • tante et neveu porno
  • porno mama
  • porno sur netflix
  • chris bieber porno
  • porno forcé
  • lahaie porno
  • free porno français
  • youtube film porno gratuit
  • hamster porno french
  • porno gyneco
  • porno sous la douche
  • porno fait maison
  • porno hard
  • xmaster porno
  • site porno trans
  • porno gratuit a telecharger
  • porno bourgeoise
  • porno choc
  • scenes porno





Pentru a mentine implementarea performanta, curata si placuta de lucrat, starea jocului va urmari de cate ori fiecare numar a fost utilizat pe baza de grup egal. porno ecolieres La initializare, acesta va genera puzzle-ul si va crea obiecte de numarare pentru toate grupurile de pariuri:

Componenta celulei

Componenta celulei se aprinde cu diferite culori care indica informatii utile despre valoarea sa actuala, relatia cu celula selectata, conflicte si note pe baza starii curente a jocului:

Calculul intrarilor componentei celulei

Componenta celulei are nevoie de {valoare, isPeer, isSelected, sameValue, preumplut, note, conflict} pentru a reda prezentarea corecta utilizatorului. porno asiatique non censuré {valoare, note, preumplute} sunt accesate direct din celula din matricea 2D a puzzle-ului. bbc porno Cu toate acestea, determinarea restului de intrari va necesita inferente din starea generala a jocului, in special in raport cu celula selectata. porno sénégalais Pastrarea carei celule este selectata in starea jocului este destul de simpla:

metode componente pentru obtinerea celulei selectate si setarea coordonatelor selectate

Cu metoda getSelectedCell () din componenta Joc , acum pot deduce valorile {isSelected, sameValue, isPeer, conflict} comparand celula curenta cu cea selectata:

Componenta de control numeric

Fiecare componenta de control numeric permite utilizatorului sa atribuie valoarea numerica corespunzatoare celulei selectate. Prezentarea insasi vizualizeaza progresul atribuirii numarului.

Componenta NumberControl are nevoie de:

  • un apel invers care ar actualiza valoarea celulei selectate la clicurile utilizatorilor
  • o valoare calculata a progresului numarului

fillNumber (number), functia unei componente a jocului pentru a actualiza valoarea celulei selectate este scrisa pentru a crea manipulatori de clicuri de utilizator pe componentele NumberControl :

Progresul numarului este calculat prin urmatorii doi pasi:

  1. Pentru fiecare coloana, rand si grupuri patrate, obtineti numarul de grupuri care au deja numarul completat
  2. Luati minimul celor trei valori ca progres al numarului

Acum, componenta Joc are ceea ce trebuie pentru a reda componentele NumberControl pentru numerele, de la 1 la 9:

Componentele instrumentului

Pentru a anula sau reface o actualizare a jocului, acesta trebuie sa tina evidenta istoricului actualizarilor sale. Un obiect matrice este folosit pentru a pastra un istoric liniar al actualizarilor utilizatorului la joc. Codul este, de asemenea, extins pentru a urmari istoricul actualizarilor forumului:

initializati starea jocului cu un array istoric si historyOffset

Cu o matrice de istorie si sa actuala historyOffset in mana, refaceti / undo actualizari sunt doar decrementare / increment actualizari historyOffset de matrice:

Stergerea unei celule este la fel de simpla ca actualizarea valorii sale curente la nul. Aluzia la o celula neumpluta este, de asemenea, banala, deoarece valoarea corecta poate fi obtinuta din solutie in starea:

Pentru stergere si sugestie, am creat erasedSelected si completeSelectedWithSolution respectiv

Acum am tot ce imi trebuie pentru a reda elementele de actiune si pentru a le transmite gestionarele de actualizare corecte:

Acum un utilizator are un joc Sudoku potrivit cu care sa se joace!

Acesta este procesul meu de gandire de implementare si proiectare a starii pentru componentele principale ale jocului, partile despre care merita sa vorbim. Aplicatia Sudoku a beneficiat enorm de mult de un design de stare bun. Cel mai greu lucru pentru a fi corect este managementul de stat. Planificarea gestionarii statului este cruciala pentru succesul dvs. in construirea de aplicatii care pot fi intretinute. Asigurati-va ca petreceti mult timp proiectand starea aplicatiei la un nivel inalt inainte de a va scufunda in detaliile implementarii.

Materiale conexe

  • Jocul Sudoku: jocul web Sudoku pe care l-am creat ambalat cu functii usor de utilizat
  • Cod sursa pentru joc
  • Rezolvarea fiecarui puzzle Sudoku: un eseu despre rezolvarea problemelor Sodoku folosind propagarea si cautarea constrangerilor
  • Sudoku Generator: un program simplu scris pentru a genera puzzle-uri Sudoku