Kako programirati igre v C. Vadnica ena

01

z dne 05

Uvod v vaje za programiranje iger

To je prva od več iger, ki programirajo Vadnice v C za popolne začetnike. Namesto da bi se osredotočili na poučevanje C, potem prikažite primere programov, ki jih poučujejo C, tako da vam nudijo popolne programe (tj. Igre) na C-ju

Naj bo preprosto

Prva igra v seriji je konzola (t.i. tekstovna igra, imenovana Star Empires). Star Empires je preprosta igra, v kateri morate zajeti vseh 10 sistemov v Galaxyju, medtem ko ustavite nasprotnika AI, ki počne isto.

Začnete imeti sistem 0, medtem ko vaš sovražnik ima sistem 9. Preostalih osem sistemov (1-8) se začne nevtralno. Vsi sistemi se začnejo v kvadraturi parsec x 5 parsec, tako da noben sistem ni več kot 6 parsec. Najbolj oddaljeni dve točki sta (0,0) in (4,4). Po Pitagorovem izrekanju je najbolj oddaljena od vseh dveh sistemov kvadratni koren ((4)2 + (4)2), ki je kvadratni koren 32, kar je približno 5.657.

Upoštevajte, da to ni končna različica in bo spremenjena. Zadnja sprememba: 21. avgusta 2011.

instagram viewer

Turn in v realnem času

Igra temelji na vrsti in z vsakim korakom oddate ukaz za premik poljubnega števila flot iz katerega koli sistema, ki ga imate v kateri koli drug sistem. Če imate več kot en sistem, lahko naročite flote za premik iz vseh sistemov na ciljni sistem. To se izvede sorazmerno zaokroženo, tako da, če imate v lasti tri sisteme (1,2,3) z 20, 10 in 5 flotami in naročite 10 flot, da gredo v sistem 4, potem 6 preide iz sistema 1, 3 iz sistema 2 in 1 iz sistema 3. Vsaka flota se giblje 1 parsec na zavoj.

Vsak zavoj traja 5 sekund, čeprav lahko spremenite hitrost, da ga pospešite ali upočasnite, tako da spremenite 5 v tej vrstici kode v 3 ali 7 ali karkoli izberete. Poiščite to kodo:

onesec = ura () + (5 * CLOCKS_PER_SEC);

Vadnica za programiranje C

Ta igra je programirana in predpostavlja, da ne poznate nobenega programa C. V tem in naslednjih dveh ali treh vajah bom predstavil funkcije programiranja C, ko bodo napredovale. Najprej boste potrebovali prevajalnik za Windows. Tu sta dva brezplačna:

  • Poskusite CC386
  • Or Visual C ++ 2010 Express

Članek CC386 vas vodi skozi ustvarjanje projekta. Če namestite ta prevajalnik, morate le naložiti program Hello World, kot je opisano, kopirajte in prilepite izvorno kodo na primer, ga shranite in nato pritisnite F7, da ga sestavite in zaženete. Tudi članek Visual C ++ 2010 ustvarja svetovni program. Prepišite ga in pritisnite F7, da sestavite Star Empires., F5, da ga zaženete.

Na naslednji strani - Star Star Empires delujejo

02

z dne 05

Ustvarjanje zvezdnih imperijev

Ustvarjanje zvezdnih imperijev

V igri moramo shraniti informacije o flotah in sistemih. Flota je ena ali več ladij z ukazom za prehod iz enega sistema v drugega. Zvezdni sistem je več planetov, vendar je v tej igri bolj abstraktna entiteta. Za floto moramo imeti naslednje podatke.

  • Sistem porekla (1-10).
  • Namembni sistem (1-10)
  • Koliko ladij (1-veliko)
  • Obrne se Prihod
  • Čigava je flota? 0 = igralec, 9 = sovražnik

Za to bomo uporabili strukturo v C:

Strukturni vozni park {
int iz sistema;
int tosystem;
int zavoji;
velikost flote;
lastnik int;
};

Struktura je zbirka podatkov, v tem primeru 5 številk, ki jih manipuliramo kot eno. Vsaka številka ima ime, na primer iz sistema, sistema. Ta imena so imena spremenljivk v C in lahko podčrtajo podobno kot to, vendar ne presledki. V C so številke ali celo število; cela števila, kot sta 2 ali 7, se imenujejo inte ali številke z decimalnimi deli, kot sta 2.5 ali 7.3333, in jih imenujemo floats. V celotnih Zvezdnih imperijah uporabljamo lebdeče le enkrat. Košček kode, ki izračuna razdaljo med dvema mestoma. Vsaka druga številka je int.

Flota je torej ime podatkovne strukture, ki vsebuje pet int spremenljivk. Zdaj je to za eno floto. Ne vemo, koliko flot bomo morali imeti, zato bomo dodelili velikodušni prostor za 100 z uporabo matrike. Zamislite si strukturo kot mizo za večerjo s prostorom za pet oseb (intov). Niz je kot dolga vrsta miz za večerjo. 100 miz pomeni, da lahko sprejme 100 x 5 oseb.

Če bi dejansko postregli s temi stoli za večerjo, bi morali vedeti, katera miza je bila, in to storimo s številčenjem. V C vedno naštejemo elemente nizov, začenši z 0. Prva miza za večerjo (flota) je številka 0, naslednja je 1, zadnja pa 99. Se vedno spomnim, da je to, koliko mize za večerjo je ta miza od samega začetka? Prva je na začetku, tako da je 0 skupaj.

Tako razglasimo floto (tj. Naše mize za večerjo).

strukturne flote [100];

Preberite to od leve proti desni. Strukturna flota se nanaša na našo strukturo za eno floto. Poimenska flota je ime, ki ga damo vsem flotam in [100] nam pove, da je v floti spremenljivke 100 flotov flota. Vsak int zaseda 4 lokacije v pomnilniku (imenovane bajti), tako da ena flota zaseda 20 bajtov, 100 flot pa 2000 bajtov. Vedno je dobro vedeti, koliko pomnilnika potrebuje naš program, da hrani svoje podatke.

V strukturni floti ima vsak vmesnik celo število. Ta številka je shranjena v 4 bajtih, razpon tega pa je od -2,147,483,647 do 2,147,483,648. Večino časa bomo uporabili manjše vrednosti. Obstaja deset sistemov, tako iz sistema kot iz sistema v vrednosti 0 do 9.

Na naslednji strani: Sistemi in naključne številke

03

z dne 05

O sistemih in naključnih številkah

Vsak od nevtralnih sistemov (1-8) se začne s 15 ladjami (številko sem izbral iz zraka!), Druga dva (vaš sistem: sistem 0 in računalniški nasprotnik v sistemu 9) pa imata po 50 ladij. Z vsakim zavojem se število ladij v sistemu poveča za 10% zaokroži navzdol. Po enem obratu, če jih ne premaknete, bo vaš 50 postal 55, vsak nevtralni sistem pa 16 (15 + 1,5 zaokroženo navzdol). Upoštevajte, da se flote, ki se selijo v drug sistem, ne povečajo.

Tako povečanje števila ladij se morda zdi nekoliko nenavadno, vendar sem to storila, da se igra nadaljuje. Namesto da bi to vadbo natrpali s preveč o oblikovalskih odločitvah, sem napisal ločen članek o oblikovalskih odločitvah Star Empires.

Izvedbeni sistemi

Na začetku moramo generirati vse sisteme in jih postaviti na zemljevid z največ enim sistemom v vsaka lokacija. Ker je na našem omrežju 5 x 5 25 lokacij, bomo imeli deset sistemov in 15 praznih lokacije. Generiramo jih s funkcijo GenMapSystems (), ki si jo bomo ogledali na naslednji strani.

Sistem je shranjen v strukturi z naslednjimi 4 polji, ki so vsa int.

strukturni sistem {
int x, y;
int numfleet;
lastnik int;
};

Galaksija (vseh 10 sistemov) je shranjena v drugem polju tako kot s flotami, razen da imamo 10 sistemov.

galaksija sistema Stru [10];

Naključne številke

Vse igre potrebujejo naključna števila. C ima vgrajeno funkcijo rand (), ki vrne naključno int. To lahko prisilimo v obseg s prenosom največjega števila v in uporabo operaterja%. (Modul). To je kot aritmetika ure, le da namesto 12 ali 24 prenesemo int številko, imenovano max.

/ * vrne številko med 1 in max * /
int Naključno (int max) {
donos (rand ()% max) +1;
}

To je primer funkcije, ki je kos kode, zavit v vsebniku. Prva vrstica tukaj, ki se začne / * in konča * /, je komentar. Pove, kaj počne koda, vendar jo prevajalnik, ki prebere navodila C, zanemari in jih pretvori v navodila, ki jih računalnik razume in lahko izvede zelo hitro.

  • Se sprašujete, kaj je prevajalnik? Preberi Kaj je prevajalnik? (Članek)

Funkcija je kot matematična funkcija, kot je Sin (x). V to funkcijo so trije deli:

int naključno (int max)

Int pove, kakšno vrsto številke vrne (običajno int ali float). Naključno je ime funkcije in (int max) pravi, da prehajamo v int številki. Lahko ga uporabimo takole:

int kocke;
kocke = Naključno (6); / * vrne naključno število med 1 in 6 * /

Linija:

donos (rand ()% max) +1;

Na naslednji strani: Ustvarjanje naključnega začetnega zemljevida

04

z dne 05

Ustvarjanje naključnega začetnega zemljevida

Zemljevid zvezdnih imperijev

Ta spodnja koda ustvari začetni zemljevid. To je prikazano zgoraj.

void GenMapSystems () {
int i, x, y;
za (x = 0; x za (y = 0; y postavitev [x] [y] = '';
}
InitSystem (0,0,0,50,0);
InitSystem (9,4,4,50,1);
/ * Poiščite prazen prostor za preostalih 8 sistemov * /
za (i = 1; naredim {
x = Naključno (5) -1;
y = Naključno (5) -1;
}
while (postavitev [x] [y]! = '');
InitSystem (i, x, y, 15, -1);
}
}

Ustvarjanje sistemov je stvar dodajanja sistemov igralcev in nasprotnikov (pri 0,0) in (4,4) ter nato naključno dodajanje 8 sistemov na preostalih 23 praznih mestih.

Koda uporablja tri int spremenljivke, ki jih določa vrstica

int i, x, y;

Spremenljivka je lokacija v pomnilniku, ki vsebuje int vrednost. Spremenljivki x in y imata koordinate sistemov in bodo imele vrednost v območju 0-4. Spremenljivka i se uporablja za štetje v zankah.

Za umestitev 8 naključnih sistemov v mrežo 5x5 moramo vedeti, ali lokacija že ima sistem in preprečiti, da bi bil drug na isti lokaciji. Za to uporabljamo preprost dvodimenzionalni niz znakov. Tip char je druga vrsta spremenljivke v C in ima en sam znak, kot je "B" ali "x".

Primer na Datatypes in C

Temeljne vrste spremenljivk v C so int (cela števila kot 46), char (en sam znak kot "A") in plovec (za številke s plavajočo točko, kot je 3.567). Matrični elementi [] so za seznam seznamov istega elementa. Torej char [5] [5] določa seznam seznamov; dvodimenzionalni niz struktur. Zamislite si kot 25 kosov Scrabble, razporejenih v mreži 5 x 5.

Zdaj smo zanko!

Vsak znak je na začetku nastavljen na prostor v dvojni zanki z uporabo dveh za izjave. Izjava ima tri dele. Inicializacija, primerjalni del in del spremembe.

za (x = 0; x za (y = 0; y postavitev [x] [y] = '';
}

  • x = 0; To je inicializacijski del.
  • x
  • x ++. To je del sprememb. Doda 1 na x.

Torej (za (x = 0; x

Znotraj for (zanka x je zanka za y, ki naredi isto za y. Ta zanka y se zgodi za vsako vrednost X. Kadar je X 0, bo Y zanko od 0 do 4, ko je X 1, Y bo zanko in tako naprej. To pomeni, da se vsaka od 25 lokacij v matrični postavitvi inicializira v presledek.

Po zanki for je poklicana funkcija InitSystem s petimi parametri int. Pred klicem je treba določiti funkcijo ali prevajalnik ne bo vedel, koliko parametrov mora imeti. InitSystem ima teh pet parametrov.

Na naslednji strani: Ustvarjanje naključnega začetnega zemljevida se nadaljuje ...

05

z dne 05

Ustvarjanje naključnega začetnega zemljevida se nadaljuje

To so parametri za InitSystem.

  • systemindex - vrednost od 0 -9.
  • x in y - koordinate sistema (0-4).
  • številke - koliko ladij je v tem sistemu.
  • lastnik. Kdo je lastnik sistema. 0 pomeni igralca, 9 pomeni sovražnika.

Torej vrstica InitSystem (0,0,0,50,0) inicializira sistem 0 na lokacijah x = -0, y = 0 s 50 ladjami do lastnika 0.

C ima tri vrste zanke, medtem ko zanke, za zanke in naredimo zanke in uporabljamo za in počnemo v funkciji GenMapSystems. Tu moramo postaviti preostalih 8 sistemov nekje v galaksiji.

za (i = 1; naredim {
x = Naključno (5) -1;
y = Naključno (5) -1;
}
while (postavitev [x] [y]! = '');
InitSystem (i, x, y, 15,0);
}

V tej kodi sta dve ugnezdeni zanki. Zunanja zanka je stavka za stavek, ki šteje spremenljivko i od začetne vrednosti 1 do končne vrednosti 8. Uporabili bomo i za sklic na sistem. Ne pozabite, da smo že inicializirali sistem 0 in 9, zato zdaj inicializiramo sisteme 1-8.

Vse od do {do časa (postavitev [x] [y] je druga zanka. Skladnja je to {what} while (pogoj je resničen); Tako dodamo naključne vrednosti x in y, vsaka vrednost v območju 0-4. Naključno (5) vrne vrednost v območju od 1 do 5, odštevanje 1 pa dobi območje 0-4.

Ne želimo postaviti dveh sistemov na iste koordinate, zato ta zanka išče naključno lokacijo, ki ima v njej prostor. Če je tam sistem, postavitev [x] [y] ne bo presledka. Ko pokličemo InitSystem, tam postavi drugačno vrednost. BTW! = Pomeni, da ni enako in == pomeni enako.

Ko koda čez čas doseže InitSystem (postavitev [x] [y]! = ''), Se x in y zagotovo nanašata na mesto v postavitvi, ki ima v njem presledek. Tako lahko pokličemo InitSystem in nato poiščemo krog for za zanko in poiščemo naključno mesto za naslednji sistem, dokler ne postavimo vseh 8 sistemov.

Prvi klic v InitSystem nastavi sistem 0 na lokaciji 0,0 (zgoraj levo od omrežja) s 50 voznimi parki in me preganja. Drugi klic sproži sistem 9 na lokaciji 4,4 (spodaj desno) s 50 flotami in je v lasti igralca 1. Podrobno si bomo ogledali, kaj InitSystem dejansko počne v naslednji vadnici.

#define

Te vrstice označujejo dobesedne vrednosti. Običajno je, da jih dodate z velikimi črkami. Povsod, kjer prevajalec vidi MAXFLEETS, uporablja vrednost 100. Tu jih spremenite in velja povsod:

  • #define ŠIRINA 80
  • #define HEIGHT 50
  • #define MAXLEN 4
  • #define MAXFLEETS 100
  • #define MAXSISTEMI 10
  • #define FIGHTMARKER 999

Zaključek

V tej vadnici smo zajeli spremenljivke in uporabo int, char in struktur za njihovo združevanje in matriko za ustvarjanje seznama. Potem preprosto zanko z uporabo in naredite. Če pregledate izvorno kodo, se istočasno vidijo iste strukture.

  • za (i = 0; i
  • za (i = 0; i

Vadnica Twowill pogled na vidike C, omenjene v tej vadnici.

instagram story viewer