home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katB.exe
/
katB
/
CERVI
/
CERVI.SGP
< prev
next >
Wrap
Text File
|
2002-09-26
|
49KB
|
1,169 lines
SGPC 5.03 CZ0#352N00132 2.09.2002 20:55:10 StructNo 1 1
# include <sgpbalt.h>
# include "Cervi_ks.h"
# include "Cervi_fc.c"
// Triviální funkce a podprogramy jsou v souboru Cervi_fc.c
// typy a konstanty v .h
//gMyτUdálost a gKlávesa jsou v sgpbalt.h, gaMyτ v Cervi_ks.h
// Globální makra
//
-o1-Globals ----------------------------------------------------------------
-c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
\C case
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
===Globals ------------------------------------------------------------------
/*-hf(*/
/*-hf-*/
short int NastavHraní(short int *RychlostHry, Typ¼ervi *¼ervi, TypOvlKlávesy Klávesy[], double Hustota¼ervà)
/*-hf-*/;
short int M_NovéHraní( void )
/*-hf-*/;
short int M_Nápov╪da( void )
/*-hf-*/;
short int M_Soubor( void )
/*-hf-*/;
short int M_Auto²i( void )
/*-hf-*/;
short int M_Konec( void )
/*-hf-*/;
void ZobrazMenu( void )
/*-hf-*/;
void main( void )
/*-hf)*/;
;-h---------------------------------------------------------------------------
short int NastavHraní(short int *RychlostHry, Typ¼ervi *¼ervi, TypOvlKlávesy Klávesy[], double Hustota¼ervà)
-s--NastavHraní ■ 4 -2 -26 259
NastavHraní
n!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
n ;nastav hraní
/**** p²ípravy */
TypSoubor SVstup; /* souborová prom╪nná pro naƒítání dat */
double AktHmotnost; /* udrºuje ƒásteƒnou hmotnost ƒerva, kolem kterého se toƒí v∞poƒet */
string ⁿet╪zec, V∞zva;
short i, j, k;
/* i, j a k jsou pomocné prom╪nné pro indexaci polí apod., uºívané jen v blízkém okolí v∞skytu */
/**** nastavení hraní */
KlKonecObsluhy();
GrSmaºOkno();
/**** nadpis */
GrNastavPozici(15*Grµí²kaZnaku,GrV∞τkaZnaku);
GrNastavBarvuPop²edí(Bílá);
GrPiτⁿet╪zec("¼ervi - nastavení nové hry - stiskn╪te klávesu...");
¼ekejNaKlávesu();
/*zp╪t?*/
if (¼tiKlávesuZFronty() == KlEsc){
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
GrNastavBarvuPop²edí(Sv╪tloτedá);
/**** rychlost hry */
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
do{ /* dokud nedostanem korektní vstup */
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
V∞zva = "Zadej rychlost hry (1-99):";
if (Gr¼tiSⁿet╪zec(V∞zva,ⁿet╪zec,2,0,Tmavoτedá<<4|Bílá) == -1) {
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
/*vyhodnocení*/
*RychlostHry = StrNaL¼íslo(ⁿet╪zec,0);
} while ((*RychlostHry > 99) Nebo (*RychlostHry < 1));
GrPiτⁿet╪zec("Rychlost hry je ");
GrNastavBarvuPop²edí(Bílá);
GrPiτL¼íslo(*RychlostHry,-1);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(".");
/**** poƒet ƒervà */
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
do{ /* dokud nedostanem korektní vstup */
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
V∞zva = "Zadej poƒet ƒervà (2-" + StrL¼íslo(MaxP¼ervà,-1) + "):";
if (Gr¼tiSⁿet╪zec(V∞zva,ⁿet╪zec,2,0,Tmavoτedá<<4|Bílá) == -1) {
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
/*vyhodnocení*/
¼ervi->P¼ervà = StrNaL¼íslo(ⁿet╪zec,0);
} while ((¼ervi->P¼ervà > MaxP¼ervà) Nebo (¼ervi->P¼ervà < 2));
GrPiτⁿet╪zec("Poƒet ƒervà je ");
GrNastavBarvuPop²edí(Bílá);
GrPiτL¼íslo(¼ervi->P¼ervà,-1);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(".");
/**** poƒet kuliƒek */
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
do{ /* dokud nedostanem korektní vstup */
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
V∞zva = "Zadej poƒet zaƒáteƒních kuliƒek (2-" + StrL¼íslo(MaxPKuliƒek,-1) + "):";
if (Gr¼tiSⁿet╪zec(V∞zva,ⁿet╪zec,2,0,Tmavoτedá<<4|Bílá) == -1) {
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
/*vyhodnocení*/
¼ervi->PoƒáteƒníPKuliƒek = StrNaL¼íslo(ⁿet╪zec,0);
} while ((¼ervi->PoƒáteƒníPKuliƒek > MaxPKuliƒek) Nebo (¼ervi->PoƒáteƒníPKuliƒek < 2));
GrPiτⁿet╪zec("Poƒet kuliƒek na zaƒátku hry je ");
GrNastavBarvuPop²edí(Bílá);
GrPiτL¼íslo(¼ervi->PoƒáteƒníPKuliƒek,-1);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(".");
/**** ƒervi */
k = Ano;
for (i = 0; i < ¼ervi->P¼ervà; i++){
/*** jeden ƒerv barva podle jeho barvy */
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
/* barva (pro text) */
switch (i){
case 0:¼ervi->Jeden¼erv[i].Barva = ¼ervená;break;
case 1:¼ervi->Jeden¼erv[i].Barva = Krémová;break;
case 2:¼ervi->Jeden¼erv[i].Barva = Modrá;break;
case 3:¼ervi->Jeden¼erv[i].Barva = Oranºová;break;
default:¼ervi->Jeden¼erv[i].Barva = ¼erná;break;
}
/* jméno */
do{ /* dokud nedostanem korektní vstup */
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
V∞zva = "Zadej jméno hráƒe ƒ." + StrL¼íslo(i+1,-1) + ":";
if (Gr¼tiSⁿet╪zec(V∞zva,¼ervi->Jeden¼erv[i].Jméno,MaxDJména,0,Tmavoτedá<<4|Bílá) == -1){
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
} while (¼ervi->Jeden¼erv[i].Jméno == ""); /* prázdné jméno */
GrPiτⁿet╪zec("¼erv ƒ." + StrL¼íslo(i+1,-1) + " se jmenuje ");
GrNastavBarvuPop²edí(¼ervi->Jeden¼erv[i].Barva);
GrPiτⁿet╪zec(¼ervi->Jeden¼erv[i].Jméno);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(".");
/* t∞m */
GrPiτNov∞ⁿádek();
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
do{ /* dokud nedostanem korektní vstup */
if (k == Ne) {
¼ervi->Jeden¼erv[i].T∞m = i;
break;
}
else {
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
V∞zva = "Zadej ƒíslo t∞mu, k n╪muº " + ¼ervi->Jeden¼erv[i].Jméno + " pat²í (1-" + StrL¼íslo(¼ervi->P¼ervà,-1) + "):";
if (Gr¼tiSⁿet╪zec(V∞zva,ⁿet╪zec,2,0,Tmavoτedá<<4|Bílá) == -1) {
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
/* vyhodnocení a vracení */
¼ervi->Jeden¼erv[i].T∞m = StrNaL¼íslo(ⁿet╪zec,0) - 1;
if ((¼ervi->Jeden¼erv[i].T∞m > ¼ervi->P¼ervà - 1) Nebo (¼ervi->Jeden¼erv[i].T∞m < 0)) {
/* automatické doplσování */
k = Ne;
¼ervi->Jeden¼erv[i].T∞m = i;
break;
}
GrPiτⁿet╪zec(¼ervi->Jeden¼erv[i].Jméno + " je ƒlenem t∞mu ");
GrNastavBarvuPop²edí(Bílá);
GrPiτL¼íslo(¼ervi->Jeden¼erv[i].T∞m+1,-1);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(".");
}
} while ((¼ervi->Jeden¼erv[i].T∞m > ¼ervi->P¼ervà - 1) Nebo (¼ervi->Jeden¼erv[i].T∞m < 0));
} /* konec nastavení jednoho ƒerva */
/**** konec naƒítání od uºivatele */
/**** dotvo²ení ƒervà */
for (i = 0; i < ¼ervi->P¼ervà; i++){ /* vτichni ¼ervi */
AktHmotnost = 0;
/* barva je p²ed nastavením jména (z klávesnice) */
¼ervi->Jeden¼erv[i].Klávesy = &Klávesy[i];
¼ervi->Jeden¼erv[i].Body = 0;
¼ervi->Jeden¼erv[i].Hmotnost = 0;
¼ervi->Jeden¼erv[i].PKuliƒek = ¼ervi->PoƒáteƒníPKuliƒek;
for (j = 0; j < ¼ervi->Jeden¼erv[i].PKuliƒek; j++){ /* vτechny kuliƒky ¼erva */
/* poloha aº p²i nastavení konkrétní hry */
¼ervi->Jeden¼erv[i].Kuliƒka[j].Polom╪r = (16 - j);
/* m = Ró*V; VKoule = (4*Pí*r^3)/3 */
¼ervi->Jeden¼erv[i].Kuliƒka[j].Hmotnost = Hustota¼ervà*4*Pí*sqr(¼ervi->Jeden¼erv[i].Kuliƒka[j].Polom╪r)*¼ervi->Jeden¼erv[i].Kuliƒka[j].Polom╪r/3;
¼ervi->Jeden¼erv[i].Kuliƒka[j].Rychlost.X = 0;
¼ervi->Jeden¼erv[i].Kuliƒka[j].Rychlost.Y = 0;
¼ervi->Jeden¼erv[i].Kuliƒka[j].Síla.X = 0;
¼ervi->Jeden¼erv[i].Kuliƒka[j].Síla.Y = 0;
AktHmotnost += ¼ervi->Jeden¼erv[i].Kuliƒka[j].Hmotnost;
}
¼ervi->Jeden¼erv[i].Hmotnost = AktHmotnost;
/*GrPiτD¼íslo(AktHmotnost,-1,2);
GrPiτZnak('*');
¼ekejNaKlávesu();*/
}
/**** naƒtení ovládacích kláves - poƒet podle poƒtu ƒervà */
SVstup = SouborOtev²i("*\\Cervi_so\\kláv.txt",SouborP²ístup¼tení|SouborP²ístupTextov∞);
/* kontrola úsp╪chu */
if (SVstup == 0) { /* neúsp╪ch */
/* hláτka */
/* hláτka */
GrPiτHláτku("CHYBA: Hra nemàºe p²istupovat ke sv∞m souboràm. (Cervi_so\\kláv.txt)"," Pokuste se umoºnit p²ístup, nebo kontaktujte v∞robce.");
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne; /* !!!!!!!!!!! nevracej se, nybrz imp hodnoty, i do hlasky */
} /* jinak úsp╪ch */
/* naƒítání */
SouborNastavPozici(SVstup,0,SouborPoziceOdZaćtku);
Soubor¼tiNov∞ⁿádek(SVstup);Soubor¼tiNov∞ⁿádek(SVstup);
for (i = 0; i < ¼ervi->P¼ervà; i++){ /* jedna sada kláves */
if (Soubor¼tiI¼íslo(SVstup,Klávesy[i].Nahoru) != 0) {
/* poτkozená data */
/* hláτka */
GrPiτHláτku("CHYBA: Soubor ovládacích kláves (Cervi_so\\kláv.txt) je poτkozen."," Pokuste se jej obnovit, nebo kontaktujte v∞robce.");
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
if (Soubor¼tiI¼íslo(SVstup,Klávesy[i].Dolà) != 0) {
/* poτkozená data */
/* hláτka */
GrPiτHláτku("CHYBA: Soubor ovládacích kláves (Cervi_so\\kláv.txt) je poτkozen."," Pokuste se jej obnovit, nebo kontaktujte v∞robce.");
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
if (Soubor¼tiI¼íslo(SVstup,Klávesy[i].Doprava) != 0) {
/* poτkozená data */
/* hláτka */
GrPiτHláτku("CHYBA: Soubor ovládacích kláves (Cervi_so\\kláv.txt) je poτkozen."," Pokuste se jej obnovit, nebo kontaktujte v∞robce.");
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
if (Soubor¼tiI¼íslo(SVstup,Klávesy[i].Doleva) != 0) {
/* poτkozená data */
/* hláτka */
GrPiτHláτku("CHYBA: Soubor ovládacích kláves (Cervi_so\\kláv.txt) je poτkozen."," Pokuste se jej obnovit, nebo kontaktujte v∞robce.");
/* úklid po naƒítání */
KlZaćtekObsluhy(0);
GrSmaºOkno();
/* návrat */
return Ne;
}
Soubor¼tiNov∞ⁿádek(SVstup);
}
SouborZav²i(SVstup);
/* ƒekání na ov╪²ení */
GrPiτNov∞ⁿádek();
GrNastavPozici(2*Grµí²kaZnaku,GrPoziceY());
GrPiτⁿet╪zec("Stiskn╪te klávesu a hrajte nebo se vra£te do menu (Esc).");
KlZaćtekObsluhy(0);
Kl¼ekejNaUdálostKlávesnice();
if ((gKlUdálost.Typ == KlUdálostKlDolà) ASouƒasn╪ (gKlUdálost.Klávesa == KlScanEsc)){
/* návrat */
GrSmaºOkno();
return Ne;
}
/* záv╪r naƒítání - animy by se p²i p²edƒasném návratu zapomn╪ly zruτit */
for (i = 0; i < ¼ervi->P¼ervà; i++){ /* vτichni ƒervi */
for (j = 0; j < ¼ervi->Jeden¼erv[i].PKuliƒek; j++){ /* vτechny kuliƒky ¼erva */
¼ervi->Jeden¼erv[i].Kuliƒka[j].Anim = AnimP²edm╪tVytvo²(2001 + 1000*i + j*PFází,PFází,0,1);
}
}
/* úklid po naƒítání */
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrSmaºOkno();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
short int M_NovéHraní( void )
-s--M_NovéHraní ■ 87 -2 78 259
____________________________________________________M_NovéHraní________________________________________________________________
zaƒátek prost²edek ______konec______
naƒtení,~nastavení *:KonecHraní~Není~Ano uvolnit,~vyprázdnit návrat
0!1 _______________________________________jedna~hra___________________________________________________ 9! :return~Ne
zaƒátek úvod~? zápas záv╪r,~vyhodnocení znovu~hrát?
2! *:KonecHry~Není~Ano h! Z!
____________________________________jedno~kolo___________________________________
vτichni~ƒervi bonusy~? ____interakce____ │ pauza? sejmuti~obrazu? konec?
#N:(i,¼ervi.P¼ervà) zdi ocasy bonusy~? │ /P /s k!
jeden~ƒerv z! o! │ ano ano
hraje │ P! U!
/:¼ervi.Jeden¼erv[i].Hraje==Ano │
____ano____ │
v∞poƒty animace │
w! a! │
│
│
│
│
│
│
│
│
│
│
│
│
│
│
│
│
│
:¼ekej(100-RychlostHry)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;naƒti nastavení ze souboru a inicializuj herní prom╪nné
/**** p²ípravy */
TypSoubor SVstup; /* souborová prom╪nná pro naƒítání dat */
double AktHmotnost; /* udrºuje ƒásteƒnou hmotnost ƒerva, kolem kterého se toƒí v∞poƒet */
string ⁿet╪zec; /* univerzální ²et╪zec */
short VT∞m, KonecHraní = Ne, KonecHry = Ne, RychlostHry = ImpRychlost;
int i, j, k, l;
/* i, j, k a l jsou pomocné prom╪nné pro indexaci polí apod., uºívané jen v blízkém okolí v∞skytu */
/* VT∞m - vít╪zn∞ t∞m (pouºití ve vyhodnocení a testu konce hry) */
int HláτkaX = 156, HláτkaY = 120; /* konstanty pro umíst╪ní hláτky */
int MaxBody = 0; /* inic */
int MaxSílaHlavy = ImpMaxSílaHlavy; /* maximální síla hlavy */
double Hustota¼ervà = ImpHustota¼ervà; /* hustota ƒervà pro dopoƒtení hmotnosti */
double Tuhost = ImpTuhost; /* tuhost spoje kuliƒek */
double Zpomalení = ImpZpomalení; /* zpomalení (pseudot²ení) */
double KoefOdrazu = ImpKoefOdrazu; /* podíl pohlcené energie p²i odrazu */
double GravZrych = ImpGravZrych; /* gravitaƒní zrychlení */
double Meziv∞sledek, Alfa; /* pomocné prom╪nné */
float VzdálenostKuliƒek; /* pomocná prom╪nná */
TypAnimP²edm╪t Hláτka[6];
int SSI = 0; /* ƒíslo screenshotu (v aktuálním b╪hu programu) */
TypOvlKlávesy Klávesy[MaxP¼ervà];
Typ¼ervi ¼ervi;
/**** naƒtení nastavení fyzikálních vlastností ƒervà a prost²edí ze souboru */
SVstup = SouborOtev²i("*\\Cervi_so\\fyz.txt",SouborP²ístup¼tení|SouborP²ístupTextov∞);
/* kontrola úsp╪chu */
if (SVstup == 0) { /* neúsp╪ch */
/* hláτka */
GrPiτHláτku("CHYBA: Hra nemàºe p²istupovat ke sv∞m souboràm. (Cervi_so\\fyz.txt)","Pokuste se umoºnit p²ístup, nebo kontaktujte v∞robce.");
/* úklid */
/* návrat */
return Ne;
}
if (SouborNastavPozici(SVstup,0,SouborPoziceOdZaćtku) == -1) {
/* hláτka */
GrPiτHláτku("CHYBA: soubor Cervi_so\\fyz.txt je poτkozen.","Pokuste se umoºnit p²ístup, nebo kontaktujte v∞robce.");
/* úklid */
/* návrat */
return Ne;
}
/* bezpeƒné ƒtení !!!!!!!!!!!! pouºij imp hodnoty */
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiI¼íslo(SVstup,MaxSílaHlavy);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiD¼íslo(SVstup,Tuhost);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiD¼íslo(SVstup,Zpomalení);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiD¼íslo(SVstup,KoefOdrazu);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiD¼íslo(SVstup,Hustota¼ervà);
Soubor¼tiNov∞ⁿádek(SVstup);
Soubor¼tiD¼íslo(SVstup,GravZrych);
SouborZav²i(SVstup);
KoefOdrazu = sqrt(1-KoefOdrazu); /* p²edpoƒítání pro p²ím∞ v∞poƒet rychlosti */
1 ;nastav hraní
/* je v po²ádku nastaveno ? */
if (NastavHraní(&RychlostHry, &¼ervi, Klávesy, Hustota¼ervà) == Ne) return Ne; /* ne - skonƒi */
2 ;p²iprav hru
GrNastavV∞stup(GrV∞stupOkno);
GrSmaºOkno();
KonecHry = Ne;
/* oºivení a donastavení ƒervà */
for (i = 0; i < ¼ervi.P¼ervà; i++){ /* vτichni ƒervi */
¼ervi.Jeden¼erv[i].Hraje = Ano;
AktHmotnost = 0;
¼ervi.Jeden¼erv[i].PKuliƒek = ¼ervi.PoƒáteƒníPKuliƒek;
¼ervi.Jeden¼erv[i].Hmotnost = 0;
/* generování nové polohy do m²íºe (proti kolizím) */
do {
k = Grµí²kaPolíƒka*(1 + Náhodné¼íslo(µí²kaProstoru - 1)); /* X */
l = GrV∞τkaPolíƒka*(1 + Náhodné¼íslo(V∞τkaProstoru - 1)); /* Y */
KonecHry = Ano;
for (j = 0; j < i; j++) {
if ((k == ¼ervi.Jeden¼erv[j].Kuliƒka[Hlava].Poloha.X)
ASouƒasn╪ (l == ¼ervi.Jeden¼erv[j].Kuliƒka[Hlava].Poloha.Y)){
/* obsazeno */
KonecHry = Ne;
}
/* jinak volné místo */
}
} while (KonecHry == Ne);
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.X = k;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.Y = l;
/* kuliƒky */
for (j = 0; j < ¼ervi.Jeden¼erv[i].PKuliƒek; j++){ /* vτechny kuliƒky */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X = ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.X;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y = ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.Y;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X = 0;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y = 0;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.X = 0;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.Y = 0;
AktHmotnost += ¼ervi.Jeden¼erv[i].Kuliƒka[j].Hmotnost;
}
¼ervi.Jeden¼erv[i].Hmotnost = AktHmotnost;
}
KonecHry = Ne; /* pouºito p²i generování nové polohy ƒervà */
w ;prove╘ w∞poƒty pro p²íτtí stav ƒervà
/***** hlava */
/*** nová síla hlavy - podle ovládání */
/* ovládání */
/* vodorovná */
if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Doleva)) {
/* doleva */
if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Nahoru)) {
/* a nahoru */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = - MaxSílaHlavy/sqrt(2);
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = - MaxSílaHlavy/sqrt(2);
}
else if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Dolà)) {
/* a dolu */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = - MaxSílaHlavy/sqrt(2);
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = MaxSílaHlavy/sqrt(2);
}
else {
/* nikam */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = - MaxSílaHlavy;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = 0;
}
}
else if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Doprava)) {
/* doprava */
if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Nahoru)) {
/* a nahoru */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = MaxSílaHlavy/sqrt(2);
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = - MaxSílaHlavy/sqrt(2);
}
else if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Dolà)) {
/* a dolu */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = MaxSílaHlavy/sqrt(2);
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = MaxSílaHlavy/sqrt(2);
}
else {
/* nikam */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = MaxSílaHlavy;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = 0;
}
}
else {
/* jenom svislé */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X = 0;
if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Nahoru)) {
/* a nahoru */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = - MaxSílaHlavy;
}
else if (KlKlávesaStisknuta(¼ervi.Jeden¼erv[i].Klávesy->Dolà)) {
/* a dolu */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = MaxSílaHlavy;
}
else {
/* nikam */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y = 0;
}
}
/*** nová rychlost hlavy - podle síly a zpomalení*/
AktHmotnost = ¼ervi.Jeden¼erv[i].Hmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.X += ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.X/AktHmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.Y += ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Síla.Y/AktHmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.X *= Zpomalení;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.Y *= Zpomalení;
/*** nová poloha hlavy - podle rychlosti */
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.X += ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.X;
¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.Y += ¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Rychlost.Y;
/***** kuliƒky */
for (j = Hlava + 1; j < ¼ervi.Jeden¼erv[i].PKuliƒek; j++){
/** nová síla - podle p²edchozí kuliƒky nebo hlavy*/
¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.X = Tuhost*(¼ervi.Jeden¼erv[i].Kuliƒka[j-1].Poloha.X - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X);
¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.Y = Tuhost*(¼ervi.Jeden¼erv[i].Kuliƒka[j-1].Poloha.Y - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y);
/** nová rychlost - podle síly a zpomalení */
AktHmotnost -= ¼ervi.Jeden¼erv[i].Kuliƒka[j-1].Hmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X += ¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.X/AktHmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y += ¼ervi.Jeden¼erv[i].Kuliƒka[j].Síla.Y/AktHmotnost;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X *= Zpomalení;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y *= Zpomalení;
/** nová poloha - podle rychlosti */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X += ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y += ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y;
}
/*redukce bodà proti p²eteƒení*/
if (¼ervi.Jeden¼erv[i].Body > (2147483646)/2) { /* 2147483648(2^31) - 2 */
for (j = 0; j < ¼ervi.P¼ervà; j++) ¼ervi.Jeden¼erv[j].Body /= 2;
}
a ;animuj ƒerva [i]
/* hlava */
AnimP²edm╪tAnimuj(¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Anim,¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.X-Grµí²kaPolíƒka/2,¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Poloha.Y-GrV∞τkaPolíƒka/2,-1);
/* ostatní kuliƒky */
for (j = Hlava + 1; j < ¼ervi.Jeden¼erv[i].PKuliƒek; j++){
AnimP²edm╪tAnimuj(¼ervi.Jeden¼erv[i].Kuliƒka[j].Anim,¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X-Grµí²kaPolíƒka/2,¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y-GrV∞τkaPolíƒka/2,-1);
}
z ;obsluº interakce zdí a ƒervà (zprav. odrazy)
for (i = 0; i < ¼ervi.P¼ervà; i++){ /* kaºd∞ ƒerv */
/* p²eskoƒení nehrajících ƒervà */
if (¼ervi.Jeden¼erv[i].Hraje == Ne) continue;
for (j = 0; j < ¼ervi.Jeden¼erv[i].PKuliƒek; j++){ /* kaºdá kuliƒka O(n.m) */
/*** vτechny zdi */
/* svislé */
if (¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r <= 0) {
/* levá */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X = 1 + ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X = - KoefOdrazu * ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X;
}
else if (¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X + ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r >= µí²kaProstoru * Grµí²kaPolíƒka) {
/* pravá */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.X = µí²kaProstoru * Grµí²kaPolíƒka - 1 - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X = - KoefOdrazu * ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.X;
}
/* vodorovné */
if (¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r <= 0) {
/* horní */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y = 1 + ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y = - KoefOdrazu * ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y;
}
else if (¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y + ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r >= V∞τkaProstoru * GrV∞τkaPolíƒka) {
/* dolní */
¼ervi.Jeden¼erv[i].Kuliƒka[j].Poloha.Y = V∞τkaProstoru * GrV∞τkaPolíƒka - 1 - ¼ervi.Jeden¼erv[i].Kuliƒka[j].Polom╪r;
¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y = - KoefOdrazu * ¼ervi.Jeden¼erv[i].Kuliƒka[j].Rychlost.Y;
}
}
}
o ;obsluº interakce ocáskà ƒervà (ºranici)
for (i = 0; i < ¼ervi.P¼ervà; i++){ /* kaºd∞ ƒerv s kaºd∞m - O(n^2) */
/* p²eskoƒení nehrajících ƒervà */
if (¼ervi.Jeden¼erv[i].Hraje == Ne) continue;
for (j = 0; j < ¼ervi.P¼ervà; j++){ /* vτichni ƒervi */
/* p²eskoƒení nehrajících ƒervà a spoluhráƒà v t∞mu */
if ((¼ervi.Jeden¼erv[j].Hraje == Ne) Nebo (¼ervi.Jeden¼erv[i].T∞m == ¼ervi.Jeden¼erv[j].T∞m)) continue;
/* p²eskoƒení sebe sama (i == j) - rovnají se i t∞my, o ²ádek v∞τ */
/* sn╪dl mu ocas ? */
if (AnimP²edm╪tKolidujeS(¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Anim,¼ervi.Jeden¼erv[j].Kuliƒka[¼ervi.Jeden¼erv[j].PKuliƒek-1].Anim)){
/* ano, hlava ƒerva [i] koliduje s ocáskem (posl. kuliƒkou) ƒerva [j] */
/* sn╪dení */
AnimP²edm╪tSchovej(¼ervi.Jeden¼erv[j].Kuliƒka[¼ervi.Jeden¼erv[j].PKuliƒek-1].Anim);
/* p²ipoƒtení bodà */
¼ervi.Jeden¼erv[j].Hmotnost -= ¼ervi.Jeden¼erv[j].Kuliƒka[¼ervi.Jeden¼erv[j].PKuliƒek-1].Hmotnost;
¼ervi.Jeden¼erv[j].PKuliƒek--;
¼ervi.Jeden¼erv[i].Body += sqr(¼ervi.PoƒáteƒníPKuliƒek - ¼ervi.Jeden¼erv[j].PKuliƒek);
if (¼ervi.Jeden¼erv[j].PKuliƒek <= 1) {
/* ano, má uº jen hlavu - uº si nezahraje */
AnimP²edm╪tAnimuj(¼ervi.Jeden¼erv[j].Kuliƒka[¼ervi.PoƒáteƒníPKuliƒek-1].Anim,¼ervi.Jeden¼erv[j].Kuliƒka[Hlava].Poloha.X-Grµí²kaPolíƒka/2,¼ervi.Jeden¼erv[j].Kuliƒka[Hlava].Poloha.Y-GrV∞τkaPolíƒka/2,1);
AnimP²edm╪tSchovej(¼ervi.Jeden¼erv[j].Kuliƒka[Hlava].Anim);
¼ervi.Jeden¼erv[j].Hraje = Ne;
¼ervi.Pªiv∞ch¼ervà--;
/* p²ipoƒtení bodà */
¼ervi.Jeden¼erv[i].Body += ¼ervi.Jeden¼erv[j].Body;
}
}
}
}
k ;zjisti konec hry
/** regulérní: dàkaz sporem, p²edpokládám konec hry */
for (i = 0; i < ¼ervi.P¼ervà ; i++){ /* urƒení moºného vít╪zného t∞mu */
if (¼ervi.Jeden¼erv[i].Hraje == Ano) {
VT∞m = ¼ervi.Jeden¼erv[i].T∞m;
break;
}
}
for (i = 0; i < ¼ervi.P¼ervà; i++){ /* jsou vτichni zúƒastn╪ní z t∞mu? */
if ((¼ervi.Jeden¼erv[i].Hraje == Ano) ASouƒasn╪ (¼ervi.Jeden¼erv[i].T∞m != VT∞m)){
KonecHry = Ne; /* existuje hrრz jiného t∞mu, proto jeτt╪ není konec */
break;
}
else KonecHry = Ano;
}
/** vynucen∞ ovládáním: */
Kl¼tiUdálost(gKlUdálost);
if ((gKlUdálost.Typ==KlUdálostKlDolà) ASouƒasn╪ (gKlUdálost.Klávesa==KlScanEsc) ASouƒasn╪ (KonecHry == Ne)){
/* stisk Esc a není regulérní konec */
/*** ov╪²ení */
/* p²íprava a vykreslení */
for (i = 0;i < 6;i++){
Hláτka[i] = AnimP²edm╪tVytvo²(1 + i,1,1,1);
AnimP²edm╪tAnimuj(Hláτka[i],HláτkaX + i * Grµí²kaPolíƒka,HláτkaY,-1);
}
/* ƒekání na odpov╪╘ */
i = Ne;
KlVyprázdniFrontuUdálostí();
while (i == Ne){
Kl¼ekejNaUdálostKlávesnice();
if ((gKlUdálost.Klávesa == KlScanA) Nebo (gKlUdálost.Klávesa == KlScanEsc)) {
/* konec hry */
KonecHry = Ano;
i = Ano;
}
if (gKlUdálost.Klávesa == KlScanN) {
/* hra pokraƒuje */
i = Ano;
}
}
/* zruτení dotazu */
for (i = 0; i < 6; i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
}
P ;pozastav hru
/* vytvo²ení a vykreslení */
for (i = 0;i < 6;i++){
Hláτka[i] = AnimP²edm╪tVytvo²(61 + i,1,1,1);
AnimP²edm╪tAnimuj(Hláτka[i],HláτkaX + i*Grµí²kaPolíƒka,HláτkaY,-1);
}
/*ƒekání*/
KlVyprázdniFrontuUdálostí();
Kl¼ekejNaUdálostKlávesnice();
/*zruτení p²edm╪tà*/
for (i = 0;i < 6;i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
U ;uloº rastr
GrUloºBMP(0,0,-1,-1,"*\\SS"+StrL¼íslo(SSI++,4)+".bmp");
GrPiτZnak('*');
h ;grafick∞ konec a hodnocení
/*p²íprava a vykreslení*/
GrNastavBarvuPop²edí(¼erná);
GrNastavBarvuPozadí(¼erná);
GrKresliVypln╪n∞Obdélník(HláτkaX - Grµí²kaZnaku,HláτkaY - GrV∞τkaZnaku,HláτkaX + 41*Grµí²kaZnaku,HláτkaY + 9*GrV∞τkaZnaku); /* podklad */
/* vytvo²ení a animace hláτky KONEC */
for (i = 0; i < 6; i++){
Hláτka[i] = AnimP²edm╪tVytvo²(46 + i,1,1,1);
AnimP²edm╪tAnimuj(Hláτka[i],HláτkaX + i*Grµí²kaPolíƒka,HláτkaY - 50,-1);
}
GrNastavPozici(HláτkaX,HláτkaY);
GrNastavBarvuPop²edí(Sv╪tloτedá);
/*** v∞pis vít╪ze */
GrPiτⁿet╪zec("Zvít╪zil hrრ");
/*nalezení vít╪ze*/
j = -1;
MaxBody = 0;
for (i = 0;i < ¼ervi.P¼ervà; i++){
if ((1) ASouƒasn╪ (¼ervi.Jeden¼erv[i].Body > MaxBody)){
j = i;
MaxBody = ¼ervi.Jeden¼erv[i].Body;
}
}
/* v∞pis */
GrNastavBarvuPop²edí(¼ervi.Jeden¼erv[j].Barva);
GrPiτⁿet╪zec(¼ervi.Jeden¼erv[j].Jméno);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(", t∞m ƒíslo ");
GrNastavBarvuPop²edí(¼ervi.Jeden¼erv[j].Barva);
GrPiτL¼íslo(¼ervi.Jeden¼erv[j].T∞m + 1,-1);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτZnak('.');
/**** tabulka */
/* záhlaví */
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
GrNastavPozici(HláτkaX + 15,GrPoziceY());
GrPiτⁿet╪zec("po². jméno t∞m body");
GrPiτNov∞ⁿádek();
/*první ²ádek*/
GrPiτNov∞ⁿádek();
GrNastavPozici(HláτkaX + 15 + Grµí²kaZnaku,GrPoziceY());
/*barva*/
GrNastavBarvuPop²edí(¼ervi.Jeden¼erv[j].Barva);
GrPiτⁿet╪zec("1. ");
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(¼ervi.Jeden¼erv[j].Jméno);
GrNastavPozici(HláτkaX + 15 + MaxDJména*Grµí²kaZnaku + 5*Grµí²kaZnaku,GrPoziceY());
GrPiτL¼íslo(¼ervi.Jeden¼erv[j].T∞m + 1,-1);
GrPiτⁿet╪zec(" ");
GrPiτL¼íslo(¼ervi.Jeden¼erv[j].Body,-1);
/* oºivení hráƒà pro úƒely hledání po²edí */
for (i = 0; i < ¼ervi.P¼ervà; i++){
¼ervi.Jeden¼erv[i].Hraje = Ano;
}
¼ervi.Jeden¼erv[j].Hraje = Ne;
for (i = 0; i < ¼ervi.P¼ervà - 1; i++){
/*²ádek*/
/*kter∞ hráƒ? - vyuºívá vlastnosti .Hraje */
MaxBody = 0;
for (j = 0; j < ¼ervi.P¼ervà; j++){
if ((¼ervi.Jeden¼erv[j].Body >= MaxBody) ASouƒasn╪ (¼ervi.Jeden¼erv[j].Hraje == Ano)){
MaxBody = ¼ervi.Jeden¼erv[j].Body;
k = j;
}
}
¼ervi.Jeden¼erv[k].Hraje = Ne;
¼ervi.Pªiv∞ch¼ervà--;
/*v∞pis*/
GrPiτNov∞ⁿádek();
GrNastavPozici(HláτkaX + 15 + Grµí²kaZnaku,GrPoziceY());
GrNastavBarvuPop²edí(¼ervi.Jeden¼erv[k].Barva);
GrPiτU¼íslo(i+2,-1); /* po²adí */
GrPiτZnak('.');
GrPiτⁿet╪zec(" ");
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτⁿet╪zec(¼ervi.Jeden¼erv[k].Jméno);
GrNastavPozici(HláτkaX + 15 + MaxDJména*Grµí²kaZnaku + 5*Grµí²kaZnaku,GrPoziceY());
GrPiτL¼íslo(¼ervi.Jeden¼erv[k].T∞m + 1,-1);
GrPiτⁿet╪zec(" ");
GrPiτL¼íslo(¼ervi.Jeden¼erv[k].Body,-1);
}
¼ekej(1500);
KlVyprázdniFrontuUdálostí(); /* proti p²edƒasnému odklepnutí */
Kl¼ekejNaUdálostKlávesnice();
/** konec tabulky */
/* screenshot??
if ((gKlUdálost.Typ==KlUdálostKlDolà) ASouƒasn╪ (gKlUdálost.Klávesa==KlScanF1)) GrUloºBMP(0,0,-1,-1,"obraz.bmp");*/
/* zruτení hláτky KONEC */
for (i = 0; i < 6; i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
Z ;zjisti novou hru
/* p²íprava a vykreslení */
for (i = 0; i < 6; i++){
Hláτka[i] = AnimP²edm╪tVytvo²(16 + i,1,1,1);
AnimP²edm╪tAnimuj(Hláτka[i],HláτkaX + i * Grµí²kaPolíƒka,HláτkaY,-1);
}
/* ƒekání na odpov╪╘ */
KlVyprázdniFrontuUdálostí();
i = Ne;
while (i == Ne){
Kl¼ekejNaUdálostKlávesnice();
if (gKlUdálost.Klávesa == KlScanA) {
/* ano, znova */
KonecHraní = Ne;
/*** nulovat body? */
/* zruτení p²edm╪tà minulého dotazu */
for (i = 0; i < 6; i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
/* p²íprava a vykreslení */
for (i = 0; i < 6; i++){
Hláτka[i] = AnimP²edm╪tVytvo²(31 + i,1,1,1);
AnimP²edm╪tAnimuj(Hláτka[i],HláτkaX + i*Grµí²kaPolíƒka,HláτkaY,-1);
}
/* ƒekání na odpov╪╘ */
KlVyprázdniFrontuUdálostí();
i = Ne;
while (i == Ne){
Kl¼ekejNaUdálostKlávesnice();
if (gKlUdálost.Klávesa == KlScanA) {
/*ano, nulování*/
for (j = 0; j < ¼ervi.P¼ervà; j++) ¼ervi.Jeden¼erv[j].Body = 0;
}
i = Ano;
}
/* zruτení p²edm╪tà dotazu na nulování */
for (i = 0; i < 6; i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
}
else {
/* konec hraní */
KonecHraní = Ano;
/* zruτení p²edm╪tà dotazu */
for (i = 0; i < 6; i++){
AnimP²edm╪tSchovej(Hláτka[i]);
AnimP²edm╪tZruτ(Hláτka[i]);
}
}
i = Ano;
}
9 ;zruτ p²edm╪ty, ukli╘ po hraní
for (i = 0; i < ¼ervi.P¼ervà; i++){ /* vτichni ƒervi */
/* hlava */
AnimP²edm╪tZruτ(¼ervi.Jeden¼erv[i].Kuliƒka[Hlava].Anim);
/* ostatní kuliƒky */
for (j = Hlava + 1; j < ¼ervi.PoƒáteƒníPKuliƒek; j++){
AnimP²edm╪tZruτ(¼ervi.Jeden¼erv[i].Kuliƒka[j].Anim);
}
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
/P ;zjisti pozastavení hry
((gKlUdálost.Typ==KlUdálostKlDolà) ASouƒasn╪ (gKlUdálost.Klávesa == KlScanF1))
/s ; screenshot
((gKlUdálost.Typ==KlUdálostKlDolà) ASouƒasn╪ (gKlUdálost.Klávesa == KlScanF2))
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
short int M_Nápov╪da( void )
-s--M_Nápov╪da ■ 15 -2 -1 259
____________M_Nápov╪da___________
p²íprava napovídání zakonƒení
p! *:Konec==Ne k!
___________kousek__________
zobrazení vstupy
Z! *:Zm╪na==Ne
_____________________vstup______________________
naƒtení zm╪na~nebo~ukonƒení interaktivita~stránky
:Kl¼tiUdálost(gKlUdálost) z!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
p ;p²iprav podmínky
GrNastavV∞stup(GrV∞stupOkno);
GrNastavPàvodníPaletu();
GrNastavBarvuPozadí(0);
KlVyprázdniFrontuUdálostí();
short int Stránka = 0, Zm╪na = Ne, Konec = Ne;
int PStránek;
TypSoubor Soubor;
string ⁿet╪zec; /* pro naƒítání textà nápov╪dy */
/* ƒti ze souboru poƒet stránek */
Soubor = SouborOtev²i("*\\Cervi_hl\\help.txt",SouborP²ístup¼tení|SouborP²ístupTextov∞);
/* test na neúsp╪ch */
if (Soubor == 0) { /* neúsp╪ch */
/* hláτka */
GrPiτHláτku("CHYBA: Nápov╪da nemàºe p²istupovat ke sv∞m souboràm (Cervi_hl\\help.txt)."," Pokuste se umoºnit p²ístup, nebo kontaktujte v∞robce.");
/* úklid */
/* návrat */
return Ne;
}
Soubor¼tiNov∞ⁿádek(Soubor);
if (Soubor¼tiI¼íslo(Soubor,PStránek) != 0){ /* chyba! */
/* hláτka */
GrPiτHláτku("CHYBA: Soubor nápov╪dy (Cervi_hl\\help.txt) je poτkozen."," Pokuste se obnovit soubor, nebo kontaktujte v∞robce.");
/* úklid */
/* návrat */
return Ne;
}
SouborZav²i(Soubor);
z ;zjisti zm╪nu nebo ukonƒení
if (gKlUdálost.Typ == KlUdálostKlDolà){ /* stisk klávesy */
if ((gKlUdálost.Klávesa == KlScanDoleva) Nebo (gKlUdálost.Klávesa == KlScanNahoru)){
/* doleva nebo nahoru - zp╪t */
Stránka--;
if (Stránka < 0) { /* vyjela p²ed zaƒátek */
Stránka = 0;
}
else {
Zm╪na = Ano;
}
}
else if ((gKlUdálost.Klávesa == KlScanDoprava) Nebo (gKlUdálost.Klávesa == KlScanDolà)){
/* doprava nebo dolà - dál */
Stránka++;
if (Stránka > PStránek - 1) { /* vyjela za konec */
Stránka = PStránek - 1;
}
else {
Zm╪na = Ano;
}
}
else if ((gKlUdálost.Klávesa >= KlScan1) ASouƒasn╪ (gKlUdálost.Klávesa <= KlScan1 + PStránek - 1)){
/* p²ímá volba ƒísla stránky */
Zm╪na = Ano;
Stránka = (gKlUdálost.Klávesa - KlScan1);
}
if ((gKlUdálost.Klávesa == KlScanEsc) Nebo (gKlUdálost.Klávesa == KlScanF10)){
/* ukonƒení */
Konec = Ano;
Zm╪na = Ano;
}
}
k ;zakonƒi
return 0;
Z ;zobraz stránku Stránka nápov╪dy
GrSmaºOkno();
/* naƒtení scény */
/* naƒtení textu ze souboru */
Soubor = SouborOtev²i("*\\Cervi_hl\\help" + StrL¼íslo(Stránka,-1) + ".lat",SouborP²ístup¼tení|SouborP²ístupTextov∞);
/* kontrola úsp╪chu */
if (Soubor == 0) { /* neúsp╪ch */
/* hláτka */
GrPiτHláτku("CHYBA: Nápov╪da nemàºe p²istupovat ke sv∞m souboràm. (Cervi_hl\\help" + StrL¼íslo(Stránka,-1) + ".lat)"," Pokuste se umoºnit p²ístup, nebo kontaktujte v∞robce.");
/* úklid */
/* návrat */
return Ne;
}
/* nadpis */
GrNastavPozici(80,30);
GrNastavBarvuPop²edí(Modrá);
GrPiτⁿet╪zec("Nápov╪da pro hru ¼ervi - ");
GrPiτL¼íslo(Stránka+1,-1);
GrPiτⁿet╪zec(". stránka: ");
GrPiτNov∞ⁿádek();
GrNastavPozici(80,GrPoziceY()+5);
Soubor¼tiSⁿet╪zec(Soubor,ⁿet╪zec);
StrSmaº(ⁿet╪zec,-1,1); /* umazání \n */
GrNastavBarvuPop²edí(¼ervená);
GrPiτⁿet╪zec(ⁿet╪zec);
GrNastavBarvuPop²edí(Sv╪tloτedá);
GrPiτNov∞ⁿádek();
GrPiτNov∞ⁿádek();
/* sta£ */
GrDopiτSoubor(Soubor,35,GrPoziceY());
/* konec naƒítání */
SouborZav²i(Soubor);
/* ? naƒtení dalτího obrázku */
Zm╪na = Ne;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
short int M_Soubor( void )
-s--M_Soubor ■ 3 -2 -26 3
M_Soubor
:return~0
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
short int M_Auto²i( void )
-s--M_Auto²i ■ 3 -2 -27 3
M_Auto²i
:return~0
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
short int M_Konec( void )
-s--M_Konec ■ 2 -2 -27 3
M_Konec
:return~1;
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void ZobrazMenu( void )
-s--ZobrazMenu ■ 21 -2 -3 259
_________________ZobrazMenu_________________
p²íprava~a~vykreslení Obsluha
01! *:KonecM~==~Ne
____________________________________Jedno~kolo___________________________________
Vstupy Aktivace? V∞b╪r? model~ƒerva :¼ekej(50) zvláτtní~ukonƒení
v! klávesnicí /v (Esc,~F10)
k! ___________ano____________ z!
provedení~akce znovu-vykreslení~a~nov∞~vstup
p! 1v!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;deklaruj lokální prom╪nné
short int i; /* pomocná indexovací prom╪nná */
short int KonecM = 0;
/* p²íprava menu */
TypMenu Menu;
Menu.PTlaĒtek = 3;
Menu.AktivTlaĒtko = 0;
Menu.Tlaƒítko[0].Jméno = "Nová hra";
Menu.TlaĒtko[0].X = 14;
Menu.TlaĒtko[0].Y = 2;
Menu.Tlaƒítko[0].¼P²edm╪tu = 114; /* sudá ƒísla!! */
Menu.Tlaƒítko[0].Akce = M_NovéHraní;
Menu.Tlaƒítko[1].Jméno = "Nápov╪da";
Menu.TlaĒtko[1].X = 11;
Menu.TlaĒtko[1].Y = 6;
Menu.Tlaƒítko[1].¼P²edm╪tu = 114;
Menu.Tlaƒítko[1].Akce = M_Nápov╪da;
Menu.Tlaƒítko[2].Jméno = "Konec Programu";
Menu.TlaĒtko[2].X = 3;
Menu.TlaĒtko[2].Y = 8;
Menu.Tlaƒítko[2].¼P²edm╪tu = 114;
Menu.TlaĒtko[2].Akce = M_Konec;
1 ;vykresli nabídku
if (KonecM == Ne){ /* pokud jeτt╪ není konec */
/* naƒtení scény */
NaƒtiScénu("*\\Cervi.s00");
/* tlaĒtka */
for (i = 0; i < Menu.PTlaƒítek; i++){ /* pro vτechna tlaƒítka */
¼arujNaPozici(Menu.Tlaƒítko[i].¼P²edm╪tu,Menu.Tlaƒítko[i].X,Menu.Tlaƒítko[i].Y);
}
/* aktivace nové hry */
Menu.AktivTlaƒítko = 0; /* aktivní nová hra */
AktivujTlaĒtkoNa(Menu.TlaĒtko[Menu.AktivTlaĒtko].X,Menu.TlaĒtko[Menu.AktivTlaĒtko].Y);
}
v ;zpracuj data ze vstupních za²ízení
Kl¼tiUdálost(gKlUdálost);
k ;prob╪hla aktivace klávesnicí ? -> tak aktivuj
if (gKlUdálost.Typ == KlUdálostKlDolà){ /* stisk klávesy */
if ((gKlUdálost.Klávesa == KlScanDoleva) Nebo (gKlUdálost.Klávesa == KlScanDolà)){
/* doleva a dolà */
i = Menu.AktivTlaĒtko;
i++;
i = (i > Menu.PTlaĒtek - 1) ? Menu.PTlaĒtek - 1 : i; /* nejde za konec */
if (i != Menu.AktivTlaƒítko) { /* zm╪na akt. tl. */
DeaktivujTlaĒtkoNa(Menu.TlaĒtko[Menu.AktivTlaĒtko].X,Menu.TlaĒtko[Menu.AktivTlaĒtko].Y);
Menu.AktivTlaĒtko = i; /* ( Menu.AktivTlaĒtko++ ) */
AktivujTlaĒtkoNa(Menu.TlaĒtko[Menu.AktivTlaĒtko].X,Menu.TlaĒtko[Menu.AktivTlaĒtko].Y);
}
}
else if ((gKlUdálost.Klávesa == KlScanDoprava) Nebo (gKlUdálost.Klávesa == KlScanNahoru)){
/* doprava a nahoru */
i = Menu.AktivTlaĒtko;
i--;
i = (i < 0) ? 0 : i; /* nejde za konec */
if (i != Menu.AktivTlaƒítko) { /* zm╪na akt. tl. */
DeaktivujTlaĒtkoNa(Menu.TlaĒtko[Menu.AktivTlaĒtko].X,Menu.TlaĒtko[Menu.AktivTlaĒtko].Y);
Menu.AktivTlaĒtko = i; /* ( Menu.AktivTlaĒtko-- ) */
AktivujTlaĒtkoNa(Menu.TlaĒtko[Menu.AktivTlaĒtko].X,Menu.TlaĒtko[Menu.AktivTlaĒtko].Y);
}
}
}
p ;prove╘ akci aktivního tlaƒítka
KlVyprázdniFrontuUdálostí();
KonecM = Menu.TlaĒtko[Menu.AktivTlaĒtko].Akce();
KlVyprázdniFrontuUdálostí();
z ;zjisti zvláτtní ukonƒení
if ((gKlUdálost.Typ == KlUdálostKlDolà) ASouƒasn╪ ((gKlUdálost.Klávesa == KlScanEsc) Nebo (gKlUdálost.Klávesa == KlScanF10))) {
/* stisk Esc nebo F10 */
KonecM = Menu.TlaĒtko[TlKonec].Akce();
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/v ;byl proveden v∞b╪r
((gKlUdálost.Typ == KlUdálostKlDolà) ASouƒasn╪ ((gKlUdálost.Klávesa == KlScanEnter) Nebo (gKlUdálost.Klávesa == KlScanMezerník) Nebo (gKlUdálost.Klávesa == KlScanNumEnter)))
/* stisk kláves Enter (i NumPad) nebo Mezerník */
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void main( void )
-s--CERVI ■ 5 -2 -17 259
_________CERVI__________
Zaƒátek Prost²edek Konec
z! :ZobrazMenu() k!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
z ;nastav obrazovku, grafiku, klávesnici a myτ
EscPlus();
Vytvo²Prostor();
RychlostBaltazara(9);
GrNastavV∞stup(GrV∞stupOkno);
GrNastavPàvodníPaletu();
GrNastavBarvuPozadí(0);
AnimNastavGrV∞stup(GrV∞stupOkno);
NastavJménoBankyP²edm╪tà("*\\Cervi.b00");
KlZaćtekObsluhy(0);
k ;vra£ obrazovku, grafiku, klávesnici a myτ do pàvodního stavu
KlKonecObsluhy();
ZruτProstor();
EscMínus();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
// Konec souboru