• 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 »

xxx3

ked som si dal ako rozsirenie truhlicu, ktora bude v sebe obsahovat nejaky predmet ... a mam v scenari iba, ze vychod, preskumaj truhlicu, vychod ... atd ... tak ako to mam spravit ? Nemam tam nic take zeby sa otvorila nejakym klucom a podobne

Agamemnon

Quote from: xxx3 on  05.12.2011, 19:19:15
ked som si dal ako rozsirenie truhlicu, ktora bude v sebe obsahovat nejaky predmet ... a mam v scenari iba, ze vychod, preskumaj truhlicu, vychod ... atd ... tak ako to mam spravit ? Nemam tam nic take zeby sa otvorila nejakym klucom a podobne

aj tak by som tam dal volanie "pouzi truhlica"... ktore by ti ten predmet vzalo...
inak - preskumaj vola getdescription, nie? tak to, co chces vykonat (vziat predmet z truhlice) daj do getdesc... aj ked to riesenie nie je koser (napr. ak by si chcel posunut hru niekde dalej a rozsirovat ju, tak ta pridana funkcionalita pre getdesc by mohla zmiast tych, co to budu chciet pouzit v kode), tak fungovat ti to bude...
All code is crap.

42

xxx3

ta lebo vtedy som si nepozrel, ze co robi preskumaj, som si myslel, ze to bude stacit spravit tak, ze dam preskumaj truhlica a mi to vypise v texte, ze truhlica v sebe obsahuje nejake predmety a tie sa potom budu dat zobrat

Agamemnon

Quote from: xxx3 on  05.12.2011, 20:22:39
ta lebo vtedy som si nepozrel, ze co robi preskumaj, som si myslel, ze to bude stacit spravit tak, ze dam preskumaj truhlica a mi to vypise v texte, ze truhlica v sebe obsahuje nejake predmety a tie sa potom budu dat zobrat

- take nieco mozes pridat do scenara... to nebude vadit...
- alebo potom tu funkcionalitu daj do tej metody getdesc...
All code is crap.

42

razer08

ako zavolam funkciu use(); v triede Use?

Agamemnon

Quote from: razer08 on  05.12.2011, 23:38:31
ako zavolam funkciu use(); v triede Use?

predpokladám, že predmety implementujú Use...
pretypuj...

Item item = new MyItem();

...

((Use) item).use();


existuje niečo také ako Use? nie je to Useable? alebo tak nejak? je to trieda? nie interface?
All code is crap.

42

razer08

Quote from: Agamemnon on  05.12.2011, 23:56:11
Quote from: razer08 on  05.12.2011, 23:38:31
ako zavolam funkciu use(); v triede Use?

predpokladám, že predmety implementujú Use...
pretypuj...

Item item = new MyItem();

...

((Use) item).use();


existuje niečo také ako Use? nie je to Useable? alebo tak nejak? je to trieda? nie interface?

je interface.urobil som tak ze ((Usable) predmet1).use();
a este jedna vec...ked mam napr triedu key a implementuje Usable,tak budem mat metodu use()...no a ked napisem ze pouzi kluc,tak mi otovri dvere a chcem aby ten kluc uz neexistoval...tak game.getBackpack().remove(kluc);? lebo ked vlozim predmet tak game.getBackpack().addItem(new Item); a ci v remove tam mozem pisat len kluc alebo ako mam to urobit<

Agamemnon

Quote from: razer08 on  06.12.2011, 00:07:28
a este jedna vec...ked mam napr triedu key a implementuje Usable,tak budem mat metodu use()...no a ked napisem ze pouzi kluc,tak mi otovri dvere a chcem aby ten kluc uz neexistoval...tak game.getBackpack().remove(kluc);? lebo ked vlozim predmet tak game.getBackpack().addItem(new Item); a ci v remove tam mozem pisat len kluc alebo ako mam to urobit<

do remove ide konkrétny objekt - tj. v prípade, že to budeš volať odniekiaľ zvonku, tak "kluc" alebo akýkoľvek názov tá premenná bude mať... ak to budeš volať z triedy kľúč (predpokladám z metódy use), tak to urobíš ako:

game.getBackpack().remove(this);
All code is crap.

42

razer08

Quote from: Agamemnon on  06.12.2011, 00:14:01
Quote from: razer08 on  06.12.2011, 00:07:28
a este jedna vec...ked mam napr triedu key a implementuje Usable,tak budem mat metodu use()...no a ked napisem ze pouzi kluc,tak mi otovri dvere a chcem aby ten kluc uz neexistoval...tak game.getBackpack().remove(kluc);? lebo ked vlozim predmet tak game.getBackpack().addItem(new Item); a ci v remove tam mozem pisat len kluc alebo ako mam to urobit<

do remove ide konkrétny objekt - tj. v prípade, že to budeš volať odniekiaľ zvonku, tak "kluc" alebo akýkoľvek názov tá premenná bude mať... ak to budeš volať z triedy kľúč (predpokladám z metódy use), tak to urobíš ako:

game.getBackpack().remove(this);


diky:) a ked este mozem,tak ako urobim setexits? ked mam kluc dam pouzi kluc a aby mi nastavil setexits...niekde som cital,ze treba to cez konstruktor,ale nechapem ze ako...ked mam napr: krizovatka.setexits(null,null,null,null) a potom ked dam pouzi kluc tak aby som mal krizovatka.setexits(1,1,0,0)...1 a 0 su nejake miestnosti

selli1235

Podarilo sa niekomu uz spustit tu pmd kontrolu na windowse??  bu

Agamemnon

Quote from: razer08 on  06.12.2011, 00:45:05
Quote from: Agamemnon on  06.12.2011, 00:14:01
Quote from: razer08 on  06.12.2011, 00:07:28
a este jedna vec...ked mam napr triedu key a implementuje Usable,tak budem mat metodu use()...no a ked napisem ze pouzi kluc,tak mi otovri dvere a chcem aby ten kluc uz neexistoval...tak game.getBackpack().remove(kluc);? lebo ked vlozim predmet tak game.getBackpack().addItem(new Item); a ci v remove tam mozem pisat len kluc alebo ako mam to urobit<

do remove ide konkrétny objekt - tj. v prípade, že to budeš volať odniekiaľ zvonku, tak "kluc" alebo akýkoľvek názov tá premenná bude mať... ak to budeš volať z triedy kľúč (predpokladám z metódy use), tak to urobíš ako:

game.getBackpack().remove(this);


diky:) a ked este mozem,tak ako urobim setexits? ked mam kluc dam pouzi kluc a aby mi nastavil setexits...niekde som cital,ze treba to cez konstruktor,ale nechapem ze ako...ked mam napr: krizovatka.setexits(null,null,null,null) a potom ked dam pouzi kluc tak aby som mal krizovatka.setexits(1,1,0,0)...1 a 0 su nejake miestnosti

toto presne sme tu už riešili... skús pozrieť príspevky staré niekoľko dní, možno týždeň...
All code is crap.

42

matus217

Quote from: selli1235 on  06.12.2011, 03:03:32
Podarilo sa niekomu uz spustit tu pmd kontrolu na windowse??  bu
Stiahnut ant apache - prvy link v googli. Rozbalit napr. do C:\Ant potom pridat do systemovych premennych path do C:\Ant\bin a este na javu to je C:\Program Files\Java\jdk1.6.0_24\bin   ten jdk je pre kazdeho iny - zavisi od toho aky mate, nekopirujte automaticky to co som napisal :D potom uz len pustit konzolu, nastavit sa do priecinku projektu, a pustit ant pmd. vysledok je vygenerovany v html v priecinku projektu...

esperian

#387
pmd hlasi chybu  :baaa:

Buď deklarujte statickú premennú 'list' ako final, alebo sa vyhnite priradeniu jej hodnoty v konštruktore.
Pretypujte deklarĂĄciu (namiesto typu 'ArrayList' pouĹžite rozhranie, ktorĂŠ tento typ implementuje).
nechapem co vlastne odomna chcu xDDD

public class ParserImpl implements Parser{
   
    public static ArrayList<Command> list;

    public static ArrayList<Item> itemS;
   
    ParserImpl(){
    itemS = new ArrayList<Item>();
    list = new ArrayList<Command>();
   
   
    itemS.add(new Trezor());
    itemS.add(new ZlatyKluc());
   
   
   
    };

}

pomohlo  ;)

sulo

1. Prečo sú list a itemS statické? Myslím, že tam nie je dôvod používať statické premenné.
2. ArrayList<Command>  --->  List<Command> (List je rozhranie, ArrayList trieda, čo ho implementuje)

zaky

#389
ako mate osetrene ak napisete napr len "preskumaj" bez nicoho? pise mi to chyby a nic mi nenapada :/
if (line.toUpperCase().startsWith("PRESKUMAJ"))
        param = line.substring(10);
ptm zavola execute s param co sa rovna stringu zacinajucemu na 10tom mieste, ale ak nenapisem nic tak mi to hadze chyby

a este jedna otazka

ako otvorit pomocou kluca dvere ? tak ze ked dam pouzi kluc tak hned ma to presunie do tej danej miestnosti, viem ze nastavim current room
dal som game.setCurrentRoom(game.getCurrentRoom().getEast()); ale zle :/

92% teenagerů neposlouchá svojí maminku. Patříš-li mezi zbývajících 8%, dej si tohle do podpisu

matus217

Skus si tam dat nejaku podmienku na styl ze ak je ten substring prazdny, tak to spusti s parametrom "" a ohladom druhej otazky, ja osobne som to riesil tak, ze po pouziti itemu sa akurat nastavia nove exity v miestnosti. Je hlupost volat getEast od currentRoom po pouziti itemu, pretoze tam by si mal mat zablokovany pristup a je to to iste ako keby si len napisal prikay vychod. Proste tam sa nedostanes. Tebe nejde po pouziti itemu o premiestnenie medzi miestnostami, ale o vytvorenie prechodu...

zaky

no problem je ze ja mam vo svojom zadani scenara ten scenar skonstruovany tak ze ak dam pouzit kluc tak ma hodi automaticky do dalsej miestnosti, cize nevytvaram prechod ale ozaj sa potrebujem premiestnit, ale ok, uz asi viem jak na to, spravim prechod a hned za tym prikaz na premiestnenie, ale az zajtra :) zatim dik

92% teenagerů neposlouchá svojí maminku. Patříš-li mezi zbývajících 8%, dej si tohle do podpisu

matus217

Tak v tom pripade si len po pouziti itemu zavolaj setter setCurrentRoom(ktoru chces) a je to  :) np

tas

ak chcete za behu hry volat setExits(...,...,...,...), potrebujete sa dostat k miestnostiam ktore tam chcete nastavit, tie sa vytvaraju v createRooms(), poznam ludi co hru rozsirili a tie miestnosti pri vytvarani vkladaju do arraylistu v GameImpl a teoreticky potom k nim maju pristup tadial, inac jedine co ma napada je nejaky mne neznamy sposob javy alebo nieco podobne ako sa k nim dostat, to vam musi povedat niekto skusenejsi (ak nieco take vobec je). no co sa behu tyka nemyslim si ze je najlepsie riesenie vytvorit si jednu miestnost s null vychodmy a vzdy ked chcem niekam dalej prejst vytvarat nove. ja napr. mozne vychody zistujem podla exitov a pride mi zvlastne aby po vchode do miestnosti a rozhliadnuti hra povedala : nevidis ziadne vychody, a davat to priamo do popisu je zasa na moj vkus pracne.

Agamemnon

nevymyslajte zlozite veci... ak potrebujes pri pouziti nejakeho predmetu odomknut/nastavit nejaky vychod (=zavolat setexits), tak si tu miestnost, do ktorej sa potom budete moct dostat (teda, ktoru pouzijes ako parameter v setexits), predajte ako parameter kontruktora toho predmetu, ulozte do private premennej v predmete a v metode use to potom uz len pouzite... popisoval som to tu pred par dnami...

ziadne arraylisty ani nic podobne... a uz vobec nie reflection (to je ta vec, ako sa da dostat k roznym veciam, napr. private premennym, ale to ani omylom nepouzivajte... ako som napisal do tej druhej temy k oop - k tym special zadaniam... za normalnych okolnosti reflection nepotrebujete a ani ju nepouzivajte)... byt na mirekovom mieste (alebo kohokolvek, kto prebera tie zadania) a videl by som reflection, tak by som vam nedal prejst, kym by ste to neprerobili... to nema nic spolocne s objektovym programovanim...
All code is crap.

42

Agamemnon

a este doplnenie... arraylist nie je univerzalne ulozisko... takisto dictionary/hashtable nie su univerzalne ulozisko... pouzivajte ich vtedy, ked ich treba pouzit (pole, list, dvojica dat, etc)... nie ako vstupny bod k nejakym objektom, co sa da ohandlovat ovela lepsie...
All code is crap.

42

ultimate

nejake napady co by mohlo byt ako vlastne rozhranie s dvoma metodami?

xxx3

#397
mam v scenari napr. prikaz pouzi lano ... a ako spravim to, ze ked to lano v danej miestnosti nepouzijem tak ze sa hra ukonci ? ... mal som to vymyslene tak, ze akoze bude v miestnosti diera a preto musi dat hrac prikaz pouzi lano aby sa dostal cez dieru, inak spadne do diery .. no myslel som, ze to bude len ako v opise miestonsti, ze je tam akoze diera ... len to ma zaujima, ze ako spravim tieto veci, ze sa musi pouzit ten predmet v danej miestonsti inak sa hra skonci lebo akoze zomrie hrac .. alebo jednoducho, ze sa neda pokracovat dalej ked sa nevykona prikaz v danej miestnosti ktory je v scenari .. ze nepusti to do dalsej miestonsti kym sa nevykona ten prikaz

Agamemnon

Quote from: xxx3 on  07.12.2011, 03:00:33alebo jednoducho, ze sa neda pokracovat dalej ked sa nevykona prikaz v danej miestnosti ktory je v scenari .. ze nepusti to do dalsej miestonsti kym sa nevykona ten prikaz

toto je rovnaká situácia ako s kľúčom a zamknutými dverami... miestnosť nemá východ, kým sa nepoužije predmet... použitie predmetu nastaví východ pre miestnosť...

Quote from: xxx3 on  07.12.2011, 03:00:33
mam v scenari napr. prikaz pouzi lano ... a ako spravim to, ze ked to lano v danej miestnosti nepouzijem tak ze sa hra ukonci ? ... mal som to vymyslene tak, ze akoze bude v miestnosti diera a preto musi dat hrac prikaz pouzi lano aby sa dostal cez dieru, inak spadne do diery .. no myslel som, ze to bude len ako v opise miestonsti, ze je tam akoze diera ... len to ma zaujima, ze ako spravim tieto veci, ze sa musi pouzit ten predmet v danej miestonsti inak sa hra skonci lebo akoze zomrie hrac ..

napr takto:
miestnosť má flag, či už daný predmet bol použitý... použitie predmetu nastaví tento flag... prekryješ volanie getEast/getWest/etc na miestnosti - tieto metódy prv urobia kontrolu, či bol predmet použitý... ak áno, povolia vyjsť z miestnosti... ak nie, hru ukončia ako Game over a hráč prehral (vypíšeš nejaké info, nvm, napr. spadol si do jamy a nastavíš gamestate, či ako sa to volá na gameover)...
All code is crap.

42

Agamemnon

Quote from: ultimate on  07.12.2011, 02:49:54
nejake napady co by mohlo byt ako vlastne rozhranie s dvoma metodami?

rozumné interfacei ma momentálne napadajú len k príkazom - v štýle useable, moveable, switchable, talkable, etc... ale to je väčšina s 1 metódou... samozrejme, nezmyselných interfaceov vymyslím kopu - napr. z každej triedy vyexportuješ interface so všetkými jej public metódami a pod. bludy :)
All code is crap.

42