De ce scriu jocuri în C (da, în C). Surse de jocuri (240) Cum să scrieți jocuri în C
Întrebare: Ce recomandați pentru a crea jocuri de la zero?
Timp bun. Inspirat recent din jucării precum Papers, Please și Hotline Miami. Am propria mea idee pentru un joc. Dar chestia e că nu știu să scriu. Jocul a fost conceput cu o vedere de sus, nu 3D, pentru PC. La serviciu, scriu în 1C, dar nu pentru jocuri, deși dacă te străduiești, poți, am studiat și bazele Java. Înțeleg că este mai bine să încerci mai întâi ceva simplu, cum ar fi tic-tac-toe sau șarpe, pentru a obține elementele de bază.
Pe Internet, ei sugerează utilizarea C ++, dar sugerează și utilizarea C # + XNA. Cine are experiență în crearea de jocuri, sfătuiește literatură sau oferă câteva sfaturi despre programarea jocurilor de la zero.
Răspuns:
mesaj de la MonteKristo
consiliază literatură
Din păcate, există foarte puțină literatură în limba rusă, mai ales de înaltă calitate. Departe de toate se traduce, departe de imediat, dar se întâmplă să nu fie de calitate. Se întâmplă ca o carte să fie tradusă la doi ani după lansarea originalului, iar o nouă versiune a originalului a fost deja lansată, iar prima este depășită. Prin urmare, studiez engleza și traduc cu ajutorul Lingvo și translate.google.com cărțile curente
Puteți căuta cărți despre crearea de jocuri în diferite limbi și tehnologii aici:
Dar în niciun caz nu începe cu cărțile din categoriile: Progressing și Mastering
Ce secțiune înseamnă că poți afla dacă dai clic pe „i”. De asemenea, puteți descărca exemple gratuit după înregistrare. Am aratat-o in poza:
Întrebare: Creați un joc în limbaj C?
Răspuns: Adăugat după 30 de minute
mesaj de la HighPredator
În general, totul poate fi scris în C. Ar fi o dorință, creier și timp.
Există o dorință, fără creier, voi căuta timp >< Благодарю!
mesaj de la McFair
De asemenea, puteți începe să învățați Opengl fără un motor, puteți crea câteva Tetris și veți înțelege ce este.
Simt că va trebui să scriu singur motorul
mesaj de la McFair
7. Nu este complet clar, se presupune că tăiați o parte din imagine și puneți-o pe un cub?
Da, desenați obiectul și texturați-l prin suprapunerea imaginii.
mesaj de la satir cibernetic
GTK, de exemplu, cruce. Și așa, pentru Windows, folosiți winapi, există o interfață pur albastră.
Mulțumesc! Asta am vrut să spun
mesaj de la McFair
8. Mai mult depinde de joc, obiective și stilul de programare, totul trebuie luat în considerare, dacă luați același proiect în C și Sharp, atunci desigur C va beneficia foarte mult, dar în Sharp, viteza de dezvoltare va crește cu 2/3 dupa parerea mea.
O alegere bună ar fi să le combinați. Scrieți baza în Sharpe și răsuciți caracteristicile în C?)
Întrebare: Crearea unui joc MMORPG
Buna ziua. Recent am creat un subiect aici, unde am aflat despre crearea unui joc 2d.
Cu toate acestea, am decis să aflu în ce direcție ar trebui să studiez.
Iată 2 capturi de ecran:
http://kape.cc/uploads/posts/2011-05...a630f08343.jpg
http://mmohuts.com/wp-content/galler..._07.jpg?bb7a3b
Si video:
Trebuie să fac un astfel de joc. În general, locația este un sistem grilă. Locația este împărțită în câteva cuburi
Înțeleg că avem nevoie de grafică, sunete, biblioteci de sunet, dar mai întâi să luăm biblioteci de sunet.
Uită de grafică (să spunem că există una), sunt sunete.
Vreau să întreb dacă pachetul C++ + OpenGL îmi satisface cerințele și crearea unui joc similar și anume: mutarea unui obiect prin celule cu animație, ciocnirea obiectelor, preluarea grafică din sprites + animație scheletică (personaj gol + obiecte de legătură - grafică , la corpul personajului (pânză)).
Răspuns:
8Observator8, Nu mi-a plăcut niciodată fizica, până când mi-am dat seama că este atât de necesar... Dar acum, mi-am dat seama că Box2D cu siguranță nu este necesar pentru jocul pe care îl intenționez... M-am uitat la documentația SFML, după ce, astăzi, am scos în evidență dezvoltarea anterioară. și a reușit să interacționeze cu pereții, cât de multă fericire a fost)) A durat aproximativ 1-2 ore pentru a-mi da seama cum să o faci, dar merită.
Apropo, vreau să încerc să fac cel puțin primul nivel de bomberman)
Adăugat după 10 minute
P.S. Învăț c++ în același timp
Întrebare: Recomandați literatura despre dezvoltarea jocurilor de la început până la sfârșit
Recomandați literatura despre dezvoltarea jocului de la început până la sfârșit. Cu toate elementele, în C++ poți. Doar o carte nouă a editurii 2010-2015
Răspuns: Ce vei folosi pentru desen: DirectX sau OpenGL? M-am uitat că există cărți generale despre teoria jocurilor --> . Ce fel de plan de joc vei scrie: 2D, 3D, RPG, shooters, curse, șah, du-te? Toate aceste jocuri au specificații diferite.
Subiect: realizarea unui joc
Buna ziua, am decis sa fac un joc simplu (rpg). O voi face doar pentru mine. Jocul va fi static (imagini bmb cu personaje, obiecte etc., poate gif) Când am început să scotocesc pe Internet în căutarea cum se face acest lucru, am găsit o grămadă de componente gata făcute pentru delphi (de exemplu , delphix) și, prin urmare, am avut o întrebare dacă să folosesc ceva de genul? Sau este mai bine să desenezi singur totul pe pânză?
Răspuns:
domnule Dmitry,
Joc static? Acesta este ceva nou în programul de construcție.
Dacă este cu adevărat, atunci TImage este suficient pentru tine.
Și dacă este încă un joc dinamic, atunci aveți nevoie de TPaintBox.
Puțini oameni știu, dar pentru răzbunare, Delphi vine cu exemple de programe, inclusiv 3 mini-jocuri!
În Windows 7, faceți clic pe Start | Toate programele | Embarcadero RAD Studio XE5 | mostre.
Am acest folder
C:\Utilizatori\Public\Documente\RAD Studio\12.0\Samples\
Cat despre componente si motoare.
Uită de ingrediente. Nu există nicio componentă care să facă jocul pentru tine. Jocul este scris cu mâinile și cu capul.
Cat despre motoare. Motorul accelerează dezvoltarea.
În motor veți găsi o grămadă de coduri gata făcute. Motorul trebuie să fie adaptat jocului.
Din motor, vă sfătuiesc să vă uitați la biblioteca matematică și geometrică. Bibliotecă pentru lucrul cu continentul și multimedia. Ce formate de fișiere acceptă programul?
Suport pentru cameră. Suport pentru efecte speciale.
Nu ai spus joc 2D sau 3D.
Absența suportului pentru sprite-uri, panouri publicitare. Ieșire text.
Adăugat după 14 minute și 34 de secunde
Cred că te vei interesa. Există un site vizitat de crearea de jocuri.
Aici puteți arunca o privire și puteți împrumuta atât idei pentru joc, cât și idei pentru implementare.
Întrebare: Crearea propriului limbaj în Visual Studio
Caut exemple/tutoriale clare pas cu pas despre crearea propriului meu limbaj în Visual Studio.
Am găsit un exemplu de limbă, dar trebuie să înțeleg ce, cum și pentru ce, pentru că. culoarul meu pare un pic ok.
--
Necesar în general:
„cross-compiler” de la asma dvs. din studio, cu indicii de cod, la coduri pentru procesorul Z80 (nu mi-am dat seama încă cum să-l descarc pe hardware sau pe emulator, acesta este următorul pas).
Cerințe:
redactor - VS însăși (2013);
cod de asamblare Z80 pe ecran, fără module suplimentare;
alegerea limbii la crearea unui proiect (unde lista de limbi este C #, F #, VB.NET și altele).
Răspuns: dar cum să „spune” studioului 2013 că evidențiază și solicită?
Întrebare: Crearea unui joc pe motorul C++
Oameni buni, ajutați la crearea unui joc pe motorul c++. Doodle jump, voi fi recunoscător analogului. Problema este că am început să studiez nu de mult. Și nici nu pot scrie un program adecvat. Se pare că sunt încă un noob specific. Mulţumesc anticipat!
Jocurile video s-au dezvoltat activ de mai bine de 30 de ani, de la gameplay și capabilități grafice, la sisteme avansate de inteligență artificială și percepția utilizatorului asupra materialului trimis de dezvoltatori. Esports, la rândul său, este un sport cu drepturi depline, cu premii de mai multe milioane de dolari și miliarde de afaceri. Și industria jocurilor video în sine câștigă avânt neîncetat, fiind una dintre cele mai mari încasări și ramuri masive ale industriei divertismentului. Și la toate acestea, omenirea a venit din cea mai primitivă implementare a „tenisului”, lansată pe un osciloscop.
Eu, în calitate de boboc, am decis, ca parte a studierii capacităților de bază ale consolei C / C ++, este posibil să programez un joc ASCII „clasic” care necesită ca jucătorul să gândească rapid, să interacționeze continuu cu jocul și, de asemenea, are o parte grafică simplă pe care jucătorul o poate interpreta într-un fel de imagine tridimensională.
În ciuda primitivității vizuale a unor astfel de soluții, cu siguranță îi fac pe jucători să se simtă nostalgici pentru jocurile vechi.
inspirație
În zorii apariției pe piață a telefoanelor mobile cu afișaje monocrome s-a remarcat jocul „Space Impact”, care a fost flashat pe dispozitivele Nokia. Se potrivește perfect cu capabilitățile limitate ale telefoanelor mobile de atunci. După introducerea jocurilor simple în telefoanele mobile, vânzările de dispozitive au crescut dramatic, iar jocurile mobile au devenit treptat populare, iar acum sunt destul de competitive cu industria proiectelor AAA „adulte”.
Space Impact a fost baza primului meu joc datorită ușurinței de joc și popularității sale la începutul anilor 2000.
Caracteristicile „Space Invader”
În primul rând - ușurința programului. Fișierul executabil are mai puțin de 100 kb și va funcționa conform așteptărilor pe aproape orice computer care rulează OC Windows cu pachetul Visual C++.
În al doilea rând, portabilitatea - codul sursă poate fi convertit în sisteme POSIX în câteva minute, asigurând astfel operabilitatea pe sistemele de operare UNIX și Mac, doar prin înlocuirea câtorva funcții și reconstruirea programului pe compilatorul corespunzător.
Al treilea avantaj este că programul este portabil și nu necesită fișiere suplimentare. Toate fișierele suplimentare, dacă este necesar, sunt create automat în directorul în care se află fișierul executabil.
Cea mai simplă interfață intuitivă care nu necesită o descriere sau instrucțiuni de utilizare.
- Subelementul „Joc nou” - începe o nouă sesiune de joc.
- Sub-elementul „Continuare” - încarcă ultimul joc salvat din fișierul binar în directorul fișierului executabil și începe sesiunea de joc folosind datele primite.
Cum funcționează Space Invader?
Când pornește aplicația, apare o animație de ecran de introducere. Este format din 6 matrice de caractere preformatate, rotite la fiecare 200 ms.
Pornirea screensaverului - slide final
Urmează apelul la funcția meniului principal cu parametrul 1 (întreg). Funcția afișează un meniu cu elementul de meniu selectat între paranteze unghiulare, al cărui număr se potrivește cu parametrul de intrare. În meniu sunt 4 articole, respectiv, parametrul de intrare poate varia de la 1 la 4. Apăsarea săgeții în jos accesează recursiv parametrul de intrare incrementat dacă parametrul de intrare este mai mic de 4, cu parametrul 1 dacă parametrul de intrare este 4. Space sau Enter accesează funcția corespunzătoare articolului de meniu selectat.
void StartMenu(int switcher) ( system("cls"); comutator (switcher) (cazul 1: cout<< "\n\n\n << ИГРАТЬ! >> << "\n\n\n ИГРАТЬ!\n\n << ПОМОЩЬ! >> << "\n\n\n ИГРАТЬ!\n\n ПОМОЩЬ!\n\n << ЗАЛ СЛАВЫ >> << "\n\n\n ИГРАТЬ!\n\n ПОМОЩЬ!\n\n ЗАЛ СЛАВЫ\n\n << ВЫХОД >>"; break; ) int alegere = _getch(); if (alegere == 224) alegere = _getch(); if (alegere == 72) if (comutator != 1) StartMenu(switcher - 1); else StartMenu( 4); if (alegere == 80) if (comutator != 4) StartMenu(comutator + 1); else StartMenu(1); if (alegere == 13 || alegere == 32) (daca (comutator == 1) ) Meniu joc(1); dacă (comutator == 2) Ajutor(0); dacă (comutator == 3) TopChart(); dacă (comutator == 4) _ieșire(0); ) )
Meniul principal (funcția introdusă cu parametrul 1)
La accesarea funcției corespunzătoare articolului „Joc”, se lansează o funcție care este similară ca funcționalitate, dar există doar o alegere de 2 articole. În consecință, parametrul de intrare va fi 1 sau 2, iar atunci când apăsați pe oricare dintre săgeți (sus sau jos), trebuie doar să schimbăm numărul la „opus”. Cea mai optimizată opțiune este scăderea parametrului de intrare din 3 (3 - 1 = 2, 3 - 2 = 1).
void GameMenu(int switcher) ( system("cls"); if (switcher == 1) cout<< "\n\n\n\n\n << НОВАЯ ИГРА! >> << "\n\n\n\n\n НОВАЯ ИГРА!\n\n << ПРОДОЛЖИТЬ! >>"; int alegere = _getch(); if (alegere == 224) alegere = _getch(); if (alegere == 72 || alegere == 80) Meniu joc(3 - comutator); dacă (alegere == 27) StartMenu(1); if (alegere == 13 || alegere == 32) Joc (comutator); )
Meniu suplimentar (funcția a fost introdusă cu parametrul 1)
Acum la principal - procesul jocului. Când selectați subelementul „Joc nou”, este lansată o nouă sesiune de joc. Este creată o matrice bidimensională, cu o dimensiune de 14 rânduri pe 50 de coloane. Prima linie este alocată sub tabloul de bord. Primul dispozitiv este numărul de kilometri parcurși, este egal cu numărul de actualizări ale consolei (inițial, consola se actualizează la fiecare 80ms, cu fiecare actualizare acest parametru scade până ajunge la o valoare de 25).
int odometerBuf = odometru, odometerDigitLength; pentru (odometerDigitLength = 0; odometerBuf != 0; odometerBuf /= 10, odometerDigitLength++);// calculul numărului de cifre de pe contorul de parcurs pentru (int i = odometerDigitLength, odometerBuf = odometru; i >= 0; i--, scr[i] = odometerBuf % 10 + "0", odometerBuf /= 10);//desenarea odometrului pe tabloul de bord scr = "K"; scr = „M”;//adăugarea contorului de parcurs „KM”++;//incrementarea contorului de parcurs
Al doilea indicator, viteza actuală, este formula - 1000/rata de actualizare a consolei. Viteza se măsoară în kilometri pe secundă. Astfel, inițial nava se deplasează cu o viteză de 12 km/s, iar după un timp ajunge la marcajul de 40 km/s.
viteza = 1000 / cronometru;// actualizarea vitezometrului int speedBuf = viteza; pentru (int i = 42; viteza != 0; i--, scr[i] = viteza % 10 + "0", viteza /= 10);//desenarea vitezometrului pe tabloul de bord scr = "К"; scr = "M"; scr="/"; scr = „С”;//adăugând „КМ/С”
Al treilea dispozitiv afișează numărul de încercări rămase, inițial sunt 3. Încercările sunt indicate prin simbolul „&”.
pentru (int i = 50; vieți > 0; i--, vieți--, scr[i] = "&");
Tabloul de bord la începutul unei sesiuni de joc
Următoarele 2 linii, ca și ultimele 2, sunt câmpurile jocului. Decorațiile de câmp sunt alese aleatoriu, pot consta din 3 caractere sau un spațiu. Liniile extreme sunt întotdeauna complet umplute, iar a doua și penultima rânduri conțin alte caractere decât un spațiu doar în acele locuri în care aceste personaje „cresc” din altele.
caracter borderSymbols = ( "†", "‡", "¤", " " ); pentru (int aboveBelow = 0; aboveBelow< 50; aboveBelow++)//прорисовка верхнего и нижнего полей (2 + 2) { scr = borderSymbols; if (scr == "‡") scr = "¤"; scr = borderSymbols; if (scr == "‡") scr = "¤"; }
Tabloul de bord și câmpurile la începutul unei sesiuni de joc
În linia centrală a spațiului de joc, apăsată spre marginea stângă, este desenată o navă spațială, pe care jucătorul va trebui să o controleze.
scr = "\\"; scr = "\\";//desenarea navei scr = "3"; scr="="; scr="="; scr="/"; scr="/";
Îl poți controla cu săgețile sus și jos.
if (_kbhit())//dacă tasta a fost apăsată ( control = _getch();//variabila își va lua valoarea dacă (control == 224) control = _getch(); ) if (control == 72)/ /în timp ce se deplasează în sus dacă (scr == "\\" || scr == "\\" && scr == "¤" || scr == "\\" && scr == "¤")//dacă nava s-a prăbușit în câmpul de sus - game over if (vieți > 1) (cout<< "\a"; lifes--; weaponPos = 7; GameStart(scr, lifes, &timer); Sleep(1000); } else GameOver(odometer); else { for (int i = 2; i < 13; i++)//корабль смещается на элемент выше for (int j = 0; j < 49; j++) if (scr[i][j] == "3" || scr[i][j] == "\\" || scr[i][j] == "=" || scr[i][j] == "/") { scr[j] = scr[i][j]; scr[i][j] = " "; } weaponPos--; } if (control == 80)//при движении корабля вниз if (scr == "/" || scr == "/" && scr == "¤" || scr == "/" && scr == "¤")//если корабль врезался в нижнее поле - игра окончена if (lifes >1) ( afară<< "\a"; lifes--; weaponPos = 7; GameStart(scr, lifes, &timer); Sleep(1000); } else GameOver(odometer); else { for (int i = 12; i > < 49; j++) if (scr[i][j] == "3" || scr[i][j] == "\\" || scr[i][j] == "=" || scr[i][j] == "/") { scr[j] = scr[i][j]; scr[i][j] = " "; } weaponPos++; }
Poziția navei când apăsați de două ori săgeata sus
Îndepărtându-ne de vizualizare, merită remarcat faptul că împreună cu nava deplasăm în sus sau în jos elementul de matrice responsabil pentru „botul” navei. În consecință, din care puteți trage obuze apăsând bara de spațiu.
Cu toate acestea, nici câmpul, nici proiectilele nu se mișcă, prin urmare, pentru a „reanima” jocul, după expirarea temporizatorului de redesenare a ecranului, „lumea” se va muta cu o coloană la stânga, iar proiectilele se vor muta o coloană la dreapta. . Nava rămâne pe loc până când jucătorul dorește altfel. Dar după redesenare, acum apare o coloană goală - să o umplem aleatoriu cu câmpuri și „deșeuri spațiale” care pot fi doborâte de obuze sau barele de protecție laterale ale navei.
pentru (int i = 1; i< 14; i++)//все "космические" элементы смещаются на элемент влево for (int j = 0; j < 49; j++) { if (scr[i][j] == "\\" && scr[i] == "¤" || scr[i][j] == "=" && scr[i] == "¤" || scr[i][j] == "/" && scr[i] == "¤") if (lifes >1) ( afară<< "\a"; lifes--; weaponPos = 7; GameStart(scr, lifes, &timer); Sleep(1000); } else GameOver(odometer); if (scr[i][j] != "3" && scr[i][j] != "\\" && scr[i][j] != "=" && scr[i][j] != "/" && scr[i][j] != "-" && scr[i] != "-") scr[i][j] = scr[i]; if (scr[i][j] == "¤") scr[i] = " "; } for (int i = 1; i < 14; i++)//все снаряды смещаются на элемент вправо for (int j = 48; j > < 12; i++)//рандомное появление космического мусора { if (rand() % 10 == 1) scr[i] = "¤"; }
Când nava se mișcă în sus sau în jos în acest moment, resturile spațiale vor fi distruse fără a deteriora nava, totul datorită tocatorilor.
Dacă în acest moment nu ocoliți resturile cu săgeata în jos, nava se va sparge
Proiectilele trase de navă sunt proiectate în așa fel încât să măture totul în calea lor. Prin urmare, după ce a tras un proiectil, un coridor într-o linie este curățat.
Cu toate acestea, deși câmpurile sunt făcute din materiale asemănătoare cu resturile spațiale, acestea nu pot fi distruse de aripioare. Contactul oricărei părți a navei cu câmpurile duce la un colaps inevitabil. Precum și introducerea resturilor spațiale în partea din față a navei. Dacă în astfel de momente pe tabloul de bord există o desemnare a cel puțin încă o „tentativă” - jocul pare să înceapă de la început, dar după ce a salvat scorul marcat și a pierdut o „tentativă”. Viteza este resetată la valoarea inițială de 12 km/s.
Dacă jucătorul „s-a prăbușit” și nu mai sunt încercări, sesiunea de joc se termină și jucătorului i se cere să-și introducă numele pentru a-și salva rezultatul în „hall of fame”.
Cererea jucătorului să introducă un nume pentru a-și salva scorul în „hall of fame”
Aplicația procesează 2 fișiere:
- „TopChart.bin” este un fișier binar pentru stocarea clasamentului. Datele sunt stocate în structuri (porecla jucătorului, contul acestuia, data încheierii sesiunii de joc). Datele sunt adăugate la sfârșitul fișierului când jocul se termină. Când apelați elementul „Hall of Fame”, fișierul este deschis pentru citire cu posibilitatea de editare. În continuare, este declarată o matrice dinamică de structuri, în care sunt scrise datele din fișier, după care matricea este sortată și formatată pe consolă (numărul maxim posibil de rezultate este de 12, dacă tabloul conține 13 rezultate, acesta din urmă este aruncat după sortare). Apoi, fișierul este suprascris cu o matrice de structuri rezultate, după care matricea este distrusă.
- „CurrentSave.bin” este un fișier binar pentru stocarea jocurilor salvate. Apelat pentru citire atunci când este lansat subelementul „Continuare” al articolului „Joc”. Poate conține date pentru restabilirea unei sesiuni de joc neterminate: numărul liniei care conține prova navei, numărul de kilometri parcurși, numărul de încercări rămase, locația obiectelor pe ecran. Cu ajutorul acestor date se formează o sesiune de joc care o repetă exact pe cea neterminată. Pentru a evita înșelăciunea, atunci când încărcați o sesiune dintr-un fișier, fișierul este șters. Când apăsați Escape în timpul jocului, acest fișier este creat și toate datele necesare sunt scrise în el pentru continuarea cu succes a sesiunii de joc.
Elementul de meniu principal „Ajutor” este o funcție care preia un parametru de la 0 la 22 și afișează următoarele 12 rânduri a câte 50 de caractere fiecare din parametrul de intrare. Controlul se efectuează recursiv folosind săgețile sus și jos.
void Help(int switcher) ( system("cls"); cout<< "ПРОКРУТКА: СТРЕЛКИ ВВЕРХ/ВНИЗ | ВЕРНУТЬСЯ: ESCAPE\n"; char arr = { " УПРАВЛЕНИЕ В МЕНЮ Передвигаться по пунктам – СТРЕЛКИ ВВЕРХ/ВНИЗ Выбрать пункт – ПРОБЕЛ или ENTER Вернуться в предыдущее меню – ESCAPE УПРАВЛЕНИЕ В ИГРЕ Передвигаться вверх/вниз – СТРЕЛКИ ВВЕРХ/ВНИЗ Сделать выстрел – ПРОБЕЛ Вернуться в меню, сохранив игру – ESCAPE БРИФИНГ Вы – пилот космического корабля, попавшего в космическую бурю. Вам необходимо не разбиться и пролететь как можно большее расстояние. Корабль оборудован динамическим управлением. Чем быстрее вы летите – тем острее поворачивает судно. Корабльавтоматически постепенно разгоняется до 40 км/с. Вы можете сбивать космический мусор с помощью магнитной пушки, встроенной в судно, а также боковыми отбойниками. При управлении кораблем на щитке приборов отображается пройденная дистанция, текущая скорость и количество оставшихся «ячеек отката» (отображаются символом «&»), изначально их 3. Если решите прекратить игру – просто нажмите ESCAPE. Игра сохранится, и вы сможете ее продолжить даже после перезапуска приложения с помощью пункта «ПРОДОЛЖИТЬ!». В главном меню можно посмотреть таблицу почетных пилотов. Добейтесь своего права там оказаться! АВТОРСТВО Svjatoslav Laskov – AUTHOR Igor Marchenko – COACH National Technical University «Kharkiv Polytechnic Institute» 2016" }; for (int i = 0, buf = switcher; i < 13; i++) { for (int j = buf * 50; j < buf * 50 + 50; j++) cout << arr[j]; if (i != 12) cout << endl; buf++; } int controller = _getch();//получить значение нажатой клавиши if (controller == 224)//если была нажата стрелка controller = _getch();//то определить какая именно if (controller == 72)//если стрелка вверх if (switcher > < 22) Help(switcher + 1); else Help(22); if (controller == 27)//если Escape StartMenu(2); }
Elementul din meniul principal „Ieșire” - iese din aplicație.
Manualul utilizatorului
CONTROLUL MENIU
o Deplasați-vă prin puncte - SĂGEATĂ SUS/JOS
o Selectați elementul - SPAȚIU sau ENTER
o Reveniți la meniul anterior - ESCAPE
COMENZI DE JOC
o Deplasare în sus/jos - SĂGEATĂ SUS/JOS
o Fă o lovitură - SPAȚIU
o Reveniți la meniu după salvarea jocului - ESCAPE
BRIEFING
Ești pilotul unei nave spațiale prins într-o furtună spațială. Nu trebuie să vă prăbușiți și să zburați cât mai departe posibil.
Nava este echipată cu control dinamic. Cu cât zbori mai repede, cu atât nava se întoarce mai ascuțită. Nava accelerează automat treptat până la 40 km/s.
Puteți doborî resturile spațiale cu ajutorul pistolului magnetic încorporat în navă, precum și a deflectoarelor laterale.
La conducerea navei, panoul de instrumente afișează distanța parcursă, viteza actuală și numărul de „celule rollback” rămase (afișat prin simbolul „&”), inițial sunt 3 dintre ele.
Dacă decideți să opriți jocul, apăsați ESCAPE. Jocul va fi salvat și îl puteți continua chiar și după repornirea aplicației folosind elementul „CONTINUAȚI!”.
În meniul principal, puteți vedea tabelul piloților de onoare. Obține dreptul de a fi acolo!
Rezultat
Personal, am avut o mare plăcere de la dezvoltarea unui astfel de proiect mărunt, mai ales că consola standard este concepută pentru a afișa informații, și nu pentru jocuri. Din această cauză, rata de cadre s-a dovedit a fi foarte limitată, indiferent de computerul pe care rulează aplicația.
De asemenea, am vrut să împart aplicația în mai multe fire pentru un răspuns mai corect la apăsările de la taste ale utilizatorului, dar voi implementa firele în următorul proiect în C++.
Sursă
#include „conio.h” #include „windows.h” #include „ctime” #include
Puteți descărca fișierul .exe de aici.
Eu sunt acel fruct. Toate proiectele mele personale de jocuri pe care le-am făcut în ultima vreme au fost scrise în „vanilie” C. Nimeni altcineva nu face asta, așa că s-ar putea să vă întrebați de ce am făcut această alegere.
Următoarele conține opinii despre limbaje de programare care s-ar putea să nu vă placă. am avertizat.
De ce am nevoie de la o limbă
Unele cerințe nu fac obiectul discuțiilor sau compromisurilor. În primul rând, limbajul trebuie să fie de încredere. Nu-mi permit să-mi pierd timpul căutând greșeli pe care nu le-am făcut.Am scris o mulțime de jocuri în Flash și iată, Flash a murit. Nu vreau să petrec timp portând jocuri vechi pe platforme moderne, vreau să scriu jocuri noi. Am nevoie de o platformă în care să am încredere pentru a dura.
Ceea ce vreau cu siguranță este să evit să depind de un anumit sistem de operare. Ideal - pentru a putea dezvolta pentru console. Prin urmare, este important ca limbajul să vă permită să portați cu ușurință ceea ce este scris în el și, de asemenea, să aibă un suport bun pentru bibliotecile multiplatforme.
Ce vreau eu de la limba
Simplitatea este cea mai importantă cerință, dar nu esențială. Mi se pare nebunește de plictisitor studierea caracteristicilor limbajului și a minunatului său API „inteligent”. O limbă ideală poate fi învățată într-o zi și nu a mai folosit documentația sa.Găsirea și remedierea erorilor epuizează creativitatea. Vreau mai puține erori, așa că vreau o tastare puternică, o raportare bună a erorilor și o analiză statică a codului. Vreau să simplific căutarea erorilor și, în consecință, instrumente bune de depanare și analiză dinamică.
Nu mă interesează o imagine frumoasă și realistă, dar îmi pasă de performanță. Mai puțin solicitant de resurse extinde gama de posibilități disponibile pentru implementare. Este deosebit de interesant să urmăriți ce se întâmplă cu computerele moderne puternice când dezvoltatorul nu se gândește la performanță.
Sunt și mai îngrijorat de viteza compilatorului. Nu sunt un maestru budist al concentrării, iar așteptarea mai mult de 10 secunde este o risipă. Mai rău, este în afara fluxului. Se pare că tocmai s-a uitat pe Twitter și 5 minute au dispărut undeva.
Nu sunt fan OOP. De cele mai multe ori petrecut la serviciu, m-am ocupat de cursuri și obiecte. Dar cu cât mai departe, cu atât înțeleg mai puțin de ce este necesar să combin codul și datele atât de strâns. Vreau să lucrez cu datele ca și cum ar fi date și să scriu codul care se potrivește cel mai bine situației.
Alternative
C++ continuă să fie limbajul cel mai utilizat pentru dezvoltarea jocurilor și din motive întemeiate. Până acum, majoritatea proiectelor mele personalizate sunt scrise pe el și nu îmi place.C++ îmi acoperă nevoile, dar nu se potrivește cu dorințele mele. El este extrem de complex. În ciuda prezenței instrumentelor adecvate, este ușor să faci greșeli insidioase pe el. De asemenea, în comparație cu C, se compilează lent. C++ are performanțe ridicate și oferă caracteristici care nu sunt disponibile în C, dar nu este ceea ce vreau și vine cu prețul unei complexități mari.
C# și Java au probleme similare. Aceștia sunt monștri proliști și complexi și am nevoie de un animal mic și simplu. Ambele limbi trimit programatorul direct în abisul OOP, iar eu sunt împotrivă. La fel ca în majoritatea limbilor de nivel înalt, multe dintre lucrurile complexe sunt ascunse în așa fel încât nimic nu vă împiedică să vă împușcați accidental în picior.
Îmi place foarte mult Go. În multe privințe, este un C reinventat, cu avertismentul că a fost în pregătire de câțiva ani înainte de a fi lansat publicului. Aș dori să folosesc Go, dar există o capcană uriașă - colectarea gunoiului. Dezvoltarea jocului în Go este discutabilă, deoarece colectorul de gunoi va întrerupe întreaga lume a jocului, ceea ce dezvoltatorul nu și-o poate permite. De asemenea, aici totul nu este foarte bine cu bibliotecile de jocuri. Și deși puteți adapta oricând o bibliotecă C pentru această afacere și fără prea multe probleme, tot generează multă muncă inutilă. În plus, am îndoieli cu privire la perspective. Go ar fi bine pentru web, dar este un mediu în schimbare rapidă. Acest lucru s-a simțit mai ales odată cu moartea lui Flash.
Nu-mi place deloc JavaScript. Oferă atât de multă libertate încât nu înțeleg cum reușesc oamenii să scrie proiecte complicate pe el. Și nici nu vreau să încerc.
Haxe pare mult mai promițător decât restul limbilor de pe această listă. Nu are probleme cu bibliotecile. Dacă încep să scriu din nou pentru web, cu siguranță îl voi cunoaște mai bine. Oarecum îngrijorat de relativa tinerețe a limbii, va trăi? Nu mai am nimic de adăugat, cu Haxe am reușit doar să joc puțin, fără să intru adânc.
Jonathan Blow își scrie propria limbă. Limba pe care el însuși ar dori să o folosească. Îi admir decizia, uneori chiar îmi aprind ideea de a face la fel. Dar nu aruncați toate bibliotecile existente. Și să realizezi compatibilitatea deplină cu ele nu este atât de simplu. Și în general este dificil, aș prefera să continui să scriu jocuri, și nu limbaje de programare.
De ce C este cea mai bună alegere pentru mine
Deși C este periculos, este de încredere. Acesta este un cuțit foarte ascuțit care poate tăia degetele la fel de ușor ca tăierea legumelor. Dar este simplu și să înveți cum să-l folosești corect nu va fi dificil.Bună, e rapid. Și când vine vorba de compilare, nu îmi imaginez că orice limbă o poate face mai repede.
Este posibil să scrieți cod, astfel încât să funcționeze peste tot. Și de obicei este relativ ușor. Este greu de imaginat că într-o zi asta se va schimba.
Există un suport excelent pentru biblioteci și instrumente.
Deși mă întristează puțin, C este totuși cel mai bun limbaj pentru mine.
Chiar nu vreau să spun ceva de genul: „Hei, ar trebui să scrii și tu în C”. Sunt conștient că preferințele mele sunt foarte specifice. În plus, în ceea ce privește cantitatea de cod pe care o scriu în diferite limbi, codul C „vanilat” ocupă o poziție de lider, așa că acesta face deja parte din zona mea de confort.
Deci da, C este cea mai bună alegere pentru mine.
De la traducător
Traducerea pe alocuri este destul de liberă, dar nu în detrimentul sensului sau al conținutului.Traducerea am pregătit-o special pentru vineri, în această zi este deosebit de potrivită, după părerea mea. Deși autorul textului original pare să scrie cu toată seriozitatea... chiar tu înțelegi totul dacă îl citești. Nu trebuie luat ca adevăr.
Cu sugestii, urări și comentarii, ca de obicei, în LAN.