home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Flop Magazin 44
/
Flop_Magazin_44_2001_01_Raster_cs_Side_B.atr
/
duum.c
< prev
next >
Wrap
Text File
|
2023-02-26
|
10KB
|
1 lines
/*¢ Minitextovka "DUUM" v jazyce "C"¢ Naprogramovano na pocitaci AMIGA¢ pro pocitace ATARI XL/XE¢ specialne pro casopis FLOP¢¢ (c)1994 Jiri Svoboda¢ FREEWARE¢*/¢¢/*¢ Revidovano 20.4.2001¢*/¢¢¢#include <stdio.h>¢¢#define EOL '\n'¢¢#define SEVER 1¢#define JIH 2¢#define VYCHOD 4¢#define ZAPAD 8¢¢#define PREDMETU 20¢¢#define NEJDEVZIT 0¢#define JDEVZIT 1¢¢#define TYP_NIC 0¢#define TYP_MIST 1¢#define TYP_PRED 2¢¢char tedmistnost= 0;¢char konmistnost=12;¢char konec = 0;¢char prikaz[30];¢char sloveso[4];¢char podstjm[4];¢¢struct mistnost {¢ char *popis0;¢ char uroven;¢ char *popis1;¢ char vychody1;¢ char *popis2;¢ char vychody2;¢};¢¢struct predmet {¢ char *jmeno;¢ char pozice;¢ char typ;¢ char *zkoumej;¢ char mistpouziti;¢ char prikpouziti;¢ char datapouziti;¢ char *pouzij;¢};¢¢struct mistnost datam[16]= {¢ {"Jsi v zatuchle kamenne kobce. Zeme je pokryta tlejici slamou. Jedine dvere vedou na vychod. ",¢ 0,¢ 0,¢ VYCHOD,¢ 0,¢ 0¢ },¢ {"Stojis ve vstupni chodbe teto budovy. Steny jsou bile naliceny. Na severu jsou uzamcena vrata ven. ",¢ 0,¢ 0,¢ JIH+VYCHOD+ZAPAD,¢ 0,¢ 0¢ },¢ {"Prvni mistnost postraniho kridla budovy. Oknem na severu vidis cestu pryc. ",¢ 0,¢ 0,¢ JIH+VYCHOD+ZAPAD,¢ 0,¢ 0¢ },¢ {"Nachazis se ve stare kuchyni. Urcite se tu uz mnoho desitek let nevarilo. ",¢ 0,¢ 0,¢ ZAPAD,¢ 0,¢ 0¢ },¢ {"Stojis v rohove chodbe. Mramorova podlaha je pokryta prachem. ",¢ 0,¢ 0,¢ JIH+VYCHOD,¢ 0,¢ 0¢ },¢ {"Dlouha chodba sever-jih. Na zapade je pruchod do jine chodby. ",¢ 0,¢ 0,¢ SEVER+JIH+ZAPAD,¢ 0,¢ 0¢ },¢ {"Blize neidentifikovatelna mistnost. ",¢ 1,¢ "Pro samou tmu vsak nevidis zadny jiny vychod. ",¢ SEVER,¢ "Na vychode jsou otevrene dvere. ",¢ SEVER+VYCHOD¢ },¢ {"Jsi pravdepodobne v byvalem pokoji sluzebnictva. Jsou tu dve postele a dubovy stul. Na jihu jsou uzamcene dvere. ",¢ 0,¢ 0,¢ ZAPAD,¢ 0,¢ 0¢ },¢ {"Nachazis se v loznici pana domu. Vsechen nabytek je odvezen, pouze postel zustala. ",¢ 0,¢ 0,¢ SEVER,¢ 0,¢ 0¢ },¢ {"Stred dlouhe chodby sever-jih. Na vychode jsou dvere. ",¢ 0,¢ 0,¢ SEVER+JIH+VYCHOD,¢ 0,¢ 0¢ },¢ {"Prijimaci salonek. Zbyla tu jen zidle a obraz. ",¢ 0,¢ 0,¢ JIH+VYCHOD+ZAPAD,¢ 0,¢ 0¢ },¢ {"Dlouhy stul bez zidli prozrazuje, ze se jedna o jidelnu. Na sever jsou uzamcene dvere. ",¢ 0,¢ 0,¢ ZAPAD,¢ 0,¢ 0¢ },¢ {"Jsi VENKU a tim jsi uspesne zakoncil tuto demonstracni hru. ",¢ 0,¢ 0,¢ 0,¢ 0,¢ 0¢ },¢ {"Konec chodby sever-jih. Chodba drive pravdepodobne pokracovala na zapad. Ted je tam vsak ",¢ 1,¢ "drevena stena, jejimiz sparami prosvita denni svetlo. ",¢ SEVER,¢ "prohorela drevena stena, za niz vidis denni svetlo. ",¢ SEVER+ZAPAD¢ },¢ {"Kamenna chodba, kterou se chodilo do staji ke konim. Steny jsou vlhke. ",¢ 1,¢ "Na vychode jsou uzamcene dvere. ",¢ SEVER,¢ "Dvere na vychode jsou odemceny. ",¢ SEVER+VYCHOD¢ },¢ {"Stojis ve stajich. Je tu obrovske mnozstvi slamy. ",¢ 0,¢ 0,¢ ZAPAD,¢ 0,¢ 0¢ }¢};¢¢struct predmet datap[PREDMETU]= {¢ {"reklamu",¢ 16,JDEVZIT,¢ "Programujte v Cecku!",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"baterku",¢ 1,JDEVZIT,¢ "Ve tme by se mohla hodit.",¢ 6,TYP_MIST,0,¢ "Baterka se rozsvitila."¢ },¢ {"sirky",¢ 7,JDEVZIT,¢ "Neco s nimi tak zapalit!",¢ 15,TYP_PRED,4,¢ "Zapalil jsi jeden z baliku slamy."¢ },¢ {"klic",¢ 8,JDEVZIT,¢ "Klic od nejakych dveri.",¢ 14,TYP_MIST,0,¢ "Odemkl a otevrel jsi dvere."¢ },¢ {"horici balik slamy",¢ 17,JDEVZIT,¢ "Je to balik slamy, ktery je zapaleny. :-)",¢ 13,TYP_MIST,0,¢ "Polozil jsi slamu ke drevene stene, ta po chvili prohorela."¢ },¢¢ {"sla",¢ 0,NEJDEVZIT,¢ "Fuj! Radeji na ni ani nesahej.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"ste",¢ 1,NEJDEVZIT,¢ "Ta bila je uz spise cerna.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"vra",¢ 1,NEJDEVZIT,¢ "Nemas sanci je otevrit nasilim.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"okn",¢ 2,NEJDEVZIT,¢ "Velmi male okenko. Nemas sanci prolezt.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"pos",¢ 7,NEJDEVZIT,¢ "Zbyl jen mosazny ram.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"stu",¢ 7,NEJDEVZIT,¢ "Ma tri nohy.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"dve",¢ 7,NEJDEVZIT,¢ "Tezke vyrezavane dvere.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"pos",¢ 8,NEJDEVZIT,¢ "Stara bukova postel. Matrace chybi.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"zid",¢ 10,NEJDEVZIT,¢ "Ma jednu nohu.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"obr",¢ 10,NEJDEVZIT,¢ "Kouka na tebe ksicht nejakyho strejdy.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"stu",¢ 11,NEJDEVZIT,¢ "Neni na nem nic zvlastniho. Az na to, ze nema ani jednu nohu.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"dve",¢ 11,NEJDEVZIT,¢ "Tezke vyrezavane dvere bez kliky.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"ste",¢ 13,NEJDEVZIT,¢ "Velmi suche drevo.",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"dve",¢ 14,NEJDEVZIT,¢ "Dirka pro klic laka...",¢ 17,TYP_NIC,0,¢ 0¢ },¢ {"sla",¢ 15,NEJDEVZIT,¢ "Pekne proschla a vonava(!?).",¢ 17,TYP_NIC,0,¢ 0¢ }¢};¢¢¢void Tiskniuvod() {¢ printf("\n Minitextovka DUUM\n jako demonstrace jazyka C\n Naprogramovano na pocitaci AMIGA\n pro pocitace ATARI XL/XE\n Napsano pro casopis FLOP\n (c)1994 Jiri Svoboda\n FREEWARE\n\n");¢ printf("Prikazy: sever, jih, vychod, zapad,\n zkoumej, vezmi, pouzij,\n inventar, situace, konec\n");¢ printf("\n29.12.1997: Opraveno nekolik chyb a\nzkompilovano pod MS Visual C++ 5.0.\n06.07.1999: Zkompilovano GCC pod Linux.\n08.01.2001: KONECNE zkompilovano pro\nATARI diky 'cc65' pod Linuxem!\n");¢ printf("20.04.2001: Posledni revize.\n");¢}¢¢void Situace() {¢ char i;¢ printf("\n%s",datam[tedmistnost].popis0);¢ switch (datam[tedmistnost].uroven) {¢ case 1: printf("%s",datam[tedmistnost].popis1);¢ break;¢ case 2: printf("%s",datam[tedmistnost].popis2);¢ }¢ for (i=0;i<PREDMETU;i++)¢ if ((datap[i].typ==JDEVZIT) && (datap[i].pozice==tedmistnost)) {¢ printf("Vidis tady lezet %s.\n",datap[i].jmeno);¢ return;¢ }¢ printf("\n");¢}¢¢¢void Ctiprikaz() {¢ char i,znak;¢ for (i=0;;i++) {¢ if (i>29) i=29;¢ znak=getchar();¢ if (znak==EOL) break;¢ if ((znak>64) && (znak<91)) znak+=32;¢ prikaz[i]=znak;¢ }¢ prikaz[i]=0;¢}¢¢¢void Rozeberprikaz() {¢ char i=0;¢ char j;¢ sloveso[0]=podstjm[0]=0;¢ ¢ while (prikaz[i]==' ') i++;¢ if (prikaz[i]==0) return;¢ j=0;¢ while ((prikaz[i]!=0) && (prikaz[i]!=' ') && (j<3)) {¢ sloveso[j]=prikaz[i];¢ i++;¢ j++;¢ }¢ sloveso[j]=0;¢ while ((prikaz[i]!=0) && (prikaz[i]!=' ')) i++;¢ ¢ while (prikaz[i]==' ') i++;¢ if (prikaz[i]==0) return;¢ j=0;¢ while ((prikaz[i]!=0) && (prikaz[i]!=' ') && (j<3)) {¢ podstjm[j]=prikaz[i];¢ i++;¢ j++;¢ }¢ podstjm[j]=0;¢}¢¢¢char Porovnej(string1,string2)¢char string1[4],string2[4];¢{¢ char i;¢ for (i=0;i<3;i++)¢ if (string1[i]!=string2[i]) return 0;¢ return 1;¢}¢¢¢char Jdi(smer)¢char smer;¢{¢ char vychody;¢ ¢ if (datam[tedmistnost].uroven==2)¢ vychody=datam[tedmistnost].vychody2;¢ else¢ vychody=datam[tedmistnost].vychody1;¢ ¢ if (vychody&smer) {¢ switch(smer) {¢ case SEVER: tedmistnost-=4;¢ break;¢ case JIH: tedmistnost+=4;¢ break;¢ case VYCHOD: tedmistnost+=1;¢ break;¢ case ZAPAD: tedmistnost-=1;¢ }¢ Situace();¢ }¢ else¢ printf("Nemuzes jit tim smerem.\n");¢¢ if (tedmistnost==konmistnost) {¢ printf("Gratuluji!!! Jsi venku a tudiz jsi vyhral!\n");¢ return 1;¢ }¢ return 0;¢}¢¢¢void Zkoumej() {¢ char i;¢ for (i=0;i<PREDMETU;i++)¢ if (((datap[i].pozice==tedmistnost) || (datap[i].pozice==16)) && (Porovnej(podstjm,datap[i].jmeno))) {¢ printf("%s\n",datap[i].zkoumej);¢ return;¢ }¢ printf("Nemohu to zkoumat.\n");¢}¢¢¢void Vezmi() {¢ char i;¢ for (i=0;i<PREDMETU;i++)¢ if ((datap[i].pozice==tedmistnost) && (datap[i].typ==JDEVZIT) && (Porovnej(podstjm,datap[i].jmeno))) {¢ datap[i].pozice=16;¢ printf("Vzal jsi %s.\n",datap[i].jmeno);¢ return;¢ }¢ printf("Nemohu to vzit.\n");¢}¢¢¢void Pouzij() {¢ char i;¢ for (i=0;i<PREDMETU;i++)¢ if ((datap[i].pozice==16) && (datap[i].mistpouziti==tedmistnost) && (Porovnej(podstjm,datap[i].jmeno))) {¢ datap[i].pozice=17;¢ printf("%s\n",datap[i].pouzij);¢ switch (datap[i].prikpouziti) {¢ case TYP_MIST: datam[tedmistnost].uroven=2;¢ break;¢ case TYP_PRED: datap[datap[i].datapouziti].pozice=tedmistnost;¢ }¢ return;¢ }¢ printf("Zadny uspech.\n");¢}¢¢¢void Inventar() {¢ char i;¢ printf("\nNeses sebou ");¢ for (i=0;i<PREDMETU;i++)¢ if (datap[i].pozice==16) {¢ if (i>0) printf(", ");¢ printf("%s",datap[i].jmeno);¢ }¢ printf(".\n");¢}¢¢¢char Vykonejprikaz() {¢ if (Porovnej(sloveso,"kon")) return 1;¢¢ if (Porovnej(sloveso,"sev")) return Jdi(SEVER);¢ if (Porovnej(sloveso,"jih")) return Jdi(JIH);¢ if (Porovnej(sloveso,"vyc")) return Jdi(VYCHOD);¢ if (Porovnej(sloveso,"zap")) return Jdi(ZAPAD);¢¢ if (Porovnej(sloveso,"zko")) {¢ Zkoumej();¢ return 0;¢ }¢ if (Porovnej(sloveso,"vez")) {¢ Vezmi();¢ return 0;¢ }¢ if (Porovnej(sloveso,"pou")) {¢ Pouzij();¢ return 0;¢ }¢¢ if (Porovnej(sloveso,"inv")) {¢ Inventar();¢ return 0;¢ }¢ if (Porovnej(sloveso,"sit")) {¢ Situace();¢ return 0;¢ }¢ printf("Nerozumim slovesu.\n");¢ return 0;¢}¢¢¢void main() {¢ Tiskniuvod();¢ Situace();¢ do {¢ printf("\nTvuj prikaz: ");¢ Ctiprikaz();¢ Rozeberprikaz();¢ } while (Vykonejprikaz()==0);¢ printf("\nEnter...\n");¢ getchar();¢}¢