Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Kodi Bllokon IDE - konfigurimi dhe përdorimi.

Në faqet e "Computer News" ju kam thënë vazhdimisht, të dashur lexues, për mjedise të ndryshme zhvillimi - të përshtatshëm, të bukur, ndër-platformë. Sepse, çfarëdo që mund të thuhet, mjedisi i zhvillimit është një gjë mjaft e rëndësishme si për vetë programuesin ashtu edhe për punëdhënësin e tij. Pse është e rëndësishme për një programues, mendoj se nuk ka nevojë të shpjegohet: ai shkruan kodin në të, dhe sa më i përshtatshëm të jetë ta shkruajë atë, aq më e lehtë do të jetë për të punuar. Sidoqoftë, menaxherët kompetentë kuptojnë se e ashtuquajtura komoditet i një mjedisi zhvillimi është, para së gjithash, produktiviteti i një punonjësi që shkruan dhe korrigjon programe. Prandaj, çdo drejtues kompetent e di pa mua se nuk ia vlen të kursehet në një mjedis të integruar zhvillimi (IDE). Sidoqoftë, ndonjëherë shfaqet dëshira për të kursyer para. Vërtetë, kjo është bërë gjithashtu mjaft me mençuri: blihet versioni më i lirë i mjedisit të zhvillimit dhe instalohet një version më i shtrenjtë dhe, në përputhje me rrethanat, më funksional.

Sidoqoftë, nuk është e nevojshme të kurseni në një mënyrë të tillë, e cila, në përgjithësi, nuk mund të quhet plotësisht e ligjshme. Ju mund të përdorni softuer falas në vend të këtij mashtrimi të softuerit komercial. Prit, mos pështy! E kuptoj, gjithçka që nuk duket si të dashurit Microsoft Visual Studio dhe / ose Delphi, në fillim i bezdis shumë, madje edhe në përmendjen e thjeshtë. Dhe ka një shpjegim logjik për këtë: shumica e softuerit falas për programuesit (veçanërisht për mjediset e zhvillimit), edhe në fillimin e parë, shkakton një nga dy ndjenjat jo më të mira njerëzore: ose neveri ose mërzi. Ndonjëherë - keqardhje e thellë dhe e sinqertë. Megjithatë, ki parasysh, shumica e tyre nuk janë të gjitha softuerët! Si rregull, produktet më të famshme pa pagesë dhe me burim të hapur meritojnë vërtet vëmendjen e zhvilluesve dhe udhëzuesve të tyre. Mjafton të kujtojmë projekte të tilla si Eclipse ose Dev-C ++. Dhe shumë të tjerë gjithashtu. Në fakt, nuk është më kot që gjithnjë e më shumë pjesëmarrës të rinj po i bashkohen lëvizjes me burim të hapur. Gjithnjë e më shumë produkte që dikur ishin komerciale po fitojnë tërheqje si projekte falas. Edhe pse ato produkte që filluan si burim të hapur, gjithashtu, pas një kohe bëhen mjaft konkurruese në krahasim me homologët e tyre tregtarë. Megjithatë, duhet theksuar se termi me burim të hapur nuk është gjithmonë sinonim me termin "softuer i lirë". Megjithëse, si rregull, programet me burim të hapur shpërndahen sipas licencave që ju lejojnë t'i përdorni ato pa asnjë honorar për zhvilluesit.

Mjedisi i zhvillimit, me të cilin tani dua t'ju prezantoj, është vetëm një nga ato produkte të mrekullueshme që ngjallin interes, e ndonjëherë edhe admirim. Ky program quhet, siç mund ta shihni nga titulli i artikullit, Code :: Blocks, dhe në internet mund të gjendet në www.codeblocks.org. Është menduar për zhvillimin e programeve duke përdorur C / C ++. Madhësia e shkarkimit varet nëse do ta shkarkoni mjedisin me ose pa përpilues. Gjithashtu varet nëse do të shkarkoni kodin burimor të IDE (dhe ato janë të disponueshme, pasi Kodi :: Blloqet shpërndahen nën Licencën e Përgjithshme Publike GNU), ose skedarë të përpiluar tashmë. Në përgjithësi, vëllimi i shkarkimit varion nga tre në trembëdhjetë megabajt, që në fakt nuk është aq shumë për një mjedis të mirë zhvillimi.

Pra, mjedisi është i instaluar. Në fillimin e parë, syri është i kënaqur me ekranin e mirëseardhjes të ekzekutuar bukur, i cili zakonisht nuk është tipik për produktet e softuerit falas. Tashmë me të mund të gjykohet serioziteti i qasjes së autorëve të Code :: Blloqe për zhvillimin e pasardhësve të tyre.

Çfarë është gati mjedisi i zhvillimit t'i ofrojë programuesit që e përdor atë? Jo aq i vogël, veçanërisht kur krahasohet me disa IDE të tjera falas. Së pari, ndër-platformë. Megjithatë, ai është i kufizuar në dy platforma: Windows dhe Linux. Jo shumë, por këto janë sistemet kryesore operative në treg. Megjithatë, mbështetja për disa të tjerë (për shembull, Mac OS X) do të ishte ende e dobishme. Personalisht, kam shkarkuar versionin për Windows, megjithatë, duke gjykuar nga pamjet e ekranit në faqen e zhvilluesve, nën Linux ky program nuk duket më keq.

Së dyti, të gjithë mund të lidhin kompajlerin që i pëlqen më shumë me mjedisin. Ose ai që është më i njohur për t'u përdorur. Dhe përpiluesit mjedisi i zhvillimit mbështet sa vijon: GCC (MinGW për Windows), Microsoft Visual C ++ Compiler, Digital Mars, Borland C ++ (versioni 5.5), Open Watcom dhe Sun DCC. Nëse keni shkarkuar mjedisin së bashku me përpiluesin, atëherë sigurisht që do të jetë GCC. Vetë mjedisi i kalon kompajlerit të gjithë çelësat e nevojshëm që ai të punojë me opsionet e dhëna. Për më tepër, përpilimi mund të kryhet si drejtpërdrejt ashtu edhe përmes skedarëve të krijuar, të cilët Kodi :: Blloqe gjithashtu mund t'i gjenerojnë plotësisht në mënyrë të pavarur.

Së treti, Code :: Blocks ka një redaktues kodi të përshtatshëm dhe shumëfunksional që mbështet theksimin e sintaksës dhe palosjen (palosjen) e blloqeve të kodit. Për më tepër, mjedisi është në gjendje të punojë jo vetëm me tekste në C / C ++, por edhe me skedarë XML. Në të majtë në dritaren e programit ka një udhëzues për klasat e përdorura në tekstin e tij, si dhe një listë të të gjitha variablave, konstantave, klasave dhe hapësirave të emrave të përdorura. Ekziston gjithashtu një pemë e burimeve dhe një listë e variablave që shihen gjatë korrigjimit. Ajo që është e bukur është se të gjithë skedar i hapur në mjedis ka skedën e vet. Është një qasje e dobishme dhe është e mrekullueshme që gjithnjë e më shumë IDE po e përdorin atë.

Së katërti, mjedisi Code :: Blocks mbështet shtojcat, domethënë shtojcat. Ky është një veçori vërtet e dobishme dhe me ndihmën e saj zhvilluesit kanë zbatuar disa gjëra që janë të përshtatshme për një programues që përdor Code :: Blocks. Dhe kryesore e këtyre gjërave është, sigurisht, sugjerimet që shfaqen në ekran ndërsa shkruani kodin dhe përmbajnë lista të metodave të klasës dhe parametra të metodave ose funksioneve. Kjo veçori zbatohet, për mendimin tim, jo ​​më keq se në shumë mjedise të zhvillimit komercial. Ndër shtojcat e tjera me të cilat mund të mburret faqja e projektit Code :: Blocks, më duket se ia vlen të kujtoj magjistarin e formatimit të kodit, magjistarin për krijimin e klasave të reja, llogaritjen e statistikave mbi kodin burimor të projektit dhe magjistarin për futjen e XP Manifest në burimet e projektit. . Nëse ju, si unë, keni shkarkuar versionin më të madh të Code :: Blocks (ai me përpiluesin), atëherë tashmë i keni të gjitha këto shtojca. Natyrisht, të gjithë mund të krijojnë shtojcën e tyre për mjedisin e zhvillimit. Për ta bërë këtë, do t'ju duhet të shkarkoni një SDK të veçantë (Kit për Zhvillimin e Softuerit - komplet zhvillimi software) nga faqja e projektit.

Mjedisi përdor GNU Debugger si korrigjues. Puna me të praktikisht nuk ndryshon nga puna me korrigjuesit. mjediset e Microsoft dhe Borland. Gjithashtu në mjedis ka mbështetje për një listë të atyre gjërave që zhvilluesi duhet të bëjë në aplikacion (lista e detyrave). Mund të konfigurohet në atë mënyrë që nëse mjedisi përdoret nga disa zhvillues, për secilin prej tyre ai do të jetë i tij dhe i pavarur nga listat e zhvilluesve të tjerë. Është gjithashtu i përshtatshëm për të punuar me projekte në mjedis. Ato, si në Microsoft Visual Studio, janë të ndara nga cilësimet e hapësirës së punës dhe, çfarë është mirë, si projektet ashtu edhe mjedisi i hapësirës së punës mund të importohen nga formati Visual Studio. Meqë ra fjala, projektet mund të importohen edhe nga formati Dev-C ++ Vërtetë, këto veçori përshkruhen thjesht teorikisht nga vetë zhvilluesit e IDE, dhe unë vetë nuk mund të them asgjë për to, pasi unë vetë nuk i kam provuar ato në veprim.

Kodi :: Blocks ka një veçori tjetër të rëndësishme që e veçon atë nga shumë mjedise të tjera zhvillimi. Ky mjedis ka një integrim të ngushtë me bibliotekën wxWidgets, i krijuar për të krijuar një ndërfaqe grafike të përdoruesit (dikur kam shkruar për të në "Computer News"). Kjo bibliotekë ka shumë përparësi, prandaj zhvilluesit e Code :: Blocks bënë një lëvizje të shkëlqyer strategjike, duke e orientuar produktin e tyre drejt punës me këtë bibliotekë të mrekullueshme. Vërtetë, kjo zbatohet, përsëri, me ndihmën e një shtojce të quajtur wxSmith, por këto nuk janë detajet më domethënëse. Shtojca lejon zhvillimin e ndërfaqes së aplikacionit në një mënyrë vizuale, e cila nuk mund të mos vlerësohet nga zhvilluesit. Sidomos ata që janë përpjekur të krijojnë një ndërfaqe në një mënyrë jo-vizuale. Mënyra e redaktimit është e ngjashme me atë të Microsoft Visual C ++ ose Borland C ++ Builder. Një projektues i ngjashëm, një redaktues i ngjashëm për vetitë e objektit. Duke pasur parasysh natyrën ndër-platformë të wxWidgets dhe Code :: Blocks, kjo është një veçori absolutisht e shkëlqyer.

Epo, këtu është një IDE kaq e bukur dhe e dobishme e quajtur Code :: Blocks. Ndoshta shumë do të thonë se është larg nga Visual Studio ose Borland Developer Studio, dhe, natyrisht, ata do të kenë të drejtë. I mungon, si në versionet moderne të këtyre mjediseve komerciale, aftësia për të zhvilluar aplikacione në shumë gjuhë dhe për të zhvilluar për platformën .NET. Sidoqoftë, ky mjedis është shumë më i lehtë dhe më kompakt se përbindëshat nga Microsoft dhe Borland. Përveç kësaj, për krijimin e aplikacioneve ndër-platformë për Windows dhe Linux, kombinimi i Code :: Blocks dhe wxWidgets duket të jetë një nga opsionet më të mira midis të gjitha opsioneve të mundshme. Pra, mos ia ktheni menjëherë shpinën softuerit të lirë. Më mirë të provoni së pari dhe më pas të vendosni nëse do të largoheni apo jo. Të vërtetat e zakonshme? Ndoshta. Por sa më banale të jetë deklarata, aq më e vështirë është për një person të vetëm ta arrijë atë.

Vadim STANKEVICH

Kodi i Mjedisit të Integruar të Zhvillimit (IDE) :: Blocks (në tekstin e mëtejmë CB) është një produkt i plotë për zhvillimin e aplikacioneve në C / C ++. CB është një kornizë ndër-platformash e zhvilluar duke përdorur bibliotekën e mjeteve wxWidgets. Ekzistojnë versione të mjedisit për Windows dhe sisteme të tjera operative (OS) - Linux dhe Mac OS. Ky IDE është plotësisht falas, me burim të hapur dhe i ndërtuar tërësisht duke përdorur teknologjitë e hapura... Një nga më pikat e forta CB është të mbështesë krijimin e aplikacioneve wxWidgets - domethënë, softuer që përdor API-në e OS për të dhënë një ndërfaqe grafike të përdoruesit (GUI). Me fjalë të tjera, CB ju lejon të krijoni softuer ndër-platformë për çdo shije.

CB mund të punojë me sasi e madhe përpiluesit. Nëse ka disa prej tyre të instaluara në sistem, mund të kaloni lehtësisht ndërmjet tyre, në varësi të nevojave tuaja. Plus, vetë IDE, në fazën e instalimit, do të skanojë sistemin për përpilues të disponueshëm dhe do të ofrojë përdorimin e njërit si kryesor. Është e mundur që më vonë të ndryshohen këto cilësime si globalisht ashtu edhe veçmas për projektet. Për parametrat globale mjedisi, ekziston një seksion i tërë "Cilësimet" në menunë kryesore të CB. Për të bërë ndonjë cilësim specifik specifik për një projekt specifik, duhet të hapni dritaren e vetive të projektit. Për ta bërë këtë, duhet të telefononi menyja e kontekstit projektoni duke klikuar mbi të me butonin e djathtë të miut dhe zgjidhni artikullin "Properties". Vetë projektet (të hapura në ky moment në IDE) shfaqen si një pemë në dok "Menaxhimi", në skedën "Projektet". Tani, në dritaren e veçorive që hapet, mund të konfiguroni një shumëllojshmëri të gjerë parametrash, nga redaktimi i objektivave të ndërtimit deri te lidhja e bibliotekave të palëve të treta. Butoni "Opsionet e ndërtimit të projektit" në skedën "Cilësimet e projektit" të së njëjtës dritare të vetive do t'ju lejojë të konfiguroni në mënyrë shumë fleksibël konfigurimin e ndërtimit për një projekt specifik: çelësat e përpiluesit, zgjidhni vetë përpiluesin, lidhni bibliotekat për lidhësin, etj. E gjithë kjo mund të bëhet për mënyra individuale: "Lësho" "Debug".

GUI CB është ndërtuar rreth dokeve lundruese dhe shtrirëse që mund të ngjiten në të dyja anët e dritares kryesore të IDE thjesht duke zvarritur dhe hedhur. Falë kësaj, është e mundur që në mënyrë shumë fleksibël të personalizohen paraqitjet e ndryshme të ndërfaqes madhësive të ndryshme ekran, duke optimizuar ergonominë e GUI-së. Nëse ka disa monitorë, është e përshtatshme të ndani disa panele nga dritarja kryesore dhe t'i vendosni ato në monitorët ngjitur.

Veglat e nënvizimit, plotësimit dhe redaktimit të kodit në CB e bëjnë procesin e punës me kod të lehtë dhe komod. Një arsenal i madh cilësimesh ju lejon të personalizoni shumë imët mjedisin "për veten tuaj". Është shumë e dobishme të kesh mbështetje për të punuar me variablat e mjedisit. Falë kësaj veçorie, CB mund të integrohet fort në sistem dhe të zgjerojë aftësitë e tij, për shembull, në këtë mënyrë mund të lidhni bibliotekën wxWidgets.

Unë dua t'ju tregoj për përvojën time të parë në zhvillimin e lojërave. Duhet të theksohet menjëherë se artikulli do të jetë thjesht teknik, pasi qëllimi im ishte vetëm të fitoja aftësi në zhvillimin e aplikacioneve grafike duke përdorur Direct3D, pa përfshirë mjete të zhvillimit të lojërave të nivelit të lartë si Unity. Prandaj, nuk do të flitet as për zbatimin, fitimin e parave dhe promovimin e lojës. Artikulli ka për qëllim fillestarët në programimin e aplikacioneve Direct3D, si dhe thjesht për njerëzit e interesuar në mekanizmat kryesorë të punës. aplikacione të ngjashme... Gjithashtu, në fund, ju paraqes një listë të literaturës për zhvillimin e lojërave, të zgjedhura me kujdes nga unë nga më shumë se njëqind libra për programimin e lojërave dhe grafika kompjuterike.

Prezantimi

Kështu që, në kohën time të lirë, vendosa të eksploroja API-në e njohur të grafikës. Pasi lexova disa libra dhe analizova një mori shembujsh dhe mësimesh (përfshirë nga DirectX SDK), kuptova se ka ardhur pikërisht momenti kur ia vlen të provosh vetë. Problemi kryesor ishte se shumica e shembujve ekzistues thjesht demonstrojnë njërën ose tjetrën Aftësia API dhe zbatohen proceduralisht në pothuajse një skedar cpp, madje edhe duke përdorur mbështjellësin DXUT, dhe nuk japin një ide se çfarë strukture duhet të ketë aplikacioni përfundimtar, cilat klasa duhet të dizajnohen dhe si duhet të ndërveprojnë të gjitha me njëri-tjetrin kështu se gjithçka ishte e bukur, e lexueshme dhe funksiononte me efikasitet. Ky disavantazh vlen edhe për librat në Direct3D: për shembull, për shumë fillestarë nuk është e qartë që gjendjet e renderit nuk kanë nevojë gjithmonë të përditësohen kur jepni çdo kornizë, dhe gjithashtu se shumica e operacioneve me peshë të rëndë (si p.sh. mbushja e bufferit të kulmit ) duhet të kryhet vetëm një herë kur filloni aplikacionin (ose kur ngarkoni një nivel loje).

Ideja

Para së gjithash, më duhej të vendosja për vetë idenë e lojës. Një lojë e vjetër nga viti 1992 nën MS-DOS erdhi menjëherë në mendje, e cila, mendoj, është e njohur për shumë njerëz. Kjo është loja logjike Lines nga Gamos.

Epo, sfida pranohet. Ja çfarë kemi:

  • ka një fushë katrore të qelizave;
  • ka topa shumëngjyrësh në qelizat në fushë;
  • pas lëvizjes së topit, shfaqen topa të rinj;
  • qëllimi i lojtarit është të rreshtojë topa me një ngjyrë në një rresht: grumbullimi i një numri të caktuar topash me një ngjyrë në një rresht çon në shpërthimin e tyre dhe dhënien e pikëve;
  • detyra kryesore është të mbash sa më gjatë që të jetë e mundur derisa fusha të mbarojë pa qeliza të lira.
Tani le të shohim nga këndvështrimi i një aplikacioni Direct3D:
  • do të bëjmë një fushë qelizash në formën e një platforme tre-dimensionale me zgjatime, secila qelizë do të jetë diçka si një podium;
  • duhet të zbatohen tre lloje të animacionit të topit:
    1. pamja e topit: fillimisht shfaqet një top i vogël, i cili në një kohë të shkurtër rritet në një madhësi të rritur;
    2. lëvizja e topit: vetëm ka një lëvizje sekuenciale nëpër qeliza;
    3. top kërcim: kur zgjidhni një top me miun, ai duhet të aktivizohet dhe të fillojë të kërcejë në vend;
  • duhet të zbatohet një sistem grimcash për t'u përdorur në animacionin e shpërthimit;
  • prodhimi i tekstit duhet të zbatohet: për të shfaqur pikët e fituara në ekran;
  • menaxhimi duhet të zbatohet kamera virtuale: rrotullimi dhe zmadhimi.
Në fakt, pikat e listuara më sipër janë një pamje e mjerueshme e një dokumenti të quajtur projekt projektimi. Unë rekomandoj fuqimisht që të shkruani gjithçka deri në detajet më të vogla përpara se të filloni zhvillimin, ta printoni dhe ta mbani para syve! Duke parë përpara, unë tregoj menjëherë një video demo për qartësinë e zbatimit të pikave (nga rruga, videoja u regjistrua duke përdorur programin ezvid, kështu që mos u shqetësoni nga spërkatja e ekranit të tyre në fillim):

Fillimi i zhvillimit

Deri më tani nuk kam përmendur se cilat mjete janë përdorur. Së pari, keni nevojë për softuer DirectX komplet zhvillimi(SDK), gjithmonë i disponueshëm për shkarkim falas nga faqja e internetit e Microsoft: DirectX SDK. Nëse do të përdorni versionin Direct3D 9, si unë, atëherë pas instalimit duhet të hapni Panelin e Kontrollit të DirectX përmes menysë kryesore dhe në skedën Direct3D 9 zgjidhni se cili version i bibliotekave do të përdoret gjatë ndërtimit - me pakicë ose korrigjimi (kjo ndikon nëse Direct3D do të raportojë korrigjuesin për rezultatet e aktiviteteve të tij):

Debug ose shitje me pakicë


Pse Direct3D 9? Sepse ky është versioni më i fundit, ku ka ende një tubacion me funksion fiks, domethënë një tubacion fiks grafike që përfshin, për shembull, funksione për llogaritjen e ndriçimit, përpunimin e kulmeve, përzierjen, etj. Duke filluar me versionin 10, zhvilluesit inkurajohen t'i zbatojnë në mënyrë të pavarur këto funksione në shader, që është avantazh i pamohueshëm, por, për mendimin tim, është e vështirë të kuptohet në eksperimentet e para me Direct3D.

Pse Kodi :: blloqe? Ndoshta ishte marrëzi të përdorje një IDE ndër-platformë për të zhvilluar një aplikacion që përdor një API jo-platformë. Është vetëm se blloqet Code :: zënë disa herë më pak hapësirë ​​sesa Visual Studio, e cila doli të ishte shumë e rëndësishme për PC-në e vendit tim.

Fillimi me Direct3D doli të ishte shumë i lehtë. Në blloqet Code :: unë krijova një projekt bosh, më pas duheshin bërë dy gjëra në opsionet e ndërtimit:

1) Në skedën e drejtorive të kërkimit dhe nën-skedën e përpiluesit, shtoni shtegun në direktorinë e përfshirë DirectX SDK - për shembull, si kjo:

Kërko drejtoritë



2) Në skedën lidhëse, shtoni dy biblioteka - d3d9.lib dhe d3dx9.lib:

Lidhës



Pas kësaj në Kodi i burimit aplikacioni do të duhet të përfshijë skedarët e kokës Direct3D:

#include "d3d9.h" #include "d3dx9.h"

Struktura e aplikimit

Këtu bëra gabimin tim të parë: fillova të mendoj se cilin model dizajni të zgjedh. Arrita në përfundimin se MVC (model-view-kontroller) është më i përshtatshmi: modeli do të jetë klasa e lojës (lojë), e cila përfshin të gjithë logjikën - llogaritjen e shtigjeve të lëvizjes, shfaqjen e topave, analizimin e kombinimeve shpërthyese; pamja do të jetë klasa e motorit përgjegjës për paraqitjen dhe ndërveprimin me Direct3D; kontrolluesi do të jetë vetë mbështjellësi (aplikacioni) - kjo përfshin ciklin e mesazhit, trajtimin e hyrjes së përdoruesit dhe, më e rëndësishmja, menaxherin e shtetit dhe sigurimin e ndërveprimit të lojës dhe objekteve të motorit. Gjithçka duket të jetë e thjeshtë, dhe mund të filloni të shkruani skedarë me kokë, por ja ku ishte! Në këtë fazë, doli të ishte shumë e vështirë për të lundruar dhe kuptuar se çfarë metodash duhet të kenë këto klasa. Është e qartë se ndikoi mungesa e plotë e përvojës dhe vendosa t'i drejtohem këshillës së njërit prej librave: “Mos u mundoni të shkruani kod të përsosur që në fillim, le të jetë nën-optimal dhe i çrregullt. Kuptimi vjen me kalimin e kohës dhe rifaktorimi mund të bëhet më vonë”. Si rezultat, pas disa përsëritjesh të rifaktorimit plan urbanistik tashmë duke punuar përkufizimi i tre klasave kryesore mori formën:

Klasa TGame

klasa TGame (private: BOOL gameOver; qelizat TCell *; shteg WORD *; shtegu WORDLen; rezultati LONG; i pavlefshëm ClearField (); WORD GetSelected (); WORD GetNeighbors (WORD cellId, WORD * pNeighbors); BOOL CheckPipeORDiPiP; publik: TGame (); ~ TGame (); i pavlefshëm i ri (); BOOL CreateBalls (numërimi i WORD); Zgjedhja e pavlefshme (WORD cellId); BOOL TryMove (WORD targetCellId); BOOL DetonateTest (); WORD GetNewBallList (TBallInfo **) ppNewL WORD GetLastMovePath (WORD ** ppMovePath);WORD GetDetonateList (WORD ** ppDetonateList); LONG GetScore ();BOOL IsGameOver ();


Klasa e motorit

klasë TEngine (private: HWND hWindow, rect WinRect, D3DXVECTOR3 CameraPos, LPDIRECT3D9 pD3d, LPDIRECT3DDEVICE9 pDevice, LPDIRECT3DTEXTURE9 pTex, LPD3DXFONT pFont, balls D3DPRESENT settings_PARAM jumpAnimation; TAnimate * moveAnimation; TAnimate * appearAnimation, LONG rezultati; void InitD3d (); void InitGeometry ( ); i pavlefshëm InitAnimation (); i pavlefshëm DrawPlatform (); i pavlefshëm DrawBalls (); i pavlefshëm UpdateView (); publik: TEngine (HWND hWindow ; ~ TEngine (); i pavlefshëm AppearBalls (TBallInfo * ballInfo, numërimi i WORD); i pavlefshëm MoveBall (WORD) shteg, WORD shtegLen); i pavlefshëm DetonateBalls (WORD * detonateList, numërimi i fjalëve); BOOL IsSelected (); BOOL IsMoving (); BOOL IsDetonating (); BOOL IsDetonating (); Void OnResetGame (); WORD OnClick (WORD x, WORD , BOOL * IsCell); i pavlefshëm OnRotateY (zhvendosja INT); i pavlefshëm OnRotateX (zhvendosja INT); i pavlefshëm OnZoom (zoom INT); i pavlefshëm OnResize (); i pavlefshëm OnUpdateScore (LONG pikë); void Render (); );


Klasa e aplikimit TA

Aplikacioni i klasës TA (privat: HINSTANCE hInstance; HWND hWindow; POINT mouseCoords; TEngine * motori; lojë TGame *; BOOL lëviz Filloi; BOOL detonateStarted; BOOL duketStarted; i pavlefshëm RegWindow (); statik volum RegWindow (), LRESULTAM pmPaintmeProgrami, statik LRESULTAMLPMAMG; ; publik: TApplication (HINSTANCE hInstance, INT cmdShow);~ TApplication ();TEngine * GetEngine ();TGame * GetGame (); INT MainLoop ();


Klasa TGame ka vetëm 3 metoda që përdoruesi mund të iniciojë - New (një lojë e re), Select (zgjidh një top) dhe TryMove (një përpjekje për të lëvizur një top). Pjesa tjetër janë ndihmëse dhe thirren nga kontrollori në raste të veçanta. Për shembull, DetonateTest (test për kombinime shpërthyese) quhet pas shfaqjes së topave të rinj ose pas një përpjekjeje për të lëvizur. GetNewBallList, GetLastMovePath, GetDetonateList quhen përkatësisht pas shfaqjes së topave, pas lëvizjes dhe pas shpërthimit, me një qëllim: të merret një listë e topave specifike dhe t'ia kalojë motorit për përpunim në mënyrë që ai të nxjerrë diçka. Nuk dua të ndalem në logjikën e punës së TGame në detaje, pasi ka kode burimore me komente. Do të them vetëm se përkufizimi i rrugës së lëvizjes së topit zbatohet duke përdorur algoritmin e Dijkstra për një grafik të padrejtuar me pesha të barabarta të të gjitha skajeve.

Le të hedhim një vështrim më të afërt në klasat e motorit dhe të kontrolluesit.

TE motorri

  • Klasa përcakton fushat për ruajtjen e dorezës së dritares dhe drejtkëndëshit të saj. Ato përdoren në metodën OnResize që kontrolluesi thërret kur dritarja ndryshohet për të llogaritur një matricë të re projeksioni.
  • Fusha CameraPos ruan koordinatat e vëzhguesit në hapësirën botërore. Nuk ka nevojë të ruhet vektori i drejtimit të pamjes, pasi, sipas idesë sime, kamera drejtohet gjithmonë në origjinën e koordinatave, e cila, nga rruga, përkon me qendrën e platformës.
  • Ekzistojnë gjithashtu tregues për ndërfaqet Direct3D: LPDIRECT3D9, i cili nevojitet vetëm për të krijuar një pajisje; LPDIRECT3DDEVICE9 - në fakt, vetë pajisja Direct3D, ndërfaqja kryesore me të cilën duhet të punoni; LPD3DXFONT dhe LPDIRECT3DTEXTURE9 për të punuar me tekst dhe teksturë.
  • Fusha aktuale Koha përdoret për të ruajtur kohën aktuale në milisekonda dhe kërkohet për të dhënë një animacion të qetë. Fakti është se përpunimi i çdo kuadri kërkon një numër të ndryshëm milisekondash, kështu që ju duhet t'i matni këto milisekonda çdo herë dhe t'i përdorni ato si parametër kur ndërthurni animacionin. Kjo metodë njihet si sinkronizimi i kohës dhe përdoret kudo në aplikacionet moderne grafike.
  • Treguesit për objektet e TGeometrisë (Geometria e qelizës dhe Gjeometria e topit) ruajnë gjeometrinë e një qelize dhe një topi. Vetë objekti TGeometry, siç nënkupton edhe emri, është projektuar për të punuar me gjeometrinë dhe përmban buferë të kulmit dhe indeksit, si dhe një përshkrim të materialit (D3DMATERIAL9). Gjatë renderimit, ne mund të ndryshojmë matricën e botës dhe të thërrasim metodën Render të objektit TGeometry, i cili do të japë shumë qeliza ose topa.
  • TParticleSystem është një klasë e sistemit të grimcave që ka metoda për inicializimin e shumë grimcave, përditësimin e pozicioneve të tyre në hapësirë ​​dhe sigurisht përkthimin.
  • TBall * topa - një grup topash me informacione për ngjyrën dhe statusin [kërcejnë, lëvizin, dalin].
  • Tre objekte të tipit TAnimate - për të ofruar animacion. Klasa ka një metodë për inicializimin e kornizave kyçe, të cilat janë matricat e transformimit të botës, dhe metoda për llogaritjen e pozicionit aktual të animacionit dhe aplikimin e transformimit. Në rutinën e renderit, objekti i motorit jep në mënyrë sekuenciale topat dhe në mënyrë opsionale thërret metodën ApplyTransform të animacionit të dëshiruar për të deformuar ose lëvizur topin.
  • InitD3d, InitGeometry, InitAnimation thirren vetëm nga konstruktori TEngine dhe ndahen në metoda të veçanta për qartësi. InitD3d krijon një pajisje Direct3D dhe vendos të gjitha gjendjet e kërkuara të paraqitjes, duke përfshirë vendosjen e një drite pikë me një spekular direkt mbi qendër të platformës.
  • Tre metodat AppearBalls, MoveBall dhe DetonateBalls shkaktojnë përkatësisht animacionet e shfaqjes, lëvizjes dhe shpërthimit.
  • Metodat IsSelected, IsMoving, IsAppearing, IsDetonating përdoren në funksionin e menaxherit të gjendjes për të gjurmuar kur përfundon animacioni.
  • Metodat me prefiksin On thirren nga kontrolluesi kur ndodhin ngjarjet përkatëse: klikimet e miut, rrotullimi i kamerës, etj.
Le të hedhim një vështrim në metodën kryesore të Render:

TEngine :: Render ()

void TEngine :: Render () (// llogarit sa milisekonda kanë kaluar që nga vizatimi i kornizës së mëparshme clock_t kaloi = ora (), deltaTime = kaloi-currentTime; Current Time = kaloi; // përditësoni pozicionet e animacionit nëse janë aktive nëse ( jumpAnimation- > IsActive ()) (jumpAnimation-> UpdatePosition (deltaTime);) if (appearAnimation-> IsActive ()) (appearAnimation-> UpdatePosition (deltaTime);) if (moveAnimation-> IsActiveAnimate ())-mocioni (deltaTime );) pDevice-> Clear (0, NULL, D3DCLEAR_STENCIL | D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB (0,0,0), 1.0f, 0); pDevice-> FillimiPlatforma e skenës (DrawPlatform) ; vizatoni topa DrawBalls (); // nëse sistemi i grimcave është aktiv, atëherë përditësoni pozicionet e grimcave dhe jepini ato me një teksturë nëse (psystem-> IsActive ()) (pDevice-> SetTexture (0, pTex); psystem -> Përditësim (deltaTime); psystem-> Render (); pDevice-> SetTexture (0,0);) // shfaqja e pikëve të fituara char buf = "Rezultati:", tmp; itoa (rezultati, tmp, 10); strcat (buf, tmp), fontRect RECT; fontRect.left = 0; fontRect.right = GetSystemMetrics (SM_CXSCREEN); fontRect.top = 0; fontRect.bottom = 40; pFont-> DrawText (NULL, _T (buf), - 1, & fontRect, DT_CENTER, D3DCOLOR_XRGB (0,255,255)); pDevice-> EndScene (); pDevice-> Present (NULL, NULL, NULL, NULL); )


Që në fillim, ai llogarit sa milisekonda kanë kaluar nga thirrja e mëparshme për Render (), atëherë përparimi i animacionit përditësohet, nëse ato janë aktive. Buferët pastrohen me metodën Clear dhe platforma, topat dhe sistemi i grimcave vizatohen në mënyrë sekuenciale, nëse është aktive. Së fundi, shfaqet një rresht me vlerën aktuale të pikëve të fituara.

Aplikacioni TA

  • Klasa ka një fushë për ruajtjen e koordinatave të miut, pasi do të duhet të llogarisim vlerat e zhvendosjes relative të kursorit në mënyrë që të rrotullojmë kamerën.
  • Për të gjurmuar statusin e animacioneve përkatëse kërkohen booleanët e shfaqur Filloi, lëviz Filloi dhe detonateStarted.
  • Metoda RegWindow përmban kodin për regjistrimin e klasës së dritares.
  • Metoda statike MsgProc është një procedurë e ashtuquajtur dritare.
  • ProcessGame është një version i thjeshtuar i menaxherit të shtetit, i cili vlerëson gjendjen aktuale të lojës dhe ndërmerr disa veprime në varësi të saj.
  • MainLoop - cikli i mesazheve.
Këtu është një kontrollues i lehtë. Një lak i ngjashëm mesazhesh mund të gjendet në çdo libër Direct3D:

TApplication :: MainLoop ()

INT TApplication :: MainLoop () (msg MSG; ZeroMemory (& msg, sizeof (MSG)); ndërsa (msg.message! = WM_QUIT) (nëse (PeekMessage (& msg, NULL, 0,0, PM_REMOVE)) (TranslateMes (& msg ); DispatchMessage (& msg);) tjetër (// nëse nuk ka mesazhe, atëherë përpunoni gjendjen e lojës dhe jepni ProcessGame (); engine-> Render ();)) ktheni (INT) msg.wParam; )


E vetmja gjë që meriton vëmendje është ajo që ndodhet brenda bllokut else - ky është i ashtuquajturi IdleFunction, i cili ekzekutohet në mungesë të mesazheve.

Dhe këtu është funksioni i menaxherit të shtetit:

TApplication :: ProcessGame ()

void TApplication :: ProcessGame () (nëse (moveStarted) (// prisni derisa animacioni i lëvizjes të përfundojë nëse (! engine-> IsMoving ()) (// lëvizja ka mbaruar - testi për shpërthimin moveStarted = FALSE; nëse (loja-> DetonateTest ( )) (// nis një shpërthim dhe rrit pikët WORD * detonateList, numëro = lojë-> GetDetonateList (& detonateList); detonateStarted = E VËRTETË; motor-> DetonateBalls (detonateList, count); motor-> OnUpdateScore (loja-> GetScore ()) ;) tjetër (// përndryshe ne përpiqemi të shtojmë topa nëse (loja-> CreateBalls (APPEAR_COUNT)) (TBallInfo * lista e paraqitjes; numërimi i fjalëve = lojë-> GetNewBallList (& shfaq List); shfaqetStarted = E VËRTETË; motor-> AppearBalls (appearList, count); ) other (// loja mbaroi!)))) if (appearStarted) (// prisni derisa animacioni të përfundojë nëse (! engine-> IsAppearing ()) (appearStarted = FALSE; // pamja ka mbaruar - testoni për një shpërthim vetëm në rast se (loja-> DetonateTest ()) (// filloni një shpërthim dhe rritni pikët WORD * detonateList, numëroni = lojë-> GetDetonateList (& detonateList); det onateStarted = E VËRTETË; motor-> DetonateBalls (detonateList, count); motor-> OnUpdateScore (lojë-> GetScore ()); ))) if (detonateStarted) (// prisni derisa animacioni i shpërthimit të përfundojë nëse (! engine-> IsDetonating ()) (// thjesht rivendosni flamurin detonateStarted = FALSE;)))


Epo, ndoshta kjo është e gjitha!

Shpresoj se hulumtimi im do të përfitojë dikë. Nga rruga, burimet janë në github.

Faleminderit per vemendjen!

Letërsi e premtuar

1. Frank D. Luna Një hyrje në programimin e lojërave 3D me DirectX 9.0 - për të kuptuar bazat;
2. Mësimet e programimit Gornakov S. DirectX9 në C ++ - gjithashtu bazat, por ka kapituj për DirectInput, DirectSound dhe DirectMusic. Nganjëherë ndodhin gabime në programet e mostrës;
3. Flenov ME DirectX dhe C ++ arti i programimit - një stil qesharak i prezantimit. Në thelb, qëllimi i librit është të krijojë animacione duke përdorur efekte interesante, duke përfshirë shader. Gjykoni vetë sipas titujve të rubrikave: infarkt, dragua zjarri;
4. Barron Todd Programimi i lojërave strategjike me DirectX 9 - plotësisht të përkushtuar ndaj temave që lidhen me lojërat strategjike: grafika në bllok, AI, krijimi i hartave dhe peizazheve, sprites, efektet speciale me sistemet e grimcave, si dhe zhvillimi i ndërfaqeve të ekranit dhe puna me DirectSound / Muzikë ;
5. Bill Fleming 3D Creature Workshop - një libër jo për programimin, por për zhvillimin e modeleve tredimensionale të karaktereve në LightWave, 3D Studio Max, Animation Master;
6. Ndërfaqet e përdoruesit Thorn Alan DirectX 9 Dizajnimi dhe zbatimi - libër i detajuar rreth zhvillimit ndërfaqet grafike me DirectX. Është shqyrtuar një model hierarkik i komponentëve format e ekranit, e ngjashme me atë të zbatuar në Delphi;
7. Animacioni i avancuar i Adams Jim me DirectX - diskuton llojet e animacionit (skelet, morfim dhe varietetet) dhe zbatimin e tyre, si dhe punën me gjeometrinë dhe animacionin nga skedarët X;
8. Lamotte Andre Lojëra programimi për Windows. Këshilla profesionale - ky libër është tashmë më serioz: diskuton çështjet e optimizimit, zgjedhjen e strukturave të të dhënave për detyra të ndryshme, multithreading, modelimi fizik, AI. Kapitulli i fundit përshkruan se si të krijoni një lojë rreth anije kozmike dhe të huajt;
9. David H. Eberly 3D Dizajni i motorit të lojërave është një libër i mirë për të kuptuar të gjithë teorinë e zhvillimit të lojës: fillimisht përshkruan teknologjitë e API-së grafike (transformimet, rasterizimi, hijezimi, përzierja, multiteksturimi, mjegulla, etj.), pastaj tema të tilla si. grafiku i skenës, përzgjedhja e objekteve, zbulimi i përplasjeve, animimi i personazheve, niveli i detajeve, peizazhet;
10. Daniel Sánchez-Crespo Dalmau Teknikat dhe algoritmet thelbësore në programimin e lojërave - diskuton në detaje algoritmet dhe strukturat e të dhënave të përdorura në detyrat e zhvillimit të lojës, të tilla si AI, skriptimi, interpretimi në hapësira të mbyllura dhe të hapura, algoritmet e prerjes, teknikat procedurale, mënyrat e zbatimi i hijeve, zbatimi i kamerës, etj.;
11. Lamotte André Programimi Lojëra me role me DirectX 9 - mijë faqe manual i detajuar në zhvillimin e RPG. Përfshin të dy kapitujt teorikë mbi programimin me Direct3D, DirectInput, DirectSound, DirectPlay dhe kapitujt e aplikuar që lidhen drejtpërdrejt me motorin e lojës.

Etiketa: Shto etiketa

Mirëdita të dashur miq. Me këtë artikull, unë filloj një seri mësimesh kushtuar një prej gjuhëve më të njohura të programimit - C ++. Mësimet u drejtohen kryesisht përdoruesve që nuk janë të njohur me programimin, prandaj profesionistë, mos u bëni të rreptë, megjithëse unë mbështes kritikat, veçanërisht në adresën time. Në mësimet e mia, unë do të përdor mjedisin e zhvillimit Code :: Blocks, i cili mund të shkarkohet dhe përdoret falas. Le të fillojmë, natyrisht, me klasikun Hello, botë =)

Shpresoj ta keni shkarkuar dhe instaluar tashmë Kodin :: Blloqe, nëse po, le të fillojmë. Nisja e mjedisit të zhvillimit

Para së gjithash, krijoni një projekt të ri bosh File-> New-> Project dhe zgjidhni Empty project

klikoni Shko, pastaj Next


dhe në dritaren që shfaqet, në fushën e titullit të projektit, shkruani titullin e projektit, në emrin e skedarit të projektit emrin e projektit dhe përsëri Next.


Në dritaren tjetër, fshini dir Objects nga konfigurimi Krijo "Debug" dhe Krijo seksionet e konfigurimit "Release", siç tregohet në pamjen e mësipërme dhe klikoni në butonin Finish. Një projekt me emrin "Hello world" duhet të shfaqet në të djathtë.

Hapi tjetër, shtoni skedarin File-> New-> FIle ... në projekt dhe zgjidhni burimin c / c ++ në dritaren që shfaqet.

Shkoni përsëri, Next, zgjidhni C ++, Next dhe shikoni dritaren e mëposhtme

,

këtu duhet të specifikojmë emrin e skedarit (e kam quajtur main) dhe rrugën e tij, mundësisht dosjen me projektin. Kontrolloni kutitë Debug dhe Release dhe klikoni Finish.

Dhe morëm një skedar bosh C ++ në të cilin do të shkruajmë vetë kodin e programit.

Tani fillojmë të shkruajmë vetë kodin e programit. Për të shfaqur informacionin në ekran, na duhet biblioteka iostream I / O.

#përfshi

duke përdorur hapësirën e emrave std;

Pastaj shkruajmë funksioni kryesor i cili do të ekzekutohet kur të fillojë programi

int main ()

ai duhet të quhet "kryesor" dhe të specifikojë llojin int për të (ne do të flasim për këtë në mësimet e ardhshme). Ndërmjet mbajtëse kaçurrelë dhe do të gjendet kodi i programit. Ne do të shkruajmë një program të thjeshtë që printon përshëndetjen "Përshëndetje, botë!" në tastierë.

cout<<"Përshendetje Botë!" ;

Pas çdo komande është e nevojshme të vendoset një ";", kjo i tregon kompajlerit se komanda ka përfunduar dhe tjetra mund të përpunohet. cout - Printon vlerat e variablave ose vargjeve në vijën e komandës.

Lista e plotë e programit.

#përfshi

duke përdorur hapësirën e emrave std;

int kryesore ()

cout<< "Hello, world!" ;

kthimi 0 ;

Ne nisim projektin dhe shohim rezultatin.


Më poshtë po i bashkëngjis një video tutorial këtij artikulli.

Nëse keni ndonjë pyetje, ju lutemi shkruani komentet tuaja në Kjo adresë emaili mbrohet nga reklamat e padëshiruara. Ju duhet të aktivizoni JavaScript për ta parë atë. ,">Kjo adresë emaili mbrohet nga reklamat e padëshiruara. Ju duhet të aktivizoni JavaScript për ta parë atë., do të finalizoj mësimet ose thjesht do të ndihmoj në studimin e materialeve.

  • < Назад

Zhvillimi i aplikacionit për pajisjet e integruara

Pjesa 2. Përdorimi i kodit :: Blloqe për zhvillimin e aplikacionit AVR

Seria e përmbajtjes:

Në artikullin e mëparshëm, ne përshkruam se si të përdorni Eclipse IDE për të krijuar aplikacione për mikroprocesorin e serisë AVR Atmel duke përdorur pajisjen e përpiluesit GNU AVR GCC. Ai mbuloi konfigurimin e Eclipse duke përdorur shtesën AVR, si dhe konfigurimin manual të mjedisit. Tani do të tregojmë se si mund të zgjidhet i njëjti problem duke përdorur një mjedis tjetër zhvillimi, më të lehtë dhe shumë të përshtatshëm Kodi :: Blloqe.

Njohja me mjedisin

Krijimi i projektit

Nëse ende nuk është krijuar asnjë projekt në hapësirën e punës, atëherë pas fillimit të Code :: Blocks në panelin qendror, vetëm skeda "Fillo këtu" është aktive. Për të krijuar një projekt të ri, zgjidhni komandën "Krijo një projekt të ri" ose artikullin e menysë "File-> New-> Project". Në çdo rast, do të hapet një dritare për zgjedhjen e një shablloni për një projekt të ardhshëm, në të cilin ne specifikojmë shabllonin "AVR Project" dhe shtypim butonin "Shko".

Dritarja e mirëseardhjes së magjistarit të projektit AVR do të shfaqet. Klikoni butonin Next dhe në kutinë e dialogut që hapet, shkruani emrin e projektit dhe drejtorinë në të cilën do të gjendet. Bazuar në këto të dhëna, programi automatikisht do t'i ofrojë përdoruesit emrin e skedarit të projektit me shtesën * .cbp dhe direktorinë e projektit që do të krijohet. Pastaj duhet të shtypni butonin "Next".

Dritarja tjetër ju kërkon të zgjidhni konfigurimet e ndërtimit që do të përdoren në projekt. Si parazgjedhje, të dy konfigurimet janë aktive: Debug dhe Release. Përpiluesi "GNU AVR GCC Compiler" është specifikuar paraprakisht. Gjithashtu këtu mund të ndryshoni drejtoritë e paracaktuara për skedarët e konfigurimit të përpiluar.

Në dritaren tjetër, ne tregojmë llojin e procesorit të synuar duke e zgjedhur atë nga lista rënëse (më vonë kjo mund të bëhet në parametrat e përpilimit). Nëse projekti përdor memorie të jashtme, duhet të specifikoni parametrat e saj. Më pas, duhet të vendosni vlerën e ndryshores globale të projektit F_CPU, duke specifikuar frekuencën e orës së procesorit në herc. Si parazgjedhje, aktivizohet krijimi i një skedari të hartës simbolike (.map) dhe skedarëve hex, si dhe i një skedari të listimit të çmontimit (.lss). Është gjithashtu e dobishme të aktivizoni parametrin "Run avr-size after build" - më pas në fund të projektit do të shfaqet informacioni i regjistrit të ndërtimit të projektit se sa hapësirë ​​do të zënë në kujtesën e programit dhe në kujtesë e gjallë... Për disa arsye, aktivizimi i opsionit të krijimit të listimit nuk ka asnjë efekt në krijimin e projektit dhe ju duhet të shtoni manualisht komandën e duhur në hapat e ndërtimit Para / pas. Klikoni butonin Finish (Figura 2).


Projekti krijohet dhe skedari i parë i shtohet automatikisht atij - main.c.

Vendosja e mjedisit të projektit dhe zhvillimit

Nëse projekti është krijuar duke përdorur shabllonin e projektit AVR, atëherë mund të filloni programimin pothuajse menjëherë. Megjithatë, ne do të kalojmë nëpër parametrat kryesorë për t'u siguruar që gjithçka është konfiguruar saktë.

  1. Zgjidhni artikullin e menysë "Projekt-> Opsionet e ndërtimit". Dritarja e cilësimeve të parametrave të ndërtimit do të hapet (Figura 3). Paneli i majtë përmban pemën e synuar të ndërtimit. Në nivelin më të lartë, ka cilësime ndërtimi për të gjithë projektin. Është më e përshtatshme që së pari të specifikoni parametrat për të gjithë projektin dhe vetëm atëherë të shtoni diçka në opsionet individuale të ndërtimit.

    Para së gjithash, duhet të siguroheni që "GNU AVR GCC Compiler" të jetë zgjedhur në fushën "Përpiluesi i zgjedhur". Më poshtë, në skedën "Flamujt e përpiluesit", janë flamujt e përpiluesit. Si parazgjedhje, flamuri i dobishëm "Aktivizo të gjitha paralajmërimet e përpiluesit" është aktivizuar tashmë këtu. Vlen gjithashtu të sigurohemi që kemi zgjedhur llojin e saktë të procesorit për të cilin po zhvillohet projekti.

    Skeda #defines tregon vlerën e ndryshores F_CPU, nëse është vendosur kur është krijuar projekti.

    Në skedën "Opsionet e lidhjes" në panelin "Opsionet e tjera të lidhjes", mund të shihni që lidhësi është vendosur në parametrin e saktë -mmcu dhe në panelin e majtë "Link libraritë", duhet të specifikoni bibliotekat e kërkuara për projekt, nëse ka.

    Shkoni te skeda "Kërko drejtoritë". Më poshtë, në skedën Përpilues, duhet të futni shtegun për skedarët e kokës, për shembull, / usr / avr / include /. Për ta bërë këtë, përdorni butonin "Shto" dhe futni rrugën e duhur. Në mënyrë të ngjashme, në skedën "Linker", specifikoni shtegun për në bibliotekat AVR GCC, për shembull, / usr / avr / lib.

    Skeda e hapave para / pas ndërtimit. Në fushën "Hapat pas ndërtimit" mund të shihni komandat për ekzekutimin e shërbimeve avr-size, avr-objcopy, avr-objdump. Për shembull, për të marrë një listë (pasi aktivizimi i parametrit "Krijo skedarin e listuar të zgjeruar" në New Project Wizard nuk prodhon efektin e dëshiruar, të paktën në versionin 8.02) shtojmë komandën e mëposhtme:

    avr-objdump -h -S $ (TARGET_OUTPUT_FILE)> $ (TARGET_OUTPUT_FILE) .lss

    Nëse tani kaloni nga parametrat e të gjithë projektit në objektiva ndërtimi më specifik, për shembull, Debug ose Release, atëherë mund të bëni disa ndryshime në parametrat e ndërtimit. Vini re, megjithatë, se parametri "Politika" është bërë i disponueshëm. Vlera e tij e paracaktuar është "Shto opsionet e synuara në opsionet e projektit", d.m.th. parametrat e përgjithshëm të projektit u shtohen parametrave për objektivin specifik të ndërtimit. Ka mundësi të tjera për kombinimin e cilësimeve të niveleve të ndryshme. Kjo ju lejon të personalizoni në mënyrë fleksibël projektin pa përsëritur parametrat e përgjithshëm të futur tashmë.

    Cilësimet e paracaktuara janë që të mundësojnë automatikisht krijimin e informacionit të korrigjimit në objektivin e korrigjimit (parametri "-g") dhe të optimizojnë madhësinë e programit që rezulton në objektivin e lëshimit (parametri "-Os").

  2. Zgjidhni artikullin e menysë "Project-> Properties". Këtu, cilësimet standarde janë mjaft të përshtatshme për të filluar punën me një projekt pa ndryshuar asgjë në to. Vlen t'i kushtohet vëmendje skedës "Ndërto objektiva". Për çdo objektiv ndërtimi (parazgjedhja: Debug dhe Release), tregohet se ku janë shkruar skedarët e objektit që rezultojnë dhe në fushën "Build target files", mund të specifikoni se cilët skedarë burim janë të përfshirë në këtë ndërtim (Figura 4).

    Nëse dëshironi, mund ta ruani projektin tuaj të personalizuar si shabllon për projektet e ardhshme. Për ta bërë këtë, zgjidhni komandën e menysë "File-> Ruaj projektin si model përdoruesi ..." dhe shkruani emrin e shabllonit. Më vonë, kur krijoni një projekt të ri, mund të zgjidhni shabllonin e dëshiruar në kategorinë "Modelet e përdoruesve" (Figura 5). Pas kësaj, duhet të vendosni një direktori boshe ku do të krijohet projekti i ri dhe më pas të modifikoni emrin e projektit.


    Ju madje mund të modifikoni një shabllon standard ekzistues. Për ta bërë këtë, në dritaren e përzgjedhjes së shabllonit, kliko me të djathtën mbi shabllonin e kërkuar dhe përdor opsionin "Ndrysho këtë skript" në menynë që shfaqet.

  3. Para se të ndërtoni ndonjë gjë, ju duhet të shikoni në cilësimet globale të përpiluesit. Kjo bëhet përmes menysë kryesore: "Settings-> Compiler an debugger settings". Në dritaren e panelit të majtë që hapet, klikoni në ikonën "Cilësimet e përpiluesit global". Në krye të panelit të djathtë, në fushën e sipërme "Përpiluesi i zgjedhur", zgjidhni "Përpiluesi GNU AVR GCC" (Figura 6).

    Vështirë se ia vlen të ndryshoni ndonjë gjë në skedën "Cilësimet e përpiluesit": këto parametra do të bëhen standarde për të gjitha projektet AVR. Por në skedat "Kërko drejtoritë-> Përpiluesi" dhe "Kërko drejtoritë-> Lidhës" në rastin tim kishte tashmë shtigje standarde / usr / përfshi dhe / usr / lib, përkatësisht, gjë që ishte e gabuar. Ju mund të specifikoni shtigjet e sakta këtu (për shembull, / usr / avr / përfshi dhe / usr / avr / lib), dhe të fshini të njëjtat shtigje në cilësimet e projektit, unë sapo i pastrova këto fusha me butonat "Pastro", sepse Parametrat e projektit deri në këtë moment janë konfiguruar tashmë.

    Në skedën "Të ekzekutueshmet e zinxhirit të mjeteve", ne kontrollojmë nëse emrat e skedarëve të ekzekutueshëm nga paketa AVR GCC dhe shtigjet drejt tyre janë specifikuar saktë. Duke përdorur butonin "autodetect", mund të përpiqeni të zbuloni automatikisht të gjitha këto vlera. Nëse diçka shkoi keq (për shembull, shpërndarja AVR GCC përfundoi me emra ekzotikë dhe drejtori për vendosje), atëherë ky është vetëm vendi ku mund të rregulloni gjithçka me dorë. Në figurën 7, fusha "s installer" e përpiluesit duhet të jetë "/ usr" nëse programet AVR GCC ndodhen në drejtorinë / usr / avr /.


    Dhe gjëja e fundit. Në skedën "Cilësimet e tjera" ekziston një fushë "Regjistrimi i përpiluesit". Këtu mund të vendosni modalitetin e regjistrimit të përpilimit. Rekomandohet të vendosni këtu vlerën "Full command line". Kjo do t'ju lejojë të gjurmoni në detaje komandat e përdorura gjatë montimit.

Tani Kodi :: Blocks është gati për të ndërtuar projektin tuaj!

Përdorimi i skedarit tuaj personal për projektin tuaj

Mund të ketë gjithmonë një situatë jo standarde kur ju duhet të merrni kontrollin e plotë të procesit të ndërtimit të projektit. Për ta bërë këtë, Code :: Blocks ofron mundësinë për të punuar me skedarin tuaj të montimit. Për ta përdorur atë, duhet të krijoni një projekt bosh dhe ta ruani atë. Tani duhet të tregoni se po përdorni skedarin tuaj të krijimit:

  1. Zgjidhni artikullin e menysë "Project -> Properties".
  2. Shkoni te skeda "Cilësimet e projektit".
  3. Kontrolloni kutinë "Ky është një skedar i personalizuar".
  4. Sigurohuni që emri i saktë i skedarit të specifikohet në fushën "Makefile:".
  5. Tani, në skedën "Ndërto objektivat", duhet të ndryshosh ose të shtosh objektivat e ndërtimit në përputhje me skedarin ekzistues, për shembull: të gjitha të pastërta

Kur përdorni skedarin tuaj të krijuar, duhet të kontrolloni se cilat komanda janë të disponueshme në skedën "Make Commands" në artikullin e menusë "Project -> Build Options".

Program prove

Projekti, i krijuar duke përdorur shabllonin AVR, tashmë përmban skedarin main.c, i cili përmban përgatitjen e modulit kryesor për programin C. Le të shkruajmë një program të ri C ++.

Përdorni opsionin e menysë "File-> I ri-> Skedar ...", zgjidhni "C ++ source" dhe klikoni butonin "Shko". Do të shfaqet një dritare mirëseardhjeje e magjistarit të ri. skedari burimor... Klikoni butonin "Next" dhe në dritaren tjetër zgjidhni gjuhën e programimit për këtë skedar: C ++. Më pas, specifikoni emrin e skedarit (për shembull, sample.cpp) dhe shtegun e plotë drejt këtij skedari, për të cilin klikoni butonin "..." në të djathtë të fushës së emrit të skedarit. Pastaj duhet të tregoni për cilat qëllime të montimit do të jetë i pranishëm ky skedar, për të cilin thjesht mund të klikoni butonin "Të gjitha". Klikoni butonin Finish.

Në skedarin bosh të krijuar, futni programin më të thjeshtë C ++:

int main (void) (const int some_size = 1000; ndërsa (e vërtetë) (për (int i = 0; i< some_size; i++) int a = 3; // какое-нибудь действие } return 0; // никогда не дойдет сюда }

Ruani skedarin duke shtypur Ctrl + S. Nuk kemi nevojë për skedarin main.c, ai mund të hiqet nga projekti duke klikuar me të djathtën mbi emrin e tij dhe duke zgjedhur komandën “Remove file from project” nga menyja që shfaqet (Figura 8).


Kur futja komente në rusisht, herë pas here hasa një gabim të bezdisshëm në punën e redaktorit: ndonjëherë ai refuzon të hyjë në alfabetin cirilik. Me sa duket, kjo është për shkak të punës në Unicode. Ju mund ta zgjidhni përkohësisht problemin duke futur një hapësirë ​​shtesë, pas së cilës teksti shkruhet normalisht. Kjo hapësirë ​​mund të hiqet më pas.

Le të përpilojmë programin. Për ta bërë këtë, zgjidhni komandën e menusë "Build-> Build" ose shtypni kombinimin e njohur të tasteve Ctrl + F9, gjithashtu mund të përdorni butonin blu të ingranazhit në shiritin e veglave. Programi do të përpilohet dhe kutia e mesazheve në fund të ekranit do të kalojë automatikisht në skedën "Ndërto mesazhe", ku do të thotë se ndërtimi ka përfunduar, ka marrë 0 gabime dhe një paralajmërim: në rreshtin 8, i papërdorur ndryshorja "a".

Pak për korrigjimin e gabimeve

Qasja për korrigjimin e aplikacioneve AVR varet shumë nga hardueri i përdorur. Nëse keni një pajisje AVR JTAG ICE, mund të kryeni korrigjimin e gabimeve në qark duke e lidhur atë me procesorin duke përdorur programin avari. Nëse nuk ka një pajisje të tillë, përdorni simulatorin e procesorit simulavr. Fatkeqësisht, ky projekt nuk është zhvilluar për disa vite, por zhvilluesit vazhdojnë të lëshojnë rregullime.

Për të konfiguruar korrigjimin në Kodin :: Blocks, duhet të hapni vetitë e projektit "Project-> Properties" dhe të shkoni te skeda "Debugger". Këtu, në fushën "Zgjidh objektivin", zgjidhni "Debug". Për këtë konfigurim, në skedën "Lidhja në distancë", specifikohen parametrat për lidhjen e avr-gdb me objektivin e korrigjimit në distancë:

  • "Lloji i lidhjes": TCP.
  • "Adresa IP": localhost nëse një pajisje korrigjimi (ose simulator) është e lidhur me të njëjtin kompjuter.
  • "Port": për shembull, 1212.

Tani në skedën "Komanda shtesë" në fushën "Pas lidhjes" duhet të futni komandat e mëposhtme për korrigjuesin:

kryesore e ndërprerjes së ngarkesës

Komanda e parë do të ngarkojë programin në objektivin e korrigjimit (mikroprocesor ose simulator), dhe e dyta do të fusë një pikë ndërprerjeje në funksionin kryesor.

Para se të korrigjoni, duhet të ekzekutoni simulavr në terminal:

simulavr -g -p 1212 -d atmega128

(për procesorin atmega128), ju merrni diçka si kjo:

$ simulavr -g -p 1212 -d atmega128 Simulimi i një pajisjeje atmega128. ... main.c: 415: MESAZH: Simulimi i frekuencës së orës prej 8,000,000 Hz Në pritje në portin 1212 që klienti gdb të lidhet ...

Nëse pajisja është e lidhur me portën serike / dev / ttyS0, mund të filloni koprraci me komandën e mëposhtme:

kopraci -j / dev / ttyS0 -P atmega128: 1212

Tani mund të filloni korrigjimin në Kodin :: Blloqe duke përdorur komandën e menusë "Debug-> Start". Në dritaren ku po ekzekutohet simulavr, do të shtohen mesazhe si më poshtë:

Lidhja u hap nga hosti 127.0.0.1, porti -14999. dekoder.c: 737: MESAZH: PIKA PUSHIM: PC = 0x00000068: ora = 34

Kjo do të ngarkojë tekstin burimor që përmban funksionin kryesor në redaktuesin Code :: Blocks dhe kursori i korrigjuesit do të ndalojë në këtë funksion, siç tregohet në figurën 9. Tani mund të përdorni butonat e përshtatshëm për të kontrolluar korrigjuesin në shiritin e veglave, shikoni vlerat e variablave, e kështu me radhë. Për më shumë informacion mbi korrigjimin e gabimeve, shihni dokumentacionin për gdb, simulavr ose koprraci.


konkluzioni

Pra, ne treguam se si, pasi keni shpenzuar një minimum përpjekjeje dhe kohe, pa iu referuar dokumentacionit dhe manualeve, filluam me shpejtësi zhvillimin e aplikacioneve AVR duke përdorur mjedisin e mrekullueshëm dhe me zhvillim të shpejtë të zhvillimit Kodi :: Blloqe. Aktualisht, ndërfaqja e mjedisit është përkthyer në shumë gjuhë dhe, ndoshta, skedarët e lokalizuar së shpejti do të bëhen pjesë e degës kryesore të zhvillimit.

Në artikullin vijues, do të njihemi me përdorimin e Eclipse për të ndërtuar aplikacione për një gamë të gjerë mikroprocesorësh me një sasi të vogël RAM, për të cilën është projektuar përpiluesi SDCC me burim të hapur.

Artikujt kryesorë të lidhur