Kotero, pochita, ndikhoza kunena kuti kwa ine chirichonse chimayamba ndi notepad. Sikuti ndimalemba ntchito zanga za tsiku ndi tsiku kumeneko, ndimajambulanso, pulogalamu, kupanga ma chart chart ndikuthetsa mavuto, kuphatikiza masamu. Nthawi zonse gwiritsani ntchito kope ndipo lembani ndi pensulo yokha. Ndizoyera, zosavuta komanso zodalirika, IMHO.
Kabuku kanga (kadadzadza kale). Izi ndi momwe amawonekera. Lili ndi ntchito za tsiku ndi tsiku, malingaliro, zojambula, zojambula, zothetsera, kusunga mabuku akuda, ma code ndi zina zotero.
Ntchito 0: Ichi ndi chiwonetsero cha 3D Architect Demo cholembedwa mu C # pogwiritsa ntchito injini yamasewera a Unity. Kwa nsanja za Windows ndi macOS.
Masewera 1: console masewera Nyoka Yosavuta (yodziwika kwa aliyense kuti "Njoka") ya Windows. Yolembedwa mu C.
Masewera 2: masewera a console Crazy Tanks (odziwika kwa aliyense ngati "Tanki"), olembedwa mu C ++ (pogwiritsa ntchito makalasi) komanso Windows.
Project 0. Chiwonetsero cha Zomangamanga
Nsanja: Windows (Mawindo 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
Ntchito yoyamba idakhazikitsidwa osati mu C/C ++, koma mu C# pogwiritsa ntchito injini yamasewera a Unity. Injini iyi sinali yofunikira pa hardware monga Unreal Engine, komanso zinkawoneka zosavuta kukhazikitsa ndi kugwiritsa ntchito. Sindinaganizire za injini zina.
Cholinga changa mu Umodzi sichinali kupanga masewera. Ndinkafuna kupanga chithunzi cha 3D chokhala ndi munthu wina. Iye, kapena m'malo Iye (ndinatengera mtsikana yemwe ndimamukonda =) amayenera kusuntha ndikuyanjana ndi dziko lozungulira. Zinali zofunikira kumvetsetsa kuti Umodzi ndi chiyani, njira yachitukuko ndi yotani yomwe ikufunika kuti pakhale chinachake. Umu ndi momwe polojekiti ya Architect Demo idabadwira (dzina lidangopangidwa modzidzimutsa). Kupanga mapulogalamu, kutengera chitsanzo, makanema ojambula pamanja, kutumiza mameseji kunanditengera mwina miyezi iwiri yantchito yatsiku ndi tsiku.
Ndinayamba ndi mavidiyo ophunzirira pa YouTube popanga zitsanzo za 3D mu Blender. Blender ndi chida chabwino kwambiri chaulere cha 3D modelling (ndi zina) zomwe sizifuna kuyika. Ndipo pano chododometsa chinandiyembekezera... Zinapezeka kuti kutsanzira, makanema ojambula pamanja, kutumizirana mameseji ndi mitu yayikulu yosiyana yomwe mutha kulembapo mabuku. Izi ndi zoona makamaka kwa otchulidwa. Kuti mukhale chitsanzo cha zala, mano, maso ndi ziwalo zina za thupi, mudzafunika chidziwitso cha anatomy. Kodi minofu ya nkhope imapangidwa bwanji? Kodi anthu amasuntha bwanji? Ndinayenera "kulowetsa" mafupa m'dzanja lililonse, mwendo, chala, phalanges za zala!
Tsanzirani ma collarbones ndi mafupa owonjezera a lever kuti makanema ojambula aziwoneka mwachilengedwe. Pambuyo pa maphunziro otere, mumazindikira kuchuluka kwa ntchito zomwe opanga makanema ojambula amangopanga masekondi 30 a kanema. Koma mafilimu a 3D amakhala kwa maola ambiri! Kenako timachoka m’makanema n’kunena zinthu monga: “Ndizojambula/kanema wachabechabe! Akadachita bwino…” Opusa!
Ndipo chinthu chinanso chokhudza mapulogalamu mu polojekitiyi. Monga momwe zinakhalira, gawo losangalatsa kwambiri kwa ine linali masamu. Ngati mutayendetsa zochitikazo (zolowera kumalo ofotokozera polojekiti), mudzawona kuti kamera imazungulira mozungulira mtsikanayo pagawo. Kuti kamera ikhale yozungulira, ndimayenera kuwerengera kaye makonzedwe a malo ozungulira (2D), ndiyeno pagawo (3D). Chosangalatsa ndichakuti ndimadana ndi masamu kusukulu ndipo ndimadziwa ndi C-minus. Mwa zina, mwina, chifukwa kusukulu samakufotokozerani momwe gehena imagwiritsidwira ntchito m'moyo. Koma mukakhala otanganidwa ndi cholinga chanu, maloto anu, malingaliro anu amamveka ndikutseguka! Ndipo mumayamba kuona ntchito zovuta ngati ulendo wosangalatsa. Kenako mumaganiza kuti: "Chabwino, bwanji katswiri wamasamu yemwe mumamukonda sanakuuzeni nthawi zonse komwe mafomuwa angagwiritsidwe ntchito?"
Chithunzi cha 3D si masewera. Kuonjezera apo, kupanga ndi kupanga zinthu za 3D (makamaka zilembo) kumatenga nthawi komanso kovuta. Nditasewera ndi Unity, kuzindikira kunabwera kwa ine kuti ndiyenera kupitiliza, kapena m'malo mwake, kuyambira pazoyambira. Chinachake chosavuta komanso chachangu, koma nthawi yomweyo padziko lonse lapansi, kumvetsetsa momwe masewerawa amapangidwira.
Chosavuta komanso chachangu ndi chiyani? Ndiko kulondola, console ndi 2D. Ndendende, ngakhale kutonthoza ndi zizindikiro. Ndinapitanso kukafunafuna kudzoza pa intaneti (nthawi zambiri, ndikuganiza kuti intaneti ndiyomwe idapangidwa mosintha kwambiri komanso yowopsa kwambiri m'zaka za zana la XNUMX). Ndinakumba vidiyo ya wopanga mapulogalamu omwe adapanga Tetris console. Ndipo mofanana ndi masewera ake ndinaganiza zopanga "njoka". Kuchokera muvidiyoyi ndidaphunzira za zinthu ziwiri zofunika - masewera amasewera (omwe ali ndi ntchito / magawo atatu) ndi zotuluka ku buffer.
Mtundu wamasewera ukhoza kuwoneka motere:
int main()
{
Setup();
// a game loop
while (!quit)
{
Input();
Logic();
Draw();
Sleep(gameSpeed); // game timing
}
return 0;
}
Kusindikiza zilembo ku console mwina ndichinthu chosavuta chomwe mungasinthe kukhala masewera. Koma vuto limodzi likuwonekera: zizindikiro zimakhala ndi kutalika kwake ndi m'lifupi (kutalika ndi kwakukulu kuposa m'lifupi). Mwanjira iyi, zonse zidzawoneka mosagwirizana, ndipo kusunthira pansi kapena mmwamba kudzawoneka mofulumira kwambiri kusiyana ndi kusuntha kumanzere kapena kumanja. Izi zimawonekera kwambiri mu Njoka (Game 1). "Matanki" (Game 2) alibe drawback izi, chifukwa zotuluka kumeneko anakonza mwa kujambula mapikiselo chophimba ndi mitundu yosiyanasiyana. Munganene kuti ndinalemba womasulira. Zowona, izi ndizovuta kwambiri, ngakhale zosangalatsa kwambiri.
Kwa masewerawa, zidzakhala zokwanira kufotokoza dongosolo langa lowonetsera ma pixel pawindo. Ndimaona kuti iyi ndi gawo lalikulu lamasewera. Ndipo mukhoza kubwera ndi china chirichonse nokha.
Koma mwayi wopita kuzinthu zamaguluwo umapezeka pawiri, ngati kuti sikunali gawo limodzi, koma mbali ziwiri. Izi zimachitika chifukwa timagwirabe ntchito ndi matrices.
Kudutsa mzere wa mbali imodzi mu lupu iwiri. Y - chizindikiritso cha mzere, X - chizindikiritso cha mzere
Chonde dziwani: m'malo mwa zizindikilo zanthawi zonse za matrix i, j, ndimagwiritsa ntchito zozindikiritsa x ndi y. Mwanjira iyi, zikuwoneka kwa ine, ndizosangalatsa m'maso komanso zomveka bwino ku ubongo. Kuphatikiza apo, mawu otere amapangitsa kuti zitheke kupanga masanjidwe ogwiritsidwa ntchito pamagulu azithunzi zamitundu iwiri.
Tsopano za mapikiselo, mtundu ndi zotuluka pazenera. Ntchito ya StretchDIBits imagwiritsidwa ntchito potulutsa (Header: windows.h; Library: gdi32.lib). Ntchitoyi, mwa zina, imalandira izi: chipangizo chomwe chithunzicho chikuwonetsedwa (kwa ine, ndi Windows console), zoyambira zowonetsera chithunzi, m'lifupi / kutalika kwake, ndi chithunzi chomwe chili mu mawonekedwe a bitmap, oimiridwa ndi ma byte angapo. Bitmap ngati gulu labyte!
StretchDIBits () ntchito ikugwira ntchito:
// screen output for game field
StretchDIBits(
deviceContext,
OFFSET_LEFT, OFFSET_TOP,
PMATRIX_WIDTH, PMATRIX_HEIGHT,
0, 0,
PMATRIX_WIDTH, PMATRIX_HEIGHT,
m_p_bitmapMemory, &bitmapInfo,
DIB_RGB_COLORS,
SRCCOPY
);
Memory imaperekedwa pasadakhale kwa bitmap iyi pogwiritsa ntchito VirtualAlloc () ntchito. Ndiye kuti, nambala yofunikira ya ma byte imasungidwa kuti isunge zambiri za ma pixel onse, zomwe zidzawonetsedwa pazenera.
Mwachidule, bitmap imakhala ndi ma pixel angapo. Ma byte anayi aliwonse mugululi ndi pixel ya RGB. Baiti imodzi pamtengo wamtundu wofiyira, baiti imodzi pamtengo wamtundu wobiriwira (G), ndi baiti imodzi pamtengo wamtundu wabuluu (B). Kuphatikiza apo kwatsala baiti imodzi kuti indentation. Mitundu itatu iyi - Yofiira / Yobiriwira / Buluu (RGB) - imasakanizidwa mosiyanasiyana kuti apange mtundu wa pixel wotsatira.
Tsopano, kachiwiri, kakona kakang'ono kalikonse, kapena chinthu chamasewera, chimaimiridwa ndi manambala. Zinthu zonse zamasewerazi zimayikidwa mgulu. Kenako amayikidwa pabwalo lamasewera, ndikupanga masanjidwe amodzi akulu. Ndinagwirizanitsa nambala iliyonse mu matrix ndi mtundu wina wake. Mwachitsanzo, nambala 8 imagwirizana ndi buluu, nambala 9 mpaka yachikasu, nambala 10 mpaka imvi yakuda, ndi zina zotero. Chifukwa chake, titha kunena kuti tili ndi matrix amasewera, pomwe nambala iliyonse ndi mtundu.
Chifukwa chake, tili ndi manambala amasewera onse mbali imodzi ndi bitmap yowonetsera chithunzicho. Pakadali pano, bitmap ndi "chopanda" - ilibe zambiri za ma pixel amtundu womwe mukufuna. Izi zikutanthauza kuti sitepe yotsiriza idzakhala yodzaza bitmap ndi chidziwitso cha pixel iliyonse kutengera matrix owerengeka a masewerawo. Chitsanzo chomveka bwino cha kusintha kotereku chiri pa chithunzi chili pansipa.
Chitsanzo chodzaza bitmap (Pixel matrix) ndi chidziwitso chotengera Digital matrix of the play field (ma indices amitundu sakufanana ndi ma indices amasewerawo)
Ndiperekanso chidutswa cha code yeniyeni kuchokera pamasewera. Mtundu wosinthika wa colorIndex pa nthawi iliyonse ya loop imapatsidwa mtengo (chilolezo chamitundu) kuchokera pamatrix owerengeka a malo osewerera (mainDigitalMatrix). Mtunduwu umasinthidwa kukhala mtundu womwewo potengera index. The chifukwa mtundu ndiye anawagawa mu chiŵerengero chofiira, zobiriwira ndi buluu (RGB). Ndipo pamodzi ndi pixelPadding, chidziwitsochi chimalembedwa mu pixel mobwerezabwereza, kupanga chithunzi cha mtundu mu bitmap.
Kudzaza bitmap ndi chidziwitso chotengera manambala amasewera:
// set pixel map variables
int colorIndex;
COLORREF color;
int pitch;
uint8_t* p_row;
// arrange pixels for game field
pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL; // row size in bytes
p_row = (uint8_t*)m_p_bitmapMemory; //cast to uint8 for valid pointer arithmetic
(to add by 1 byte (8 bits) at a time)
for (int y = 0; y < PMATRIX_HEIGHT; ++y)
{
uint32_t* p_pixel = (uint32_t*)p_row;
for (int x = 0; x < PMATRIX_WIDTH; ++x)
{
colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
color = Utils::GetColor(colorIndex);
uint8_t blue = GetBValue(color);
uint8_t green = GetGValue(color);
uint8_t red = GetRValue(color);
uint8_t pixelPadding = 0;
*p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
++p_pixel;
}
p_row += pitch;
}
Malinga ndi njira yomwe tafotokozayi, mu masewerawa Crazy Tanks chithunzi chimodzi (chimango) chimapangidwa ndikuwonetsedwa pazenera mu Draw () ntchito. Pambuyo polembetsa ma keystroke mu Input () ntchito ndi kukonza kwawo kotsatira mu Logic () ntchito, chithunzi chatsopano (chimango) chimapangidwa. Zowona, zinthu zamasewera zitha kukhala kale ndi malo osiyana pabwalo lamasewera ndipo, motero, zimakokedwa kwina. Umu ndi momwe makanema ojambula (mayendedwe) amachitikira.
Mwachidziwitso (ngati sindinayiwale kalikonse), kumvetsetsa kuzungulira kwamasewera kuchokera pamasewera oyamba ("Njoka") ndi kachitidwe kowonetsera ma pixel pazenera kuchokera pamasewera achiwiri ("Tanki") ndizo zonse zomwe muyenera kulemba. pamasewera anu a 2D pansi pa Windows. Zopanda phokoso! 😉 Magawo ena onse ndi ongouluka basi.
Zoonadi, masewerawa "Tanks" ndi ovuta kwambiri kuposa "Njoka". Ndinagwiritsa ntchito kale chinenero cha C ++, ndiko kuti, ndinalongosola zinthu zosiyanasiyana zamasewera ndi makalasi. Ndinapanga zosonkhanitsira zanga - code ikhoza kuwonedwa pamitu/Box.h. Mwa njira, zosonkhanitsazo zimakhala ndi vuto la kukumbukira. Zolozera zogwiritsidwa ntchito. Anagwira ntchito ndi kukumbukira. Ndiyenera kunena kuti bukulo linandithandiza kwambiri Kuyambira C ++ Kupyolera mu Masewera a Masewera. Ichi ndi chiyambi chabwino kwa oyamba kumene mu C ++. Ndi yaying'ono, yosangalatsa komanso yokonzedwa bwino.
Zinatenga pafupifupi miyezi isanu ndi umodzi kupanga masewerawa. Ndinalemba makamaka pa nkhomaliro ndi zokhwasula-khwasula kuntchito. Anakhala kukhitchini yakuofesi, kuponda chakudya ndikulemba code. Kapena pa chakudya kunyumba. Choncho ndinamaliza ndi “nkhondo zakukhitchini” zimenezi. Monga nthawi zonse, ndimagwiritsa ntchito kope, ndipo zinthu zonse zamalingaliro zidabadwiramo.