Open WagZol opened 5 years ago
Pontosítok: -A GUI-n már látnom kell a forgatási lehetőségek sziluettjét, azaz a kiszámolt forgatott koordinátákat, úgy hogy azokat a térképre még nem telepítettem. Tehát ezt a koordinátát a player számolja ki, vagy a hajó?
Logikusnak tűnne hogy a Player mivel a gép esetén is ő adja meg a kezdő koordinátát, és a lehetséges irányok közül is ő sorsol ki egy neki tetszőt.
pl ilyesmi lenne a kód:
Ship possibleShipToSettle=shiftShipToCursor(ship.turnRight);
if (this.board.isShipFitinBoard(possibleShipToSettle)
&& !(this.board.isShipCollosingWithOtherShips(possibleShipToSettle)){
return possibleShipCoordinate
}
return new Ship(this.cursor);
A fene egye meg nekem erre van szükségem, ezért szeretem a tesztet...látnom kell hogy hogyan néz majd ki működés közben a kód:D
Tehát kijelölöm a kezdő pozíciót ahová tenni akarom a hajót, ez a cursor. elforgatom a hajót és eltolom a cursor pozíciójába. HA ez a forgatott és tolt hajó koordináta elfér a táblán és elfér a többi hajótól akkor azokkal a koordinátákkal térek vissza. Ha nem akkor csak a kezdőkoordináta pöttyével
Igen csak itt jön a dilemmám...nem tudom játékos esetén a GUI-t elképzelni...
Tehát a fenti metódus kerül meghívásra ha te Js-bl küldesz egy vmit a RESTAPi-mba hogyjobbra hagyta el a kezdőkoordináta gombot az egér. Ez a fenti metódus akkor kirajzolj a jobboldara forgatott és a kezdő koordinátára tolt hajót ha ki lehet rajzolni. Ha nem akkor csak a kezdő koordinátát amit kijelöltél. De hogyan tudjam a kirajzolást véglegesíteni?
Vmi olyasmi ugrott be hogyha kapok egy settleShip utasításnak megfelelő vmalamit a Js-től akkor csekkolom hogy a telepítendő hajó tényleg ugyan annyi kockából áll mint az eredeti? És ha nem akkor újra forgatás, ha igen akkor jön a másik játékos?:P...kicsit maszek. Szóval mi a véleményed? Legutóbb itt akadtam el pont ezen a szent helyen
Szerintem a Board-hoz kell egy olyan metódus, hogy board.settleShipUnconditionally(ship)
ami feltétel nélkül rá tudja tenni a hajót a táblára, függetlenül attól, hogy beleütközik-e más hajókba, vagy nem, mert ez csak a megjelenítéshez lenne használva (lásd lejjebb). A hajónak azt a részét rakná csak rá, ami a táblán belül van (ergo ha pl. túl hosszú a hajó és kilógna bal oldalt, akkor csak azokat a "kockáit" rakná rá, amik a táblán belül vannak), vagy (és ez talán jobb) Exception-t dobna akkor, ha kilóg a tábláról, így jelezné, hogy a kezdőpozíciót toljuk el. Azért neccesek a kilógó részek, mert a GUI se biztos, hogy le tudná kezelni; csak 10x10 kockája van a megjelenítésre, nincs -1. oszlop.
Azért gondolom, hogy kellene egy ilyen metódus, mert így a GUI-nak elég lenne egy "klón":
Board clone = Board(playersBoard);
clone.settleShipUnconditionally(shipMovedByUser);
gui.send(clone);
Nem kellene sehol se tárolni, hogy miként néz ki a tábla, mert egyből átküldené a GUI-nak. Egyedül akkor kellene a játékos "valódi" tábláján is tárolni, ha a játékos le akarja rakni a hajóját (klattyint a GUI-ban). Ehhez kéne egy másik metódus, pl. board.settleShipIfPossible(ship)
, ahol viszont végrehajtja az ellenőrzéseket (kilóg-e, beleütközik-e egy másikba, stb.).
Lehet, hogy nem jó az ötletem, de azt veszem alapul, hogy amíg még nem találta ki a user, hogy pontosan hova akarja rakni a hajót, addig szabadon mozgathassa azt minden megkötés nélkül.
Lehet az elejét is másként képzeljük el. Ahogy én gondoltam: 1,Gép kijelöli hogy kezd az x hajó letételével 2,Rákattintasz a kezdő koordinátára ahová az első pontját tennéd a hajónak 3,ebből a mezőből ha felfelé viszed az egeret megjelenik hajó ha kifér/elfér ebből a mezőből ha lefelé viszed az egeret megjelenik hajó ha kifér/elfér ebből a mezőből ha balra viszed az egeret megjelenik hajó ha kifér/elfér ebből a mezőből ha jobbra viszed az egeret megjelenik hajó ha kifér/elfér
nagyon behatárolt?
esetleg ha jobb klik akkor az első mezőt újra választhatod
Ha odaérünk hogy csütörtökön szóban megbeszéljük a REST API kommunikáció sorrendjeit akkor jobban át fogjuk látni a dilemmát szerintem(milyen kérésre mit fog válaszolni az API és hogy használod fel a válaszokat
Alapból úgy érzem hogy a hajó forgatása a saját felelőssége lenne, nem a játékosé. Egy hajónak magának kell tudnia forgoni, és ezt a képességét a user használja. Ebben majdnem biztos is vagyok.
-A forgás egy olyan mechanizmuson alapul amihez szükség van a hajó koordinátáinak a forgási ponthoz való távolságára.(nekem ez általában a bal felső sarok) -A régi torpedóban a kezdő koodinátát kijelölte a gép. Eltolta oda hajó minden koordinátáját és utána elforgatta őket. Ebben az esetben hajó kezdő koordinátára tolása is a hajó felelőssége volt amiben nem vagyok biztos hogy jó ötlet
A kérdés a következő: -Vajon a normál Player esetén okoz e majd később fejtörést a megvalósítás ha a hajó tartalmazza a Sample kódot(azaz az alap formát balra nézve) és ezt az alap koordinátát kikérhetjük elforgatott módozatokban metódusokkal, majd a Player metódusa tolná el a hajót a kijelölt kezdő koordinátára?