Ke bere goxha pune deri tani jo vetem ne dizajn por edhe ne kod.
Hollesite e dizajnit po ti le ty ti ndertosh sipas qejfit. Ka plot lojra e filma qe mund ti marresh si shembuj por edhe imagjinaten e paske te mire.
Ne lidhje me sendet qe gjenden neper dhoma e ke filluar mire me klasen Item.
isTake() ndryshoje ne canTake().
Mendimi im eshte qe ne cdo dhome te kesh nje numer te caktuar sendesh. Disa sende mund ti marrresh pa kushte, disa mund ti marresh vetem nqs ben dicka tjeter (psh vret rojen qe ti marresh celsin), dhe disa sende te tjera nuk mund ti marresh por duhet ti perdoresh (qeni, ushtari, mbreti) qe te vesh ne nje dhome tjeter.
Gjithashtu disa hyrje mund te lejohen pa kushte ndersa disa te tjera jane me kushte si psh:
- per dhomen e princeshes duhet celesi
- per te marre celsin duhet te vrasesh mbretin/rojen
Pra duhet te lidhim sendet dhe daljet/hyrjet me dhomen.
Deri tani ti ke krijuar nje liste te daljeve por nuk kemi vene kushte per to.
Mendimi im eshte metoda setExit() te kete emrin e dhomes por edhe nje boolean per kushtin.
Kodi:
public void setExit(Room soused, boolean kusht) {
exits.add(soused);
kushtet.add(soused); //vendosim kusht
}
//shikojme nqs ka pengesa/kushte apo jo
public boolean kakusht(Room soused) {
return kushtet.contains(soused);
}
Pra, pervec listes (set) se dhomave, do krijojme edhe nje liste te dhomave qe kane kushte. Kur personi do doje te shkoje ne nje dhome te caktuar, do shikojme nqs ajo dhome egziston dhe nqs ka kusht apo jo. Nqs nuk ka kusht do ta lejojme lojtarin te kaloje. Nqs ka kusht, do ti themi qe ajo dhome ka pengesa dhe ai pastaj duhet te plotesoje kushtet.
Ja kodi i komandes go ne klasen game().
Kodi:
private void goRoom(Command command) {
if (!command.hasSecondWord()){
// if the second word is missing, then...
System.out.println("Go where?");
return;
}
String direction = command.getSecondWord();
// try to go into the next room
Room nextRoom = currentRoom.nextRoom(direction);
if (nextRoom == null) {
System.out.println("I can't go this way!");
}
else if(currentRoom.kakusht(nexRoom)){
System.out.println("Kjo dhome ka pengesa.");
}
else {
currentRoom = nextRoom;
System.out.println(currentRoom.longDescription());
}
}
Deri tani kemi nje liste te objekteve ne dhome, kemi dhe nje liste te dyerve qe kane kushte. Na duhet nje menyre qe objektet te nderveprojne me njeri tjetrin dhe te mund te ndryshojne dhomen, duke shtuar nje objekt te ri (psh celesin), duke ndryshuar nje objekt tjeter ne dhome, ose duke hapur dyert.
psh: Kur qenin e genjejme me mishin, ai thjesht do largohet dhe ne do kemi plotesuar kushtet per te futur ne dhome. kushtet.remove(dhoma)
Kur perdorim shpaten kunder nje ushtari, ai mund te shtoje nje objekt te ri ne dhome, celesin. Lojtari pastaj duhet te marre celesin dhe te hape deren.
Lojtarit i kemi dhene te drejten per te marre dicka nga dhoma por duhet ti japim edhe mundesine te perdore nje nga sendet qe ka ne torbe si ne shembujt me lart.
Kete mund ta bejme me komanden:
perdor emri_i_sendit
anglisht: use item_name
Kur te shtypet kjo komande ne do shikojme ne radhe te pare, nqs e ka kete send apo jo. Nqs se e ka, do therasim funksionin perdor() ne klasen game.
Kodi:
private void perdor(Item send){
if( player.zoteron(send) ){
if( currentRoom.getName() == "obori"){
if( send.getName() == "mish" ){
currentRoom.removeItem("qeni"); //heqim qenin
player.hiqngacanta("mish");
currentRoom.hiqKushtin("stalla"); //lejojme hyrjen ne stalle
System.out.println("Qeni po ha mishin");
}
if( send.getName() == "shpata" ){
currentRoom.removeItem("roja"); //vrasim rojen
currentRoom.saveItem("celesi"); //ai leshon celesin
System.out.println("Vrave rojen, i ra dicka nga xhepi");
}
}
else if( currentRoom.getName() == "stalla"){
// vazhdo ketu me sendet qe ndryshojne dicka
}
else if( currentRoom.getName() == "dhoma e princeshes"){
// vazhdo ketu me sendet qe ndryshojne dicka
}
}
}
Funksionin removeItem ti me duket e ke quajtur selectItem.
Funksioni hiqKushtin eshte i ngjashem me removeItem. Do shikosh listen e sendeve (itemlist) dhe do gjesh sendin ka te njejtim emeri si argumenti i funksionit dhe do ta heqesh nga set ose map.
Funksioni perdor() do jete i gjate sepse do kete kodin per te gjitha dhomat. Sa here qe personi shtyp komanden perdor send ti do ti dergosh sendin ketij funksioni dhe funksioni duke u bazuar mbi currentRoom do shikoje se cfare efektesh ka ai send. Lojtari mund te duhet te perdore disa sende para se te hapet dera e nje dhome tjeter. Mos harro qe ti heqesh sendet nga canta pasi perdoren. Disa sende si celesi ose mishi mund te perdoren vetem njehere dhe do ti heqesh nga canta, ndersa sende te tjera si shpata mund te jene gjithnje ne cante.
Ketu ke dhe klasen e lojtarit.
Kodi:
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
class Player {
private String _name;
private int _piket;
private Set _bag;
public Player(String name) {
_name = name;
_piket = 0;
_bag = new HashSet();
}
//shto shumen
public void shto_piket(int shuma){
_piket += shuma;
}
//kthe piket
public int merr_piket(){
return _piket;
}
public void hiqngacanta(String name){
Iterator iter = _bag.iterator();
while (iter.hasNext()) {
Item smth = (Item)iter.next();
if (smth.getName().equals(name)) {
_bag.remove(smth); // heq objektin e zgjedhur nga koleksioni
break;
}
}
}
public void hidhnecante(Item smth) {
_bag.add(smth);
}
}
Te thashe qe nuk jam njohur mire me sintaksen e Java dhe do kete ndonje gabim se nuk kisha kohe ta testoja.
Krijoni Kontakt