01
од 05
Увод у Водич за програмирање игара
Ово је прва од неколико игара за програмирање игрица Ц за комплетне почетнике. Уместо да се концентришете на подучавање Ц-а, онда покажите примере програма који подучавају Ц пружајући вам комплетне програме (тј. Игре) на Ц-у
То је једноставно
Прва игра у низу је конзола (тј. Игра заснована на тексту која се зове Стар Емпирес). Стар Емпирес је једноставна игра у којој морате заробити свих 10 система у Галаксији док заустављате противника против АИ да ради исто.
Почињете да поседујете Систем 0, док ваш непријатељ 9. Преосталих осам система (1-8) започиње неутрално. Сви системи почињу у квадратури од 5 парсека к 5, тако да ниједан систем није више од 6 парсека. Најдаље две тачке су (0,0) и (4,4). Према Питагори теореми, најудаљенија раздаљина од било која два система је квадратни корен ((4)2 + (4)2) што је квадратни корен 32, што је око 5.657.
Имајте на уму да ово није коначна верзија и да ће бити измењене. Задња промена: 21. августа 2011.
Корак и у стварном времену
Игра се заснива на потезу и сваки заокрет дајете наредбе за премјештање било ког броја флота из било којег другог система у било који други систем. Ако поседујете више од једног система, можете наручити флоте да се преселе са свих система на циљни систем. То се врши пропорционално заокружено, тако да ако имате три система (1,2,3) са 20, 10 и 5 флота и наредите 10 флота да пређу у систем 4, тада ће 6 прећи из система 1, 3 из система 2 и 1 из система 3. Свака флота креће 1 парсец по потезу.
Сваки заокрет траје 5 секунди, иако можете променити брзину да бисте га убрзали или успорили тако што ћете променити 5 у овом ретку кода у 3 или 7 или шта год желите. Потражите овај код:
онесец = сат () + (5 * ЦЛОЦКС_ПЕР_СЕЦ);
Водич за програмирање Ц
Ова игра је програмирана и претпоставља да не знате ниједан Ц програм. Увешћућу функције програмирања за Ц у ове и наредне две или три туторијала док напредују. Прво, иако вам је потребан преводилац за Виндовс. Ево два бесплатна:
- Покушати ЦЦ386
- Или Висуал Ц ++ 2010 Екпресс
Чланак ЦЦ386 води вас кроз креирање пројекта. Ако инсталирате тај преводилац, онда морате само учитати Хелло Хелло програм како је описано, копирати и залепити изворни код преко примера, сачувати га, а затим притисните Ф7 да бисте га компилирали и покренули. Исто тако чланак Висуал Ц ++ 2010 креира хелло ворлд програм. Препишите је и притисните Ф7 да бисте направили Стар Емпирес., Ф5 да бисте је покренули.
На следећој страници - Стварање Звезданих царстава
02
од 05
Стварање Звезданих царстава
Стварање Звезданих царстава
У игри морамо да чувамо информације о флотама и системима. Флота је један или више бродова са заповиједом да се преселе из једног система у други. Звездани систем је велики број планета, али више је апстрактни ентитет у овој игри. За флоту морамо да задржимо следеће информације.
- Систем порекла (1-10).
- Одредишни систем (1-10)
- Колико бродова (1-много)
- Окрене се доласку
- Чија је флота? 0 = играч, 9 = непријатељ
Ми ћемо користити структуру у Ц да задржимо ово:
струцт флот {
инт фромсистем;
инт тосистем;
инт окреће;
инт флоетсизе;
инт овнер;
};
Структура је збирка података, у овом случају 5 бројева којима манипулирамо као један. Сваки број има име, нпр. Фромсистем, тосистем. Ова имена су променљива имена у Ц и могу имати подвлаке попут_то, али не и размаке. У Ц бројеви су или цели бројеви; цели бројеви попут 2 или 7 називају се инт или бројеви са децималним деловима попут 2,5 или 7,3333 и називају се флоатс. У целом Звезданом царству користимо плове само једном. У комаду кода који израчунава раздаљину између два места. Сваки други број је инт.
Дакле, флота је назив за структуру података која садржи пет инт варијабли. Сада је то за једну флоту. Не знамо колико ћемо флота морати да држимо, тако да ћемо доделити великодушну собу за 100 користећи низ. Помислите на структуру као на столу за вечеру са собом за пет људи. Низ је попут дугог низа столова за вечеру. 100 столова значи да може да прими 100 к 5 људи.
Да смо заправо сервирали тих 100 столова за вечеру, морали бисмо знати који је сто и то радимо бројењем. У Ц увек нумерирамо елементе низова почевши од 0. Први сто за вечеру (возни парк) је број 0, следећи је 1, а последњи је 99. Увек га се сећам како је то колико столова за вечером је овај стол од самог почетка? Прва је на почетку, па је и 0.
Овако проглашавамо флоту (тј. Наше столове за вечеру).
флоте структурне флоте [100];
Прочитајте ово с лева на десно. Флота Структуре односи се на нашу структуру која држи једну флоту. Назив флоте је име које дајемо свим флотама и [100] нам говори да у варијабли флоте постоји флота од 100 к структура. Сваки инт заузима 4 локације у меморији (зване бајтови), тако да једна флота заузима 20 бајтова, а 100 флота 2000 бајтова. Увек је добра идеја знати колико меморије треба нашем програму да чува своје податке.
У флоти структуре сваки од инта има цео број. Овај број се чува у 4 бајта и распон овог је од -2,147,483,647 до 2,147,483,648. Већину времена користит ћемо мање вриједности. Постоји десет система тако да ће и систем и тосистем одржавати вредности од 0 до 9.
На следећој страници: Системи и случајни бројеви
03
од 05
О системима и случајним бројевима
Сваки од неутралних система (1-8) почиње са 15 бродова (број који сам покупио из ваздуха!) За почетак, а остала два (ваш: систем 0 и ваш рачунарски противник у систему 9) имају по 50 бродова. Сваким заокретом број бродова у систему повећава се за 10% заокруженим према доље. Дакле, након једног заокрета, ако их не померате, ваших 50 ће постати 55, а сваки од неутралних система имаће 16 (15 + 1,5 заокружено). Имајте на уму да се флоте које се крећу ка другом систему не повећавају.
Повећање броја бродова на овај начин може изгледати мало чудно, али то сам учинио како бих игра наставила даље. Уместо да претрпам овај туториал са превише о дизајнерским одлукама, написао сам посебан чланак о дизајнерским одлукама Стар Емпирес-а.
Имплементациони системи
На почетку морамо генерирати све системе и ставити их на мапу, са максимално једним системом свака локација. Пошто на нашој мрежи 5 к 5 постоји 25 локација, имат ћемо десет система и 15 празних локације. Ми их генерирамо помоћу функције ГенМапСистемс () коју ћемо погледати на следећој страници.
Систем је смештен у структури, са следећа 4 поља која су сва инт.
систем система {
инт к, и;
инт нумфлеетс;
инт овнер;
};
Галаксија (свих 10 система) је смештена у другом низу баш као и с флотама, осим што имамо 10 система.
галаксија система система [10];
Рандом Нумберс
Све игре требају насумичне бројеве. Ц има уграђени функцијски ранд () који враћа случајни инт. То можемо наметнути у опсег преношењем максималног броја у и коришћењем оператора%. (Модул). То је попут аритметике сата, осим што уместо 12 или 24 преносимо инт број који се зове мак.
/ * враћа број између 1 и мак * /
инт Рандом (инт мак) {
повратак (ранд ()% мак) +1;
}
Ово је пример функције која је комад кода замотан у контејнер. Први ред који започиње / * и завршава * / је коментар. Каже шта ради код, али га игнорише компајлер који чита Ц упутства и претвара их у упутства која рачунар разуме и може да изврши врло брзо.
- Питате се шта је компајлер? читати Шта је компајлер? (Чланак)
Функција је попут математичке функције као што је Син (к). Постоје три дела ове функције:
инт Рандом (инт мак)
Инт каже какву врсту броја враћа (обично инт или флоат). Рандом је назив функције и (инт мак) каже да преносимо инт број. Могли бисмо га користити овако:
инт коцкице;
коцкице = Случајно (6); / * враћа случајни број између 1 и 6 * /
Линија:
повратак (ранд ()% мак) +1;
На следећој страници: Генерисање случајне почетне мапе
04
од 05
Генерисање случајне почетне мапе
Овај код испод генерише почетну мапу. То је приказано горе.
воид ГенМапСистемс () {
инт и, к, и;
фор (к = 0; к фор (и = 0; и изглед [к] [и] = '';
}
ИнитСистем (0,0,0,50,0);
ИнитСистем (9,4,4,50,1);
/ * Пронађите празан простор за преосталих 8 система * /
за (и = 1; и {
к = Случајно (5) -1;
и = Случајно (5) -1;
}
вхиле (изглед [к] [и]! = '');
ИнитСистем (и, к, и, 15, -1);
}
}
Генерирање система је ствар додавања система играча и противника (на 0,0) и (4,4), а затим случајним додавањем 8 система на преостале 23 празне локације.
Код користи три инт променљиве дефинисане линијом
инт и, к, и;
Променљива је локација у меморији која садржи инт вредност. Променљиве к и и држе координате система и задржат ће вредност у опсегу 0-4. Варијабла и користи се за бројање у петљи.
Да бисмо поставили 8 случајних система у мрежу 5к5, морамо знати да ли локација већ има систем и спречити да други постави на исту локацију. За то користимо једноставан дводимензионални низ знакова. Тип цхар је друга врста променљиве у Ц и садржи један знак попут „Б“ или „к“.
Пример за Дататипес ин Ц
Основни тип променљивих у Ц су инт (цели бројеви као 46), цхар (један знак попут „А“) и плутајући (за држање бројева са плутајућом тачком попут 3.567). Низови [] су за држање листа истог елемента. Тако цхар [5] [5] дефинише списак листа; дводимензионални низ знакова. Замислите то као 25 Сцраббле комада распоређених у мрежи 5 к 5.
Сада смо петља!
Сваки знак се у почетку поставља на размак у двострукој петљи користећи два за изјаве. Изјава има три дела. Иницијализација, упоредни део и део промене.
фор (к = 0; к фор (и = 0; и изглед [к] [и] = '';
}
- к = 0; Ово је део за иницијализацију.
- Икс
- к ++. Ово је део промене. То додаје 1 до к.
Дакле (за (к = 0; к)
Унутар фор (петља к је фор и и петља која ради исто за и. Ова петља и се догађа за сваку вредност Кс. Када је Кс 0, И ће се кретати од 0 до 4, када је Кс 1, И ће се петљати и тако даље. То значи да се свака од 25 локација у низу изгледа иницијализира у размак.
Након фор-петље позива се функција ИнитСистем с пет инт параметара. Функција мора бити дефинисана пре него што је позвана или компајлер неће знати колико параметара треба да има. ИнитСистем има ових пет параметара.
На следећој страници: Наставља се случајна почетна мапа ...
05
од 05
Наставља се случајна почетна мапа
Ово су параметри за ИнитСистем.
- системиндек - вредност од 0 -9.
- к и и - координате система (0-4).
- бројеви - колико бродова има у овом систему.
- власник. Ко је власник система. 0 значи играча, 9 значи непријатеља.
Дакле, линија ИнитСистем (0,0,0,50,0) иницијализира систем 0 на локацијама к = -0, и = 0 са 50 бродова до власника 0.
Ц има три врсте петље, док петље, за петље и радимо петље, а ми користимо и радимо у функцији ГенМапСистемс. Овде морамо да поставимо преосталих 8 система негде у галаксији.
за (и = 1; и {
к = Случајно (5) -1;
и = Случајно (5) -1;
}
вхиле (изглед [к] [и]! = '');
ИнитСистем (и, к, и, 15,0);
}
У овом коду постоје две угнијежђене петље. Вањска петља је за израз који броји и променљиву од почетне вредности 1 до крајње вредности 8. Користићемо и за упућивање на систем. Запамтите да смо већ иницирали систем 0 и 9, тако да сада иницијализујемо системе 1-8.
Све, од времена {до времена (распоред [к] [и] је друга петља. То је синтакса је то {сометхинг} вхиле (услов је тачан); Стога доделимо случајне вредности к и и, свака вредност у опсегу 0-4. Случајно (5) враћа вредност у опсегу 1 до 5, одузимањем 1 добија се распон 0-4.
Не желимо да постављамо два система у исте координате, тако да ова петља тражи случајну локацију која у себи има размак. Ако постоји систем, изглед [к] [и] неће бити размак. Када назовемо ИнитСистем, тамо се додаје другачија вредност. БТВ! = Значи није једнак и == значи једнак.
Када код након неког времена стигне до ИнитСистем-а (лаиоут [к] [и]! = ''), Кс и и дефинитивно се односе на место у изгледу које има простор у њему. Дакле, можемо назвати ИнитСистем и затим кружити кроз петљу за проналазак случајне локације за следећи систем док се не поставе свих 8 система.
Први позив ИнитСистем поставља систем 0 на локацији 0,0 (горњи леви део мреже) са 50 флота и ја ме пита. Други позив иницијализира систем 9 на локацији 4,4 (доље десно) са 50 флота и у власништву је играча 1. Помно ћемо погледати шта ИнитСистем заправо ради у следећем водичу.
#дефинисати
Ове линије објављују буквалне вриједности. Обично их је стављати у велика слова. Где год преводилац види МАКСФЛЕЕТС, користи вредност 100. Промените их овде и то се примењује свуда:
- #дефине ШИРИНА 80
- #дефине ХЕИГХТ 50
- #дефине МАКСЛЕН 4
- #дефине МАКСФЛЕЕТС 100
- #дефине МАКССИСТЕМС 10
- #дефине ФИГХТМАРКЕР 999
Закључак
У овом туториалу смо покрили променљиве и употребу инт, цхар и структурних група да би их груписали плус низ за креирање листе. Затим једноставна петља помоћу и за. Ако прегледате изворни код, исте структуре видеће се с времена на време.
- за (и = 0; и
- за (и = 0; и
Туториал Твовилл погледати аспекте Ц поменуте у овом туториал.