• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

OOP

Started by NDK, 22.09.2011, 21:02:52

« predchdzajce - alie »

veteran

Quote from: SteLa on  27.10.2011, 05:57:25
Quote from: M4D4 on  25.10.2011, 14:40:40
myslím, že IBA Tomášek požaduje kompletný scenár s mapou a krátkym opisom hry v pdf . . . neviem o tom, že zvyšní cvičiaci by to požadovali, ale Tomášek to požaduje . . .

mam mu to dat na usb, poslat ci ako ked v pdf? Davate to niekto vytlacit?
Ja dávam na Moodle ten txt-súbor a Tomášekovi mapu vytlačenú na papieri.

SteLa

Quote from: veteran on  27.10.2011, 12:57:45
Quote from: SteLa on  27.10.2011, 05:57:25
Quote from: M4D4 on  25.10.2011, 14:40:40
myslím, že IBA Tomášek požaduje kompletný scenár s mapou a krátkym opisom hry v pdf . . . neviem o tom, že zvyšní cvičiaci by to požadovali, ale Tomášek to požaduje . . .

mam mu to dat na usb, poslat ci ako ked v pdf? Davate to niekto vytlacit?
Ja dávam na Moodle ten txt-súbor a Tomášekovi mapu vytlačenú na papieri.

thnx:)

M4D4

nám Tomášek (pondelok 12:30) povedal, že chce .pdf aj s mapou a scenárom (kvôli tomu na mieste zväčšoval kvótu zo 100kb na 5mb) a chce to aj vytlačené ;-)

xxx3

nemate nahodou niekto skopirovane tie pokyny k zadaniu ze co vsetko tam ma byt ? ... nejde totiz ta stranka

miro.bohem

pripajam sa, hoďte tu niekto tie zakladne prikazy ak mate

Stardox

Pači sa, sorry za tento blok textu:

Základná funkcionalita hry
    hra musí byť dohrateľná za konečný počet krokov
    hráč má k dispozícii sadu príkazov, pomocou ktorej komunikuje s hrou
    hráč môže prechádzať medzi miestnosťami herného sveta minimálne v smeroch sever, juh, východ a západ
    v každej miestnosti sa môže nachádzať 0 a viac predmetov
    predmety je možné medzi miestnosťami prenášať
    hráč má batoh, do ktorého môže predmety v miestnostiach vkladať, a z ktorého môže predmety v miestnosti položiť na zem
    množstvo predmetov, ktoré môže hráč do batohu vložiť, je obmedzené
    v hre existujú predmety, ktoré do batohu nie je možné vložiť

Základné požiadavky na implementáciu zadania pre jeho úspešné odovzdanie
    s hrou je potrebné dodať aj úspešný scenár hry (už v 6. týždni), pričom dĺžka minimálneho scenára je aspoň 50 krokov
    počet predmetov v celej hre je minimálne 10
    počet miestností v hre je minimálne 30
    hra musí obsahovať minimálne základnú sadu príkazov
    hra musí byť implementovaná pomocou knižnice stiahnuteľnej zo stránky
    implementovať aspoň jedno ďalšie rozšírenie hry - buď z uvedených alebo vymyslieť svoje vlastné
    v hre navrhnúť a použiť aspoň jedno vlastné rozhranie (Rozhranie však nemôže byť prázdne! Musí obsahovať aspoň dve metódy!)
    v hre nepoužívať názvy príkazov alebo predmetov v tvare KLUC1, KRASNA_PRINCEZNA, KRASNAPRINCEZNA, ale v zrozumiteľnom tvare s použitím medzery a bez použitia čísiel (vhodnou náhradou miesto tvaru KLUC1 je napr. ZLATY KLUC, STRIEBORNY KLUC a pod.)

Základná sada príkazov
Vaša hra musí implementovať minimálne túto sadu príkazov a to buď anglickú alebo slovenskú. Okrem nich však môžete implementovať aj vlastné príkazy, ktoré môžu vhodným spôsobom hru rozšíriť. Pri zadávaní príkazov nerozhoduje veľkosť písmen. Tá však môže, ale nemusí byť dôležitá pri ich parametroch.
sk    en    opis
INVENTAR    INVENTORY    Príkaz zobrazí na obrazovku obsah inventára (batohu) formou názvov predmetov.
KONIEC    QUIT    Príkaz ukončí rozohratú hru.
SEVER    NORTH    Presun do miestnosti nachádzajúcej sa na sever od aktuálnej.
JUH    SOUTH    Presun do miestnosti nachádzajúcej sa na juh od aktuálnej.
VYCHOD    EAST    Presun do miestnosti nachádzajúcej sa na východ od aktuálnej.
ZAPAD    WEST    Presun do miestnosti nachádzajúcej sa na východ od aktuálnej.
VEZMI    GET    Príkaz vloží do batohu vec, ktorá sa nachádza v miestnosti. Príkaz má jeden povinný parameter, ktorým je názov predmetu. Podľa neho bude rozpoznané, ktorý predmet sa má do batohu vložiť. Ak predmet nebude zadaný, program vypíše na obrazovku vhodnú hlášku (napr. Neviem, akú vec chceš vziať). Príkaz môžete rozšíriť o možnosť pozbierania všetkých predmetov nachádzajúcich sa v miestnosti v tvare: VEZMI VSETKO (GET ALL).
POLOZ    PUT    Položí predmet z batohu v danej miestnosti. Príkaz má jeden povinný parameter, ktorým je názov predmetu. Podľa neho bude rozpoznané, ktorý predmet sa má v miestnosti položiť. Ak predmet nebude zadaný, program vypíše na obrazovku vhodnú hlášku (napr. Neviem, čo chceš položiť)
POUZI    USE    Použije vec, ktorá sa nachádza v batohu alebo v miestnosti. Príkaz má jeden povinný parameter, ktorým je názov predmetu. Podľa neho bude rozpoznané, ktorý predmet v miestnosti alebo v batohu sa má použiť. Ak predmet nebude zadaný, program vypíše na obrazovku vhodnú hlášku (napr. Neviem, čo chceš použiť). Príkaz je možné implementovať aj tak, aby používateľ priamo špecifikoval kombináciu predmetov, ktoré sa majú použiť, napr. POUZI pazba hlaven, resp. POUZI pazba A hlaven
PRESKUMAJ    EXAMINE    Preskúma predmet (vypíše na obrazovku opis predmetu), ktorá sa nachádza v miestnosti alebo v hráčovom batohu. Príkaz má jeden povinný parameter, ktorým je názov predmetu. Podľa neho bude rozpoznané, ktorý predmet v miestnosti alebo v batohu sa má preskúmať. Ak predmet nebude zadaný, program vypíše na obrazovku vhodnú hlášku (napr. Neviem, čo chceš preskúmať).
ROZHLIADNI SA    LOOK AROUND    Príkaz vypíše aktuálne informácie o miestnosti, v ktorej sa hráč práve nachádza.
PRIKAZY    COMMANDS    Príkaz vypíše na obrazovku zoznam všetkých príkazov, ktoré hra poskytuje.
NAHRAJ    LOAD    Príkaz zabezpečí nahratie uloženej pozície hry z disku. Voliteľným parametrom je cesta k súboru.
ULOZ    SAVE    Príkaz uloží stav rozohratej hry na disk. Voliteľným parametrom je cesta k súboru.
VERZIA    VERSION    Príkaz zobrazí číslo verzie hry, ľubovoľný sprievodný text a meno a priezvisko autora s kontaktom (e-mailová adresa, webová stránka).
RESTART    RESTART    Znovu spustí hru od začiatku.
O HRE    ABOUT GAME    Príkaz zobrazí krátky text, ktorý poslúži ako úvod do príbehu. Ako dobrý začiatok sa javí známy text: Kde bolo tam bolo, ...
Námety na ďalšie rozšírenia
Pre ďalšie rozšírenie hry môžete implementovať niektorý z nasledujúcich nápadov. Samozrejme - fantázii sa medze nekladú a teda môžete implementovať akékoľvek ďalšie rozšírenie pôvodného návrhu hry. Nezabudnite však, že rozšírenie hry je nutnou podmienkou pre odovzdanie zadania!

    Implementovať v hre plynúci čas - svet bude v noci vyzerať inak ako cez deň. Vhodnou implementáciou tohto rozšírenia môže byť vstup do miestnosti/mesta/hradu/budovy len v denných (otváracích) hodinách.
    Živé postavy v hre - postavy, ktoré nebudú vecami a budú sa vedieť s hráčom rozprávať, resp. budú vedieť reagovať na jeho stav (napr. špinavého Indiana Jonesa nevezme taxikár do taxíku).
    Časované úlohy - v istých fázach hry je dôležitý čas, napr.: dynamit vybuchne o tri príkazy neskôr, ako bol zadaný príkaz na jeho zapálenie; alebo Indiana Jones má len 5 ťahov, aby vyskočil s padákom z lietadla, ktoré nemá žiadneho pilota na palube.
    Implementácia príkazu POMOC - príkaz funguje ako vhodný pomocník pri riešení hry - vždy vám vie pomôcť, ako v hre pokračovať ďalej. A keď je náhodou skúpy na slovo, povie aspoň nejakú vhodnú vtipnú poznámku...
    Implementácia vlastného príkazového riadku, ktorý bude obsahovať históriu (kurzorovými šípkami sa pohybuje dozadu a dopredu) a automatické dopĺňanie príkazov pomocou klávesy TAB (správanie podobné ako BASH). Toto rozšírenie v konzolovom prevedení však nie je možné vytvoriť v jazyku Java.
    Grafická reprezentácia aktuálnej scény - okrem textového opisu môžete zobrazovať aj grafickú reprezentáciu scény - či už kvázi 3D alebo fragment mapy. Realizácia tohto rozšírenia si však vyžaduje znalosť ďalších technológií, ktoré nie sú obsahom tohto kurzu.
    Implementujte príkaz MAPA, ktorý vám zobrazí mapu herného plánu. Zobrazené budú vždy však len tie miestnosti, ktoré ste už navštívili. Možným rozšírením tohto rozšírenia môže byť aj legenda ku mape, kedy sa v mape budú nachádzať aj predmety, ktoré sa v daných miestnostiach nachádzajú.
    Implementujte v hre vec, ktorá v sebe môže mať umiestnené ďalšie veci (napr. truhlica, bedňa, taška). Tieto veci sa stanú súčasťou hry (budú viditeľné v miestnosti) až vtedy, keď túto vec otvoríte (kľúčom k bedničke, truhlici alebo kombináciou k trezoru) alebo keď ich preskúmate (po bližšom preskúmaní tašky bude v miestnosti k dispozícii aj jej obsah). Pozor - toto rozšírenie však nie je možné riešiť spôsobom, že po otvorení predmetu obsahujúceho ďalšie predmety budú tieto vytvorené a umiestnené do miestnosti (podobne, ako je to uvedené v cvičení č. 11). Predmety musia byť v kontajneri umiestnené už počas jeho vytvorenia.
    Implementujte v hre teleport, ktorý vás po použití presunie do náhodnej miestnosti v hre.
    Po vstupe do miestnosti môžu niektoré predmety ostať skryté a môžu byť odhalené po preskúmaní konkrétneho predmetu pomocou príkazu PRESKUMAJ.

Aby ste predišli problémom s nevhodným rozšírením pri odovzdávaní zadania, konzultujte svoje rozšírenie počas cvičení so svojim cvičiacim.

charlie

hodi sem dakto zdrojaky od kappa z pondelka  9:10? :ropebanana: bo som nestihol vsetko pozapisovat  >:(

paloSK

Quote from: charlie on  01.11.2011, 15:36:52
hodi sem dakto zdrojaky od kappa z pondelka  9:10? :ropebanana: bo som nestihol vsetko pozapisovat  >:(
jj, zlutujte sa aj nad tymi, co si nemohli dovolit prist.
:D

Rajo

Quote from: paloSK on  01.11.2011, 16:04:16
Quote from: charlie on  01.11.2011, 15:36:52
hodi sem dakto zdrojaky od kappa z pondelka  9:10? :ropebanana: bo som nestihol vsetko pozapisovat  >:(
jj, zlutujte sa aj nad tymi, co si nemohli dovolit prist.

nemám to celé kedže Kappa nevedel pár veci a musí sa na to ísť spýtať Biňasa  :emot-LMAO: ale ked niečo tak napíšte PM :)

esperian

mohol by mi nikto z pondelka poslat to "prve cviko" ahladom hry co sme kodili .. lebo som trocha nestihal ... ak ano tak PM hoci to nemate komplet..

Stardox

Scenar 07, Uloha 3:
V tomto kroku budete implementovať parser alebo rozpoznávač príkazov. Úlohou parsera je rozlíšiť, či zadaný príkaz patrí alebo nepatrí do množiny príkazov použiteľných v hre. Na rozpoznávanie príkazov je možné s výhodou využiť regulárne výrazy. Pri našej implementácii si však vystačíme len s metódami triedy String.
Úloha:  Vytvorte triedu ParserImpl, ktorá bude reprezentovať rozpoznávač zadaných príkazov.
Trieda ParserImpl bude implementovať rozhranie Parser. Zoznam známych príkazov je potrebné uchovávať po celý čas, aby parser vedel, ktoré príkazy hra pozná. Vytvorte si preto v triede členskú premennú, ktorá bude obsahovať generickú kolekciu ArrayList<Command>() so všetkými príkazmi použiteľnými v hre.
Úloha:  V triede vytvorte metódu getCommand(), ktorá:
    bude mať jeden parameter typu String reprezentujúci reťazec zadaný používateľom z príkazového riadku a
    bude mať návratový typ Command

Metóda getCommand() overí, či parameter metódy reprezentuje príkaz hry. Na overenie je potrebné použiť zoznam príkazov hry - konkrétne ich názov a vhodné metódy triedy String. V prípade, že sa jedná o príkaz hry, je potrebné nastaviť parameter príkazu a metóda getCommand() vráti referenciu na tento príkaz. V prípade, že sa nejedná o príkaz hry, metóda vracia hodnotu null.

Neviete, ako mam do toho ArrayListu vkladat polozky typu Command? V konstruktore triedy ParserImpl mam toto:
ArrayList<Command> prikazy = new ArrayList<Command>();
prikazy.add( co ma ist sem? );

Lebo vlastne tie jednotlive prikazy su vlastne triedy (Version.class, Quit.class).

ppeess

Quote from: Stardox on  05.11.2011, 22:29:57
Scenar 07, Uloha 3:
V tomto kroku budete implementovať parser alebo rozpoznávač príkazov. Úlohou parsera je rozlíšiť, či zadaný príkaz patrí alebo nepatrí do množiny príkazov použiteľných v hre. Na rozpoznávanie príkazov je možné s výhodou využiť regulárne výrazy. Pri našej implementácii si však vystačíme len s metódami triedy String.
Úloha:  Vytvorte triedu ParserImpl, ktorá bude reprezentovať rozpoznávač zadaných príkazov.
Trieda ParserImpl bude implementovať rozhranie Parser. Zoznam známych príkazov je potrebné uchovávať po celý čas, aby parser vedel, ktoré príkazy hra pozná. Vytvorte si preto v triede členskú premennú, ktorá bude obsahovať generickú kolekciu ArrayList<Command>() so všetkými príkazmi použiteľnými v hre.
Úloha:  V triede vytvorte metódu getCommand(), ktorá:
    bude mať jeden parameter typu String reprezentujúci reťazec zadaný používateľom z príkazového riadku a
    bude mať návratový typ Command

Metóda getCommand() overí, či parameter metódy reprezentuje príkaz hry. Na overenie je potrebné použiť zoznam príkazov hry - konkrétne ich názov a vhodné metódy triedy String. V prípade, že sa jedná o príkaz hry, je potrebné nastaviť parameter príkazu a metóda getCommand() vráti referenciu na tento príkaz. V prípade, že sa nejedná o príkaz hry, metóda vracia hodnotu null.

Neviete, ako mam do toho ArrayListu vkladat polozky typu Command? V konstruktore triedy ParserImpl mam toto:
ArrayList<Command> prikazy = new ArrayList<Command>();
prikazy.add( co ma ist sem? );

Lebo vlastne tie jednotlive prikazy su vlastne triedy (Version.class, Quit.class).

cize prikazy.add( new Version() );

Stardox

Quotecize prikazy.add( new Version() );
Diky za toto, pomohlo mi to, ale teraz som si uvedomil ze ta nemozem robit instanciu z triedy Version, lebo ta trieda je abstraktna. (Musi byt abstraktna, lebo inac ked tam dopisem "implements Command" tak zahlasi chybu, ze "adventure.commands.Version is not abstract and does not override abstract method execute".

Hmm... Zrejme som zacal zle, este sa na to pozriem.

ppeess

Quote from: Stardox on  06.11.2011, 00:58:38
Quotecize prikazy.add( new Version() );
Diky za toto, pomohlo mi to, ale teraz som si uvedomil ze ta nemozem robit instanciu z triedy Version, lebo ta trieda je abstraktna. (Musi byt abstraktna, lebo inac ked tam dopisem "implements Command" tak zahlasi chybu, ze "adventure.commands.Version is not abstract and does not override abstract method execute".

Hmm... Zrejme som zacal zle, este sa na to pozriem.

A preco mas triedu Version ako abstraktnu???? ..........

sulo

Quote from: Stardox on  06.11.2011, 00:58:38
... Musi byt abstraktna, lebo inac ked tam dopisem "implements Command" tak zahlasi chybu, ze "adventure.commands.Version is not abstract and does not override abstract method execute".

Nemusí byť abstraktná. Ak implementuješ rozhranie (alebo dedíš z abstraktnej triedy), sú dve možnosti:
1.) Trieda bude abstraktná.
2.) Trieda implementuje všetky potrebné metódy, v tomto prípade metódu execute()

Skús porozmýšľať, ktorá možnosť je v tomto prípade správna :)

farkasdvd

Nevedel by sem niekto kopirovat, ze ako ma vizerat ta funkcia main() a funkcia init() z triedy GameImpl.java?
Lebo ja mam s Kapom a on nam nevedel povedat, ako trebo to pozivatelske rozhranie nastavit. Vdaka.

SteLa

ma tomasek okrem stvrtka este cvika z OOP? pondelok, utorok, streda?

esperian

tam si zadaj fakultu a meno profaka..

ale ak som to spravne vycital tak okrem stvrtka ma este pondelok 12:30 - 14:00  br

SteLa

Quote from: esperian on  07.11.2011, 02:29:31
tam si zadaj fakultu a meno profaka..

ale ak som to spravne vycital tak okrem stvrtka ma este pondelok 12:30 - 14:00  br

mne je lahsie napisat na forum^^ ak si spravne vycital tak dakujem:)

esperian


matotv

nehodi sem niekto 8. cviko z oop? ak ho niekto rano urobil...necakal som taky ambush od kapu :D

xxx3

#221
aj 7. keby niekto mal by mne pomohlo, dik

a kto robi zadanie za odmenu PM

strapec111

tiez by som poprosil 7. cviko, nestihal som vobec

Stardox

Som tu zas. :D

Scenar 07, Uloha 3:
QuoteÚloha:  V triede vytvorte metódu getCommand(), ktorá:

    bude mať jeden parameter typu String reprezentujúci reťazec zadaný používateľom z príkazového riadku a
    bude mať návratový typ Command

Metóda getCommand() overí, či parameter metódy reprezentuje príkaz hry. Na overenie je potrebné použiť zoznam príkazov hry - konkrétne ich názov a vhodné metódy triedy String. V prípade, že sa jedná o príkaz hry, je potrebné nastaviť parameter príkazu a metóda getCommand() vráti referenciu na tento príkaz. V prípade, že sa nejedná o príkaz hry, metóda vracia hodnotu null.

Vyriesil som to spravne, ci zbytocne komplikovane?
@Override
    public Command getCommand(String arg0)
    {
        for (int i = 0; i <= prikazy.size(); i++)
        {
            // if ( arg0 == prikazy.get(i).toString())
            if (arg0.equals(prikazy.get(i).toString()))
            {
                return prikazy.get(i);
            }
            else
            {
                return null;
            }
        }
        return null;
    }

Agamemnon

nie je to dobré...
- kontroluješ vždy len prvý príkaz v list prikazy - ak hľadaný príkaz nie je prvý, tak ti to vyskočí ako null... - else statement v cykle nemá byť
- ak je príkaz bez parametrov, tak to príkaz nájde a vráti - to je okej...
- ak je príkaz s parametrami, tak nespracovávaš parameter ("V prípade, že sa jedná o príkaz hry, je potrebné nastaviť parameter príkazu.")
- nehandluješ viacslovné príkazy
- v tom cykle je nerovnosť len menší, nie menší a rovný...
- ja by som použil cyklus foreach - v jave: for(Command cmd : prikazy)
- dá sa to potenciálne aj ďalej zjednodušovať, ale to závisí od toho, ako máš implementované triedy ako Command, aký typ je premenná prikazy, etc... v základe je for okej
All code is crap.

42