home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 44 / Flop_Magazin_44_2001_01_Raster_cs_Side_B.atr / duum.c < prev    next >
Text File  |  2023-02-26  |  10KB  |  1 lines

  1. /*¢    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();¢}¢