Aflați cum să facă un simplu joc cu Python!
aceasta este o postare a unui membru al echipei tutorial, Julian Meyer, un dezvoltator python în vârstă de 13 ani. Îl puteți găsi pe Google+ și Twitter.v-ați întrebat vreodată cum sunt create jocurile video? Nu este atât de complicat pe cât ai putea crede!în acest tutorial, veți crea un joc simplu numit iepurași și bursuci, unde eroul, iepurașul, trebuie să apere un castel împotriva unei hoarde atacatoare de bursuci., : O
pentru a scrie acest joc, vei folosi Python. Nu, nu vorbesc despre un șarpe mare! :]
Python este un limbaj de programare pe calculator. Am ales Python pentru acest tutorial, deoarece este un limbaj simplu pentru a începe cu, și este distractiv și ușor de învățat.dacă sunteți nou în Python, înainte de a începe, consultați această carte: gândiți-vă la Python: cum să gândiți ca un informatician. Asta ar trebui să te pună la curent.
apoi se arunca cu capul înapoi aici și de a lua gata – există un război vine între iepurași și bursuci. Continuați să citiți pentru a sări în luptă!,
Noțiuni de bază: Instalarea Python
Dacă doriți să încercați acest tutorial pe un PC Windows, trebuie să instalați Python. Asigurați-vă că vă apuca versiunea 2.7.3 și nu versiunea 3.3.0! După rularea programului de instalare, ar trebui să aveți inactiv în folderul toate programele din meniul start. Lansați IDLE pentru a începe.dacă sunteți pe un Mac, aveți deja Python instalat! Doar deschideți terminalul (/Aplicații/Utilități / Terminal.aplicație), tastați python și apăsați Enter. Notă: Dacă instalați Python din python.,org (și ar putea fi necesar dacă doriți să lucrați cu PyGame), atunci veți avea acces și la IDLE pe Mac. Ar trebui să fie în folderul „/Applications/Python 2.7”.
Dacă ați făcut totul corect, ar trebui să vedeți ceva de genul asta:
Notă: Dacă doriți să ieșiți din Python prompt (triple paranteze unghiulare, >>>), puteți fie să tastați exit() la Python prompt și apăsați enter sau apăsați Control+D.,odată ce ați ajuns la promptul Python, pentru a testa dacă Python funcționează corect, tastați print 1+1 și apăsați Enter/Return. Ar trebui să imprime 2. Tocmai ați scris primul program Python!
acum că știți că Python funcționează corect, trebuie să instalați PyGame pentru a scrie un joc folosind Python.PyGame este o bibliotecă Python care face scrierea jocurilor mult mai ușoară! Oferă funcționalități precum manipularea imaginilor și redarea sunetului pe care le puteți încorpora cu ușurință în joc.,
accesați AICI ȘI Descărcați Programul de instalare PyGame adecvat pentru sistemul dvs. Asigurați-vă că descărcați o versiune Python 2.7.notă: programul de instalare PyGame de la linkul de mai sus nu va funcționa cu Python-ul implicit de la Apple care este instalat pe un Mac. Va trebui să descărcați Python de la python.org și instalați-l pentru a utiliza PyGame. Sau, puteți instala atât Python și PyGame prin MacPorts.
pentru a verifica dacă aveți PyGame instalat corect, deschideți IDLE sau rulați Python prin Terminal și tastați import pygame la promptul Python., Dacă acest lucru nu duce la nici o ieșire, atunci ești bun. dacă, pe de altă parte, afișează o eroare ca cea prezentată mai jos, atunci PyGame nu este instalat.dacă primiți o eroare ca aceasta, postați pe forumuri și vă voi ajuta să o faceți să funcționeze.
rularea codului Python din fișier
în timp ce puteți rula biți scurți de cod Python la promptul Python, dacă doriți să lucrați la un program mai mare (cum ar fi un joc), probabil că doriți să salvați codul într-un fișier, astfel încât să nu fie necesar să îl tastați din nou și din nou.
există mai multe moduri de a rula un program Python ca fișier., O modalitate este de a utiliza un editor de text simplu, cum ar fi Notepad (Windows) sau TextEdit (Mac). Deschideți un nou fișier text, tastați codul Python (cum ar fi print 1+1). Apoi salvați-l ca XXX.py (XXX poate fi orice nume de fișier descriptiv). apoi, pe Windows, faceți dublu clic pe acest fișier pentru a-l rula. Pe Mac, deschide Terminal și tastează python, apoi trage fișierul pe care l-ai salvat în fereastra Terminal și apasă Enter.
celălalt mod este să tastați codul folosind editorul inactiv, ceea ce veți face în acest tutorial. Pentru a rula inactiv, pur și simplu tastați inactiv de la Terminal., Apoi alegeți Fișier \ fereastră nouă din meniul inactiv și ar trebui să aveți o fereastră de editor de text unde puteți introduce codul Python. Puteți salva modificările codului prin File \ Save și chiar puteți rula codul prin Run \ Run Module (F5).rețineți că meniul Run este disponibil numai dacă aveți un fișier deschis într-o fereastră de editor.adăugarea resurselor de joc
sunteți aproape gata pentru a crea jocul. Dar ce este un joc fără o grafică excelentă și efecte sonore? Am pus împreună toate graficele și efectele sonore de care veți avea nevoie pentru jocul dvs. într-o arhivă ZIP. Îl puteți descărca aici.,
după ce ați descărcat fișierul, creați un folder pentru jocul pe hard disk și de a extrage resurse dosar în acel folder, folderul cu jocul are un subfolder numit resurse, cu diverse resurse grupate în foldere suplimentare în interiorul acestuia, astfel:
acum sunteți gata pentru a începe crearea de Iepurași și Bursuci. :]
Pasul 1: Hello Bunny
rulați inactiv și deschideți o fereastră nouă de editor de text, așa cum am menționat în secțiunea anterioară., Introduceți următorul cod în fereastra de editare:
Salvați fișierul în folderul cu jocul (cel în care resursele subfolder este) și nume game.py.
Să mergem prin codul pe secțiuni:
- Import PyGame bibliotecă. Acest lucru vă permite să utilizați funcții din biblioteca din programul dvs.
- inițializați PyGame și configurați fereastra de afișare.
- încărcați imaginea pe care o veți folosi pentru iepuraș.
- păstrați looping peste următorul cod indentat.,
Notă: În cazul în care alte limbi, cum ar fi Objective-C, Java sau PHP folosesc acolade pentru a afișa un bloc de cod care urmează să fie executat într-o buclă while sau o declarație if, Python folosește indentarea pentru a identifica blocurile de cod. Așadar, indentarea corectă este foarte importantă în Python-rețineți acest lucru. :]
- umpleți ecranul cu negru înainte de a desena ceva.
- adăugați imaginea de iepuraș pe care ați încărcat-o pe ecran la x=100 și y=100.
- actualizați ecranul.
- verificați dacă există evenimente noi și dacă există unul și este o comandă quit, ieșiți din program.,notă: conform documentației PyGame, nu trebuie să apelați pygame.quit () deoarece interpretul va apela automat atunci când interpretul se oprește. Cu toate acestea, cel puțin pe Mac OS, jocul ar atârna la ieșire, cu excepția cazului în pygame.quit () a fost numit.
Dacă tu a alerga codul acum (prin Run\Modul în așteptare meniu), ar trebui să vedeți un ecran similar cu cel de mai jos:
w00t iepuras este în scenă, și gata de acțiune!dar jocul arată înfricoșător și singur, cu iepurașul doar stând acolo pe un fundal negru., Timp pentru a prettify lucrurile un pic. :]
Pasul 2: Adăugați peisaj
Să începem prin adăugarea unui fundal la scena jocului. Acest lucru se poate face cu un ecran de cuplu mai mult.blit () apeluri.la sfârșitul secțiunii #3, După încărcarea imaginii playerului, adăugați următorul cod:
grass = pygame.image.load("resources/images/grass.png")castle = pygame.image.load("resources/images/castle.png")
aceasta încarcă imaginile și le pune în variabile specifice. Acum trebuie să fie desenate pe ecran. Dar dacă verificați imaginea grass, veți observa că nu va acoperi întreaga zonă a ecranului, care este de 640 x 480., Acest lucru înseamnă că trebuie să țiglă iarba peste zona de ecran să-l acopere complet.
Adăugați următorul cod la game.py de la începutul secțiunii #6 (înainte de player-ul este desenat pe ecran):
după Cum puteți vedea, pentru declarația bucle prin x în primul rând. Apoi, în cadrul acestei bucle pentru buclă, se buclează prin y și atrage iarba la valorile x și y generate de buclele for. Următoarele două linii atrag doar castelele de pe ecran. dacă rulați programul acum, ar trebui să obțineți ceva de genul:
mult mai bine – acest lucru începe să arate bine!, :]
Pasul 3: Faceți iepurașul să se miște
apoi trebuie să adăugați câteva elemente reale de joc, cum ar fi să faceți iepurașul să răspundă la apăsările de taste.pentru a face acest lucru, mai întâi veți implementa o metodă bună de a urmări care taste sunt apăsate la un moment dat. Puteți face acest lucru pur și simplu făcând o serie de stări cheie care dețin starea fiecărei chei pe care doriți să o utilizați pentru joc.
Adăugați următorul cod la game.py la sfârșitul de secțiune #2 (după ce setați ecranul înălțime și lățime):
keys = playerpos=
Acest cod este destul de auto-explicative., Matricea de taste ține evidența tastelor apăsate în următoarea ordine: WASD. Fiecare element din matrice corespunde unei chei-Prima La W, A doua la A și așa mai departe.variabila playerpos este locul în care programul atrage playerul. Deoarece jocul va muta jucătorul în poziții diferite, este mai ușor să ai o variabilă care conține poziția jucătorului și apoi să desenezi pur și simplu jucătorul în acea poziție.acum trebuie să modificați codul existent pentru desenarea playerului pentru a utiliza noua variabilă playerpos., Modificați următoarele linie de la punctul nr. 6:
screen.blit(player, (100,100))
Pentru:
screen.blit(player, playerpos)
Apoi, actualiza cheile de serie bazat pe ce taste sunt apăsate. PyGame face detectarea apăsări cheie ușor prin adăugarea de eveniment.funcții cheie.
la sfârșitul secțiunii # 8, imediat după blocarea verificării evenimentului.tip = = pygame.Ieșiți, puneți acest cod (la același nivel de indentare ca și pygame.QUIT dacă block):
Wow! Acestea sunt o mulțime de linii de cod. Dacă o împărțiți în declarațiile if, nu este atât de complicat., mai întâi verificați dacă o tastă este apăsată sau eliberată. Apoi verificați ce tastă este apăsată sau eliberată și dacă tasta apăsată sau eliberată este una dintre tastele pe care le utilizați, actualizați variabila tastelor în consecință.în cele din urmă, trebuie să actualizați variabila playerpos ca răspuns la apăsarea tastelor. Acest lucru este de fapt foarte simplu.
adăugați următorul cod la sfârșitul jocului.,py (cu un nivel de indentare, pune-l la același nivel ca pentru bucla):
# 9 - Move player if keys: playerpos-=5 elif keys: playerpos+=5 if keys: playerpos-=5 elif keys: playerpos+=5
Acest cod, pur și simplu verifică care dintre chei sunt presate și adaugă sau scade de la jucatorul x sau y poziția (în funcție de cheia apăsat) pentru a muta player-ul. rulați jocul și ar trebui să obțineți un jucător la fel ca înainte. Încercați să apăsați WASD. Ura! Funcționează.,
Pasul 4: Rotirea Bunny
Da, iepuras dvs. acum se mișcă atunci când apăsați tastele dar n-ar fi chiar mai bine dacă ai putea folosi mouse-ul pentru a roti iepurașul să se confrunte cu o direcție de alegerea ta, așa că nu se confruntă cu același drum tot timpul? Este destul de simplu să implementați folosind trigonometria.,
să Ia o privire la următoarea ilustrare:
În imaginea de mai sus, dacă (5,3) este poziția bunny și (2,4) este poziția curentă a mouse-ului, puteți găsi unghiul de rotație (z) prin aplicarea atan2 trigonometrice funcție de diferența de distanțe între două puncte. Desigur, odată ce cunoașteți unghiul de rotație, puteți roti pur și simplu iepurașul în consecință. :]
dacă sunteți un pic confuz cu privire la această parte, nu vă faceți griji – puteți continua oricum. Dar acesta este motivul pentru care ar trebui să acorde o atenție în clasa de matematica!, :] Veți folosi aceste lucruri tot timpul în programarea jocurilor.acum trebuie să aplicați acest concept jocului dvs. Pentru a face acest lucru, puteți utiliza suprafața PyGame.rotire (grade) funcție. De altfel, rețineți că valoarea Z este în radiani. : Ce zici de a lăsa iepurașul să tragă dușmani folosind săgeți? Acesta nu este un iepure blând!acest pas este un pic mai complicat, deoarece trebuie să țineți evidența tuturor săgeților, să le actualizați, să le rotiți și să le ștergeți atunci când se opresc pe ecran., în primul rând, adăugați variabilele necesare la sfârșitul secțiunii de inițializare, Secțiunea #2:
acc=arrows=
prima variabilă ține evidența preciziei jucătorului, iar a doua matrice urmărește toate săgețile. Variabila de precizie este, în esență, o listă a numărului de focuri trase și numărul de bursuci lovit. Mai târziu, vom folosi aceste informații pentru a calcula un procent de precizie.apoi, încărcați imaginea săgeții la sfârșitul secțiunii #3:
arrow = pygame.image.load("resources/images/bullet.png")
acum, când un utilizator face clic pe mouse, o săgeată trebuie să tragă., Adăugați următoarele la sfârșitul secțiunii # 8 ca un nou handler de evenimente:
acest cod verifică dacă mouse-ul a fost făcut clic și dacă a fost, acesta primește poziția mouse-ului și calculează rotația săgeții pe baza poziției rotite a jucătorului și a poziției cursorului. Această valoare de rotație este stocată în matricea săgeți.apoi, trebuie să desenați săgețile de pe ecran. Adăugați următorul cod imediat după secțiunea #6.1:
Valorile vely și velx sunt calculate folosind trigonometria de bază. 10 este viteza săgeților., Declarația if verifică doar dacă glonțul este în afara limitelor și dacă este, șterge săgeata. Al doilea pentru bucle de declarație prin săgeți și le atrage cu rotația corectă. încercați să rulați programul. Ar trebui să aveți un iepuras care trage săgeți atunci când faceți clic pe mouse-ul! 😀
Pasul 6: luați armele! Bursuci!
OK, aveți un castel și aveți un erou care se poate mișca și trage. Deci, ce lipsește? Dușmani care atacă castelul pe care eroul îl poate trage!,
în acest pas, veți crea bursuci generate aleator care rulează la castel. Vor fi din ce în ce mai mulți bursuci pe măsură ce jocul progresează. Deci, hai să facem o listă a ceea ce va trebui să facă.
- adăugați băieți răi la o listă o matrice.
- actualizați matricea bad guy fiecare cadru și verificați dacă acestea sunt oprite pe ecran.
- arată băieții răi.
ușor, nu?, :]
Mai întâi, adăugați următorul cod la sfârșitul secțiunii #2:
badtimer=100badtimer1=0badguys=]healthvalue=194
cele de mai sus configurează un cronometru (precum și alte câteva valori), astfel încât jocul să adauge un nou Bursuc după ce a trecut ceva timp. Reduceți badtimer fiecare cadru până când este zero și apoi creați un nou badger.
Acum adăugați următoarele la sfârșitul secțiunii #3:
badguyimg1 = pygame.image.load("resources/images/badguy.png")badguyimg=badguyimg1
prima linie de mai sus este similară cu tot codul de încărcare a imaginii anterior. A doua linie stabilește o copie a imaginii, astfel încât să puteți anima tipul rău mult mai ușor.,apoi, trebuie să actualizați și să arătați băieții răi. Adăugați acest cod imediat după secțiunea #6.2:
o mulțime de cod pentru a trece peste. :] Prima linie verifică dacă badtimer este zero, iar dacă este, creează un bursuc și seturi badtimer din nou pe baza de câte ori badtimer a rula atât de departe. Primul pentru buclă actualizează poziția x a Bursucului, verifică dacă bursucul este în afara ecranului și elimină bursucul dacă este în afara ecranului. Al doilea pentru buclă atrage toate bursucii.
pentru a utiliza funcția aleatorie din Codul de mai sus, trebuie să importați și Biblioteca aleatorie., Deci, adăugați următoarele la sfârșitul de secțiune #1:
import random
în cele din Urmă, trebuie să adăugați această linie dreapta după declarația timp (secțiunea nr. 4) pentru a descrește valoarea badtimer pentru fiecare cadru:
badtimer-=1
Încercați toate de acest cod de funcționare a jocului. Acum ar trebui să începeți să vedeți un joc real – puteți trage, muta, întoarce și bursucii încearcă să vă alerge.
dar așteptați! De ce bursucii nu aruncă în aer Castelul? Să adăugăm rapid asta…
Adauga acest cod chiar inainte de indexul+=1 in prima bucla din Sectiunea #6.,3:
acest cod este destul de simplu. Dacă valoarea X a Bursucului este mai mică de 64 la dreapta, atunci ștergeți acel tip rău și micșorați valoarea sănătății jocului cu o valoare aleatorie între 5 și 20. (Mai târziu, veți afișa valoarea curentă de sănătate pe ecran. dacă construiți și rulați programul, ar trebui să obțineți o grămadă de badgers ataca care dispar atunci când au lovit Castelul. Deși nu o puteți vedea, bursucii vă scad de fapt sănătatea.,
Pasul 7: coliziuni cu bursuci și săgeți
bursucii sunt ataca castelul, dar săgețile nu au nici un efect asupra lor! Cum ar trebui un iepuraș să-și apere casa?este timpul să setați săgețile pentru a ucide bursucii, astfel încât să vă puteți proteja castelul și să câștigați jocul! Practic, trebuie să faci buclă prin toți băieții răi și în interiorul fiecăreia dintre aceste bucle, trebuie să faci buclă prin toate săgețile și să verifici dacă se ciocnesc. Dacă o fac, ștergeți bursucul, ștergeți săgeata și adăugați unul la raportul dvs. de precizie.
imediat după secțiunea #6.3.,1, adăugați acest lucru:
există un singur lucru important de notat în acest cod. Instrucțiunea if este o funcție pygame încorporată care verifică dacă două dreptunghiuri se intersectează. Celelalte două linii fac doar ceea ce am explicat mai sus.
dacă rulați programul, ar trebui să puteți în cele din urmă să trageți și să ucideți bursucii.
Pasul 8: Adăugați un HUD cu contor de sănătate și ceas
jocul progresează destul de bine. Ai atacatorii tăi, și ai apărătorul tău. Acum tot ce ai nevoie este o modalitate de a păstra scorul și de a arăta cât de bine se descurcă iepurașul., cel mai simplu mod de a face acest lucru este de a adăuga un HUD (Heads Up Display) care arată nivelul actual de sănătate al castelului. Puteți adăuga, de asemenea, un ceas pentru a arăta cât timp a supraviețuit Castelul.mai întâi adăugați ceasul. Adăugați următorul cod chiar înainte de începutul secțiunii #7:
codul de mai sus creează pur și simplu un font nou folosind fontul PyGame implicit setat la dimensiunea 24. Apoi, acest font este folosit pentru a face textul timpului pe o suprafață. După aceea, textul este poziționat și desenat peecran.
apoi adăugați bara de sănătate., Dar, înainte de a desena bara de sănătate, trebuie să încărcați imaginile pentru bara. Adăugați următorul cod la sfârșitul secțiunii # 3:
healthbar = pygame.image.load("resources/images/healthbar.png")health = pygame.image.load("resources/images/health.png")
prima este imaginea roșie folosită pentru bara de sănătate completă. Al doilea este imaginea verde folosită pentru a arăta nivelul actual de sănătate.
Acum adăugați următorul cod imediat după secțiunea #6.4 (pe care tocmai ați adăugat-o) pentru a desena bara de sănătate pe ecran:
# 6.5 - Draw health bar screen.blit(healthbar, (5,5)) for health1 in range(healthvalue): screen.blit(health, (health1+8,8))
codul atrage mai întâi bara de sănătate roșie. Apoi atrage o anumită cantitate de verde peste bar, în funcție de cât de multă viață a rămas castelul., dacă construiți și rulați programul, ar trebui să aveți un cronometru și o bară de sănătate.
Pasul 9: câștigă sau pierde
dar ce este asta? Dacă joci suficient de mult timp, chiar dacă sănătatea ta scade la zero, jocul continuă! Nu doar asta, puteți continua să trageți și în badgers. Asta nu va merge, nu-i așa? Aveți nevoie de un fel de scenariu de câștig/pierdere pentru a face jocul să merite jucat.
deci, să adăugăm condiția de câștig și pierdere, precum și ecranul de câștig sau pierdere. :] Faceți acest lucru ieșind din bucla principală și intrând într-o buclă de câștig/pierdere., În bucla câștig / pierdere, trebuie să vă dați seama dacă utilizatorul a câștigat sau a pierdut și să afișați ecranul în consecință. aici este o schiță de bază a scenariilor de câștig/pierdere:
dacă timpul este de până (90000 ms sau 90 secunde), atunci:
- opriți rularea jocului
- setați rezultatul jocului la 1 sau câștigați
dacă castelul este distrus atunci:
- opriți rularea jocului
- setați rezultatul jocului la 1 sau câștigați
calculați precizia oricum.
notă: acc * 1.0 Este doar conversia acc la un flotor., Dacă nu faceți acest lucru, operandul diviziei va returna un număr întreg ca 1 sau 2 în loc de un float ca 1.5
adăugați aceste linii la sfârșitul game.py:
acesta este cel mai lung bit de cod de până acum! Dar nu este atât de complicat.
prima declarație if verifică dacă timpul a expirat. Al doilea verifică dacă castelul este distrus. Al treilea calculează raportul de precizie. După aceea, o declarație rapidă dacă verifică dacă ați câștigat sau ați pierdut și afișează imaginea corectă. desigur ,dacă doriți să afișați imagini pentru ecranele win and lose, atunci acele imagini trebuie să fie încărcate mai întâi., Deci, adăugați următorul cod la sfârșitul secțiunii # 3:
gameover = pygame.image.load("resources/images/gameover.png")youwin = pygame.image.load("resources/images/youwin.png")
încă un lucru rapid. Schimba punctul nr. 4 de la:
# 4 - keep looping throughwhile 1: badtimer-=1
Pentru:
# 4 - keep looping throughrunning = 1exitcode = 0while running: badtimer-=1
funcționare variabilă ține evidența dacă jocul este de peste și codul de ieșire variabilă ține evidența dacă jucătorul a câștigat sau a pierdut.rulați jocul din nou și acum puteți triumfa sau muri încercând! Mișto. :]
Pasul 10: Muzică gratuită și efecte sonore!
jocul arată destul de bine, dar cum sună? E cam liniște, nu-i așa?, Adăugarea unor efecte sonore poate schimba întreaga senzație a unui joc.PyGame face încărcarea și redarea sunetelor foarte simple. În primul rând, trebuie să inițializa mixer, adăugând la sfârșitul de secțiune #2:
pygame.mixer.init()
Apoi încărcați sunete și setați nivelul volumului la sfârșitul de secțiune #3:
cele Mai multe dintre codul de mai sus este pur și simplu de încărcare de fișiere audio și configurarea audio niveluri de volum. Dar să acorde o atenție la pygame.mixer.muzica.load line – acea linie încarcă muzica de fundal pentru joc și linia următoare stabilește muzica de fundal pentru a repeta pentru totdeauna.,
care are grijă de configurația audio. :] Acum tot ce trebuie să faceți este să redați diferitele efecte sonore după cum este necesar. Faceți asta conform instrucțiunilor din comentariile pentru codul de mai jos:
rulați jocul încă o dată și veți observa că acum aveți muzică de fundal și efecte sonore pentru coliziuni și fotografiere. Jocul se simte mult mai viu! :]
unde să mergem de aici?
ar trebui să fii mândru de tine: Tocmai ai terminat să creezi un joc distractiv plin de muzică, efecte sonore, un iepure Ucigaș, bursuci kamikaze și multe altele. Ți-am spus că o poți face!, :]
puteți descărca codul sursă final pentru joc aici. în acest moment, nu ezitați să extindeți acest joc în propria creație! Poate încercați să înlocuiți arta cu propriile desene sau să adăugați diferite arme sau tipuri de monștri în joc!
aveți întrebări sau comentarii despre ceea ce ați făcut în acest tutorial? Dacă da, Alăturați-vă discuției în forumuri! Mi-ar plăcea să aud de la tine.
aceasta este o postare a unui membru al echipei tutorial, Julian Meyer, un dezvoltator python de 13 ani.
raywenderlich.,com Weekly
raywenderlich.com newsletter este cel mai simplu mod de a rămâne la curent cu tot ce trebuie să știți ca dezvoltator mobil.
obțineți un rezumat săptămânal al tutorialelor și cursurilor noastre și primiți un curs gratuit de e-mail în profunzime ca bonus!
evaluare medie
4.1/5
adaugă o evaluare pentru acest conținut
autentifică-te pentru a adăuga o evaluare