Author Topic: OOP  (Read 114443 times)

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #375 on: 05.12.2011, 18: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

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #376 on: 05.12.2011, 18:58:23 »
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

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #377 on: 05.12.2011, 19: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

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #378 on: 05.12.2011, 19:28:17 »
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

  • Newbie
  • *
  • Posts: 37
    • View Profile
Re: OOP
« Reply #379 on: 05.12.2011, 22:38:31 »
ako zavolam funkciu use(); v triede Use?

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #380 on: 05.12.2011, 22:56:11 »
ako zavolam funkciu use(); v triede Use?

predpokladám, že predmety implementujú Use...
pretypuj...
Code: [Select]
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

  • Newbie
  • *
  • Posts: 37
    • View Profile
Re: OOP
« Reply #381 on: 05.12.2011, 23:07:28 »
ako zavolam funkciu use(); v triede Use?

predpokladám, že predmety implementujú Use...
pretypuj...
Code: [Select]
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

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #382 on: 05.12.2011, 23:14:01 »
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:
Code: [Select]
game.getBackpack().remove(this);
All code is crap.

42

razer08

  • Newbie
  • *
  • Posts: 37
    • View Profile
Re: OOP
« Reply #383 on: 05.12.2011, 23:45:05 »
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:
Code: [Select]
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

  • Jr. Member
  • **
  • Posts: 51
    • View Profile
Re: OOP
« Reply #384 on: 06.12.2011, 02:03:32 »
Podarilo sa niekomu uz spustit tu pmd kontrolu na windowse??  bu

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #385 on: 06.12.2011, 02:04:46 »
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:
Code: [Select]
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

  • Jr. Member
  • **
  • Posts: 69
    • View Profile
Re: OOP
« Reply #386 on: 06.12.2011, 02:46:08 »
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

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #387 on: 06.12.2011, 03:53:39 »
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  ;)
« Last Edit: 06.12.2011, 04:36:35 by esperian »

sulo

  • Sr. Member
  • ****
  • Posts: 284
    • View Profile
    • Web
Re: OOP
« Reply #388 on: 06.12.2011, 03:58:49 »
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

  • Jr. Member
  • **
  • Posts: 95
    • View Profile
Re: OOP
« Reply #389 on: 06.12.2011, 06:27:05 »
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 :/
« Last Edit: 06.12.2011, 07:02:20 by zaky »

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

matus217

  • Jr. Member
  • **
  • Posts: 69
    • View Profile
Re: OOP
« Reply #390 on: 06.12.2011, 08:26:55 »
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

  • Jr. Member
  • **
  • Posts: 95
    • View Profile
Re: OOP
« Reply #391 on: 06.12.2011, 08:31:03 »
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

  • Jr. Member
  • **
  • Posts: 69
    • View Profile
Re: OOP
« Reply #392 on: 06.12.2011, 08:47:50 »
Tak v tom pripade si len po pouziti itemu zavolaj setter setCurrentRoom(ktoru chces) a je to  :) np

tas

  • Newbie
  • *
  • Posts: 15
    • View Profile
Re: OOP
« Reply #393 on: 06.12.2011, 17:35:58 »
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

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #394 on: 06.12.2011, 17:55:17 »
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

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #395 on: 06.12.2011, 17:58:37 »
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

  • Sr. Member
  • ****
  • Posts: 337
    • View Profile
Re: OOP
« Reply #396 on: 07.12.2011, 01:49:54 »
nejake napady co by mohlo byt ako vlastne rozhranie s dvoma metodami?

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #397 on: 07.12.2011, 02: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 .. 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
« Last Edit: 07.12.2011, 02:50:43 by xxx3 »

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #398 on: 07.12.2011, 02:59:10 »
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

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ť...

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

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #399 on: 07.12.2011, 03:01:16 »
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