Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java - pomoć oko zadatka

[es] :: Java :: Java - pomoć oko zadatka

[ Pregleda: 1807 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

new_username
student
student

Član broj: 336308
Poruke: 15
*.teol.net.



+4 Profil

icon Java - pomoć oko zadatka10.03.2017. u 19:30 - pre 85 meseci
Potrebna mi je pomoć oko sljedećeg zadatka u programskom jeziku Java:

U malom selu Robovil žive Oblikoboti – roboti mogu da se pojavljuju u različitim oblicima –
trougao, pravougaonik, šestougao i krug; svaki od njih ima naziv, dimenzije (koje se dodjeljuju
pri kreiranju Oblikobota), snagu (koja se izračunava kao proizvod njihove površine i slučajno
generisanog broja u opsegu od 1 do 100) i mogućnost transformacije (pravougaonik može da se
transformiše u trougao tako što se prepolovi po dijagonali i nastane jednakokraki trougao
spajanjem dvije polovine pravougaonika, a dva trougla mogu da se transformišu u pravougaonik
samo ako su pravougli i imaju jednake katete). Roboti u obliku trougla su letači, oni u obliku
kruga mogu da plivaju, dok ostali mogu da šetaju i lete, pa se u zavisnosti od navedenog mogu
naći na određenim pozicijama u Robovilu (matrici dimenzija 40x20). Oblikoboti imaju svoje
neprijatelje – Muzikobote koji mogu da ih unište pjesmom i mogu da pjevaju samo ukoliko se
nađu na zemlji (u suprotnom su automatski uništeni).
Simulacija počinje tako što se kreiraju Oblikoboti, od svake vrste po dva, i proizvoljno smještaju
u Robovil. Nakon toga se na ekranu ispisuje gdje je koji pozicioniran, koliku snagu ima i šta
trenutno može da radi. Zatim ih napadaju četiri Muzikobota. Postavljaju se slučajno i mogu da
unište svojom pjesmom sve Oblikobote koji se nalaze na udaljenosti od maksimalno 3 po x i y
koordinati od njih. Ukoliko su svi Oblikoboti uništeni, simulacija se prekida i na ekranu se ispisuje
poruka Muzikoboti su pobijedili!, u suprotnom simulacija se nastavlja, preostali Oblikoboti se
ponovo raspoređuju, i ukoliko imaju mogućnost transformacije, transformišu se, u suprotnom
im se smanjuje snaga na pola, i opet se ispisuju njihove pozicije. Muzikoboti koji nisu uništeni
zauzimaju nove položaje, i opet napadaju. Simulacija može da završi ako:
1) se svi Muzikoboti unište (uništeni su ukoliko se nađu na teritoriji koja nije zemlja), a na
ekranu se ispisuje "Oblikoboti su pobijedili! Kraj simulacije" i ispisuju se pozicije preostalih
Oblikobota;
2) su svi Oblikoboti uništeni, a na ekranu se ispisuje poruka Muzikoboti su pobijedili!.
Selo Robovil (matrica 40x20) je predstavljeno na sljedeći način:




Formalna predstava ovog zadatka je sljedeća:
1) Robovil je matrica dimenzija 40x20:
2) Oblikobot je klasa koja je naslijeđena iz klasa: Trougao, Četvorougao, Šestougao i Krug.
3) pozicioniranje elemenata u matrici (XYLayout)

Konkretno, ne znam kako da implementiram sljedeće:
1) dimenzije Oblikobota (koje se dodjeljuju pri kreiranju Oblikobota)
2) transformacije Oblikobota
3) Roboti u obliku trougla su letači, oni u obliku
kruga mogu da plivaju, dok ostali mogu da šetaju i lete, pa se u zavisnosti od navedenog mogu
naći na određenim pozicijama u Robovilu (matrici dimenzija 40x20). Oblikoboti imaju svoje
neprijatelje – Muzikobote koji mogu da ih unište pjesmom i mogu da pjevaju samo ukoliko se
nađu na zemlji (u suprotnom su automatski uništeni).

Može li neko prodiskutovati ovaj zadatak?
Ne tražim cijeli izvorni kod, već suštinu koncepata i implementacija.


[Ovu poruku je menjao new_username dana 10.03.2017. u 20:41 GMT+1]

[Ovu poruku je menjao new_username dana 10.03.2017. u 20:44 GMT+1]

[Ovu poruku je menjao new_username dana 10.03.2017. u 20:45 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Dexxxl




Profil

icon Re: Java - pomoć oko zadatka14.03.2017. u 20:35 - pre 85 meseci
Pozdrav, kolega. I ja nemam puno iskustva u Javi, ali ucimo se :). Tema mi je vrlo interesanta, ali nisam hteo ranije da se javljam ocekujuci da se neko od iskusnih vukova kakvih je prepun ovaj forum javi, a ja da sa uzivanjem ispratim temu. Posto niko nece, ajde malo ja da lupetam
;).
Dakle imamo selo robovil kojr se sastoji iz kockica (pozicija). Svaka kockica ima svoj polozaj (coordinate) i podlogu. Podloga moze biti Vazduh, Zemlja ili voda, jedno ad ta tri, dakle pravimo enumerator za podlogu,
Code:
package robovil;
public enum Podloge {
    ZEMLJA, VODA, VAZDUH
}

Onda klasu za kockicu sa poljima x, y, i podloga, potrebnim konstruktorom i odgovarajucim geterima. Seteri nam ne trebaju jer nije predvidjeno da se tokom igre Robovil ne menja.
Code:
package robovil;


public class Pozicija {
    private int x;
    private int y;
    private Podloge podloga;
    
    Pozicija (int iks, int yps, Podloge p) {
        x=iks;
        y=yps;
        podloga = p;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public Podloge getPodloga() {
        return podloga;
    }
            
    
}


Onda pravimo klasu Robovil kao matricu kockica (pozicija) tokom razvoja verovatno cemo joj dodavati metode.

Code:

package robovil;

public class RobovilSelo {
    
    Pozicija[][] p = new Pozicija[20][20];
    
   
    
    RobovilSelo() {
      for (int i = 1; i<=10; i ++){
          for (int j =1;j<=20;j++){
              p[j][i] = new Pozicija(j,i,Podloge.VAZDUH);
          }
      }
      
    }
    
}
 

Sledece sto treba je napraviti klasu Oblikobot sa poljima Naziv, Dimenzija, (u kakvoj su vezi dimenzija i povrsina, verovatno za svaki oblik razlicite),pozicija (gde se nalazi) , odgovarajuce konstruktore itd…


U klasu Oblikobot postavljas metode i polja koja su zajednicka za sve, a onda pravis klase Krug extends Oblikobot sa dodatnim poljima i metodama koje ima samo ona.
Slicno i za Muzikobota.
Da li sve mora da bude u Javi, ili treba i Baza podataka?

Citat:
Roboti u obliku trougla su letači, oni u obliku
kruga mogu da plivaju, dok ostali mogu da šetaju i lete, pa se u zavisnosti od navedenog mogu
naći na određenim pozicijama u Robovilu (matrici dimenzija 40x20). Oblikoboti imaju svoje
neprijatelje – Muzikobote koji mogu da ih unište pjesmom i mogu da pjevaju samo ukoliko se
nađu na zemlji (u suprotnom su automatski uništeni).

Robot ima svoju poziciju, odnosno polja x i y.
Robovilu mozemo dodati metodu get podloga
Code:
    public Podloge getPodloga (int x, int y) {
        Pozicija poz = p [x] [y];
        
        Podloge pod = poz.getPodloga();
        return pod;
        
    }



Onda pozivamo metodu i prosledjujemo joj koordinate robota, i onda od vrste podloge i vrste robota zavisi njegova dalja sudbina,
Citat:
Konkretno, ne znam kako da implementiram sljedeće:
1) dimenzije Oblikobota (koje se dodjeljuju pri kreiranju Oblikobota)

Pa valjda se dimenzija zadaje kao ulazni parametar za konstruktor, a u zavisnosti od vrste robota odredjuje se povrsina, mora da postoji neka veza izmedju dimenzije i povrsine, onda se generise slucajni broj od 1 do 100 i odredjuje se snaga.

Citat:
transformacije Oblikobota

Pa za svaki oblik pravis metodu transformisiSe, vec prema uslovu zadatka

Toliko za sada, koliko budem imao vremena ukljucivacu se, tema mi je vrlo interesantna,
Pozdrav!!! :)


 
Odgovor na temu

Dexxxl




Profil

icon Re: Java - pomoć oko zadatka14.03.2017. u 20:47 - pre 85 meseci
PS evo klase RobovilSelo, u proslom kodu bila je greska prilikom copy - paste
Code:
package robovil;

public class RobovilSelo {
    
    Pozicija[][] p = new Pozicija[20][20];
    
   
    
    RobovilSelo() {
      for (int i = 1; i<=20; i ++){
          for (int j =1;j<=20;j++){
              p[j][i] = new Pozicija(j,i,Podloge.VODA);
          }
           for (int j =21;j<=40;j++){
              p[j][i] = new Pozicija(j,i,Podloge.ZEMLJA);
          }
          
      }
            for (int i = 11; i<=20; i ++){
          for (int j =1;j<=40;j++){
              p[j][i] = new Pozicija(j,i,Podloge.VAZDUH);
          }
      }
      
    }
    
    public Podloge getPodloga (int x, int y) {
        Pozicija poz = p [x] [y];
        
        Podloge pod = poz.getPodloga();
        return pod;
        
    }
    
}
 
Odgovor na temu

RBW1

Član broj: 336454
Poruke: 8
87.116.180.*



+1 Profil

icon Re: Java - pomoć oko zadatka14.03.2017. u 21:48 - pre 85 meseci
Dexxxl obrati paznju na konstruktore koje pravis, u ovom slucaju radi ali nije dobra praksa napraviti samo jedan konstruktor pa njega pozivati u svim situacijama, znaci napravis defaultni (prazan),drugi sa parametrima, ovo je savet pocetnika, nadam se ca ce neko od iskusnih da potvrdi ovaj nacin razmisljanja

[Ovu poruku je menjao RBW1 dana 15.03.2017. u 13:21 GMT+1]
 
Odgovor na temu

Dexxxl




Profil

icon Re: Java - pomoć oko zadatka17.03.2017. u 22:21 - pre 85 meseci
Opet se malo igrao robotima
Napravio muzikobota i dao mu metodu pevaj. Metoda prvo odredjuje domet, po 3 kockice oko muzikobota, a onda unistava sve oblikobote u zoni dejstva.
Code:
package robovil;

import java.util.ArrayList;

public class Muzikobot {
    private int pozX;
    private int pozY;
    
    Muzikobot (int x, int y){
        pozX = x;
        pozY = y;
    }
    
    
    public void pevaj (ArrayList<Oblikobot> oblikoboti) {
        int X = this.getPozX();
        int Y = this.getPozY();
        
        //odredjujemo domet
        int minX = X - 3;
        int maxX = X + 3;
        
        int minY = Y - 3;
        int maxY = Y + 3;
        
        //Ispitujemo koliko se oblikobota nalazi u dometu i unistavamo ih
        for (Oblikobot Obl:oblikoboti){
            if (Obl.getPozX()>=minX && Obl.getPozX()<= maxX){
              if (Obl.getPozY()>=minY && Obl.getPozY()<= maxY) 
                  oblikoboti.remove(Obl);
        }}
        // da li su unisteni svi oblikoboti
        if (oblikoboti.isEmpty()){
            System.out.println("Oblikoboti su unisteni!" + "\n" + "Muzikoboti su pobedili!");
    }}

    public int getPozX() {
        return pozX;
    }

    public void setPozX(int pozX) {
        this.pozX = pozX;
    }

    public int getPozY() {
        return pozY;
    }

    public void setPozY(int pozY) {
        this.pozY = pozY;
    }
}

Krenuo i sa izradom main metode.
Prvo pravimo selo, onda bi trebali formirati oblikobote, upisati ih u listu i ispisati ih na ekranu, ali taj deo sam preskocio.
Sledece je formiranje muzikobota i upis u listu.
Onda ispitujemo muzikobote
Code:
package robovil;

import java.util.ArrayList;

public class Robovil {
    public static void main(String[] args) {
        RobovilSelo Selo = new RobovilSelo(); 
        ArrayList<Muzikobot> muzikoboti = new ArrayList<Muzikobot>();
        ArrayList<Oblikobot> oblikoboti = new ArrayList<Oblikobot>();
        
        // kreairanje muzikobota i ubacivanje u listu
        for (int i = 1; i<=4; i++) {
            int x = (int) (40*Math.random()); 
            int y = (int) (20*Math.random());
            Muzikobot m = new Muzikobot(x,y);
            muzikoboti.add(m);
        }
        Selo.ispitajMuzikobote(muzikoboti,oblikoboti);
     }
}

Selu Robovil sam dodao metodu ispitaj muzikobote, gde ispituje celu listu muzikobota. Ako je pao na zemlju peva, ako nije, brisemo ga sa spiska. Siroti mali muzikoboti, imaju 25% sanse da prezive, a i onda im je domet 3 metra, sto ce reci oblikoboti iznad 3 metra u vazduhu i 3 metra od obale mogu da uzivaju i grickaju chips i cekaju da se muzikoboti uniste.
Code:
    public void ispitajMuzikobote(ArrayList<Muzikobot> muz, ArrayList<Oblikobot> oblikoboti ) {
            for (Muzikobot m: muz){
        if (this.getPodloga(m.getPozX(), m.getPozY()) == Podloge.ZEMLJA){
            m.pevaj(oblikoboti);
        }
        else {
            muz.remove(m);
        }
        if (muz.isEmpty()) {
            System.out.println("Muzikoboti su unisteni!" + "\n" + "Oblikoboti su pobedili!");
           
        }
    }   
    }

Takodje i merodu prerasporediMuzikobote, koja svim preostalim muzikobotime odredjuje nove pozicije.
Code:
    public void prerasporediMuzikobote (ArrayList<Muzikobot> muz) {
        for (Muzikobot m: muz){
        m.setPozX((int) (40*Math.random()));
        m.setPozY((int) (20*Math.random()));
        
    }}

Sa oblikobotima nisam nista radio, jer u postavci nije sve bas najjasnije
Da li ih postavlja korisnik ili se i oni postavljaju slucajno?
Kakvu ulogu imaju snaga, povrsina i dimenzija i kako se odredjuju?

@RBW1 apsolutno si u pravu sto se konstruktora tice, treba ih napraviti vise, ali treba poznavati konkretan problem i znati sta postaviti za default vrednosti, kao i koje su sve situacije moguce prilikom formiranja novog elementa klase.




 
Odgovor na temu

dule_ns
Novi Sad

Član broj: 123863
Poruke: 257
195.78.86.*



+690 Profil

icon Re: Java - pomoć oko zadatka18.03.2017. u 13:18 - pre 85 meseci
Umesto

Code:
public void ispitajMuzikobote(ArrayList<Muzikobot> muz, ArrayList<Oblikobot> oblikoboti )


koristi

Code:
public void ispitajMuzikobote(List<Muzikobot> muz, List<Oblikobot> oblikoboti )
 
Odgovor na temu

[es] :: Java :: Java - pomoć oko zadatka

[ Pregleda: 1807 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.