AKCIA! CELOŽIVOTNÉ predplatné so zľavou 50%, nezmeškaj to!
Zisti viac
package sk.jaro.CiernyPeter; public class Karta { private int cisloKarty; //každá karta ma iné číslo private int cisloParu; //každý prá má iné číslo, len dve karty majú to isté číslo páru public Karta(int cisloKarty, int cisloParu) { this.cisloKarty = cisloKarty; this.cisloParu = cisloParu; } public int getCisloKarty() { return cisloKarty; } public int getCisloParu() { return cisloParu; } }
package sk.jaro.CiernyPeter; import java.util.Collections; import java.util.List; public class BalikKariet { private List<Karta> karty; //implementacia listu pre zachovanie poradia public BalikKariet(List<Karta> karty) { this.karty = karty; } public List<Karta> getKarty() { return karty; } public void zamiesajKarty(){ if(!jeBalikPrazdny()) Collections.shuffle(karty); } private boolean jeBalikPrazdny(){ return karty == null || karty.isEmpty(); } public Karta getKartu(){ Karta karta = null; if(!jeBalikPrazdny()) { karta = karty.get(0); //vytiahnem prvú kartu karty.remove(karta); //kartu odstránim z balíku } return karta; } }
package sk.jaro.CiernyPeter; import java.util.ArrayList; import java.util.List; public class Hrac { private String meno; private List<Karta> kartyVRuke; public Hrac(String meno) { this.meno = meno; this.kartyVRuke = new ArrayList<>(); } public String getMeno() { return meno; } public List<Karta> getKartyVRuke() { return kartyVRuke; } public void odstranParyZRuky() { ArrayList<Karta> akeKartyOdstraniZRuky = new ArrayList<>(); for(Karta karta : kartyVRuke){ try { for (Karta k : kartyVRuke) { if (karta.getCisloParu() == k.getCisloParu() && karta.getCisloKarty() != k.getCisloKarty()) { akeKartyOdstraniZRuky.add(karta); akeKartyOdstraniZRuky.add(k); break; } } }catch (Exception e){ e.printStackTrace(); } } kartyVRuke.removeAll(akeKartyOdstraniZRuky); } }
package sk.jaro.CiernyPeter.rozhrania; import sk.jaro.CiernyPeter.Hra; import sk.jaro.CiernyPeter.Hrac; public interface IOvladanieHry { int vyberPocetHracov(); Hrac getMenoHraca(int i); int zoberKartu(Hrac hrac1, Hrac hrac2); void vypisKtoPrehral(Hra hra); }
package sk.jaro.CiernyPeter.gui; import sk.jaro.CiernyPeter.Hra; import sk.jaro.CiernyPeter.Hrac; import sk.jaro.CiernyPeter.rozhrania.IOvladanieHry; import java.util.Scanner; public class OvladanieHry implements IOvladanieHry { Scanner scanner = new Scanner(System.in); @Override public int vyberPocetHracov() { int pocetHracov = 0; System.out.println("Zadaj počet hráčov (3 až 6):"); try { pocetHracov = scanner.nextInt(); scanner.nextLine(); } catch (Exception ex) { System.out.println("Nepodarilo sa načítať počet hráčov. Zadal si správne číslo?"); pocetHracov = vyberPocetHracov(); } return pocetHracov; } @Override public Hrac getMenoHraca(int i) { Hrac hrac = null; System.out.println(String.format("Zadaj meno pre hráča %d :", i)); String meno = scanner.next(); scanner.nextLine(); if (meno.equals("") || meno.equals(" ")) { System.out.println(String.format("Prosím znovu zadajte meno pre hráča %d :", i)); hrac = getMenoHraca(i); } else { hrac = new Hrac(meno); } return hrac; } @Override public int zoberKartu(Hrac hrac1, Hrac hrac2) { int zoberKartuCislo = 0; System.out.print(hrac1.getMeno() + " ,ktorú kartu cheš zobrať hračovi "+hrac2.getMeno()+"?: "); for(int i = 0; i < hrac2.getKartyVRuke().size(); i++){ System.out.print(i+", "); } try { zoberKartuCislo = scanner.nextInt(); scanner.nextLine(); } catch (Exception ex) { System.out.println("Nepodarilo sa získať akú kartu chceš zobrať. Zadal si správne číslo?"); zoberKartuCislo = zoberKartu(hrac1,hrac2); } return zoberKartuCislo; } @Override public void vypisKtoPrehral(Hra hra) { System.out.println("Čierny Peter je hráč "+hra.getHraci().get(0).getMeno()); scanner.close(); } }
public class Hra{ private BalikKariet balikKariet; private int pocetHracov; private List<Hrac> hraci; private OvladanieHry ovladanieHry;
public Hra() { this.ovladanieHry = new OvladanieHry(); this.pocetHracov = ovladanieHry.vyberPocetHracov(); this.hraci = vytvorHracov(); }
public List<Hrac> vytvorHracov() { ArrayList<Hrac> hraci = new ArrayList<>(); for(int i = 0; i < pocetHracov; i++){ Hrac hrac = ovladanieHry.getMenoHraca(i+1); hraci.add(hrac); } return hraci; }
public void zacniHru() { HraCiernyPeter ciernyPeter = new HraCiernyPeter(); //vseobecna logika ku kazdej hre balikKariet = vytvorBalik(ciernyPeter.vytvorKarty()); balikKariet.zamiesajKarty(); //rozdaj karty z baliku ciernyPeter.rozdajKarty(this); // pre hru urcim prveho hraca // v ciernom petrovi je to hrac s najviac kartami a ten zacina tahat Hrac prvyHrac = ciernyPeter.getHracaSNajviacKartami(getHraci()); //vsobecne na zaklade prveho hraca zistim jeho poradie v zozname hracov v hre int prvyHracIndex = getHraci().indexOf(prvyHrac); ciernyPeter.zlozHracomParyZRuky(this); ciernyPeter.odstranHracovZHry(this); if(!ciernyPeter.jeKoniecHry(this)){ //idu do kruhu az kym hraju aspon dvaja hraci ciernyPeter.kolobehHry(this,prvyHracIndex); } }
package sk.jaro.CiernyPeter; import sk.jaro.CiernyPeter.gui.OvladanieHry; import java.util.ArrayList; import java.util.List; public class Hra{ private BalikKariet balikKariet; private int pocetHracov; private List<Hrac> hraci; private OvladanieHry ovladanieHry; public Hra() { this.ovladanieHry = new OvladanieHry(); this.pocetHracov = ovladanieHry.vyberPocetHracov(); this.hraci = vytvorHracov(); } public BalikKariet getBalikKariet() { return balikKariet; } public List<Hrac> getHraci() { return hraci; } public OvladanieHry getOvladanieHry() { return ovladanieHry; } public List<Hrac> vytvorHracov() { ArrayList<Hrac> hraci = new ArrayList<>(); for(int i = 0; i < pocetHracov; i++){ Hrac hrac = ovladanieHry.getMenoHraca(i+1); hraci.add(hrac); } return hraci; } public BalikKariet vytvorBalik(List<Karta> karty) { return new BalikKariet(karty); } public void odstranHracaZHry(Hrac hrac) { //ak ma prazdnu ruku odstranim ho if(hrac.getKartyVRuke().isEmpty()){ getHraci().remove(hrac); } } public void ukonciHru() { ovladanieHry.vypisKtoPrehral(this); } public void zacniHru() { HraCiernyPeter ciernyPeter = new HraCiernyPeter(); //vseobecna logika ku kazdej hre balikKariet = vytvorBalik(ciernyPeter.vytvorKarty()); balikKariet.zamiesajKarty(); //rozdaj karty z baliku ciernyPeter.rozdajKarty(this); // pre hru urcim prveho hraca // v ciernom petrovi je to hrac s najviac kartami a ten zacina tahat Hrac prvyHrac = ciernyPeter.getHracaSNajviacKartami(getHraci()); //vsobecne na zaklade prveho hraca zistim jeho poradie v zozname hracov v hre int prvyHracIndex = getHraci().indexOf(prvyHrac); ciernyPeter.zlozHracomParyZRuky(this); ciernyPeter.odstranHracovZHry(this); if(!ciernyPeter.jeKoniecHry(this)){ //idu do kruhu az kym hraju aspon dvaja hraci ciernyPeter.kolobehHry(this,prvyHracIndex); } } }
public List<Karta> vytvorKarty() { ArrayList<Karta> karty = new ArrayList<>(); int j = 1; for(int i = 0; i < 16; i++, j=j+2){ karty.add(new Karta(j, i)); karty.add(new Karta(j+1, i)); } karty.add(new Karta(33,-1)); //Čierny Peter return karty; }
public void rozdajKarty(Hra hra) { BalikKariet balikKariet = hra.getBalikKariet(); List<Hrac> hraci = hra.getHraci(); int pocetKariet = balikKariet.getKarty().size(); for(int i = 0; i<pocetKariet;i++){ Hrac hrac = hraci.get(i%hraci.size()); hrac.getKartyVRuke().add(balikKariet.getKartu()); } }
public void odstranHracovZHry(Hra hra) { //nemôžem mazať hraca z kolekcie ak cez nu prechadzam, preto si vytvorim novy zoznam a odstranim potom ArrayList<Hrac> hraciNaOdstranenie = new ArrayList<>(); for(Hrac hrac : hra.getHraci()){ //skontrolujem ci uz niekto neskoncil, teda ma prazdnu ruku //ak ano odstranim ho z hry if(hrac.getKartyVRuke().isEmpty()){ hraciNaOdstranenie.add(hrac); } } for(Hrac hrac : hraciNaOdstranenie){ hra.odstranHracaZHry(hrac); } }
public void zoberHracoviKartu(Hrac hrac1, Hrac hrac2, Hra hra) { int poradieZobranejKarty = hra.getOvladanieHry().zoberKartu(hrac1,hrac2); Karta vzataKarta = hrac2.getKartyVRuke().get(poradieZobranejKarty); hrac1.getKartyVRuke().add(vzataKarta); hrac2.getKartyVRuke().remove(vzataKarta); //pomiesam karty v ruke Collections.shuffle(hrac1.getKartyVRuke()); Collections.shuffle(hrac2.getKartyVRuke()); }
public void kolobehHry(Hra hra, int prvyHracIndex) { while (hra.getHraci().size() > 1) { int pocetHracov = hra.getHraci().size(); Hrac hrac1 = hra.getHraci().get(prvyHracIndex%pocetHracov); Hrac hrac2 = hra.getHraci().get((prvyHracIndex + 1)%pocetHracov); zoberHracoviKartu(hrac1, hrac2,hra); zlozHracomParyZRuky(hra); odstranHracovZHry(hra); if(jeKoniecHry(hra)) { break; } prvyHracIndex++; } }
package sk.jaro.CiernyPeter; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HraCiernyPeter { public List<Karta> vytvorKarty() { ArrayList<Karta> karty = new ArrayList<>(); int j = 1; for(int i = 0; i < 16; i++, j=j+2){ karty.add(new Karta(j, i)); karty.add(new Karta(j+1, i)); } karty.add(new Karta(33,-1)); //Čierny Peter return karty; } public void rozdajKarty(Hra hra) { BalikKariet balikKariet = hra.getBalikKariet(); List<Hrac> hraci = hra.getHraci(); int pocetKariet = balikKariet.getKarty().size(); for(int i = 0; i<pocetKariet;i++){ Hrac hrac = hraci.get(i%hraci.size()); hrac.getKartyVRuke().add(balikKariet.getKartu()); } } public Hrac getHracaSNajviacKartami(List<Hrac> hraci) { int max = 0; Hrac hracMax = null; for(Hrac hrac : hraci){ int size = hrac.getKartyVRuke().size(); if(max < size){ max = size; hracMax = hrac; } } return hracMax; } public void zlozHracomParyZRuky(Hra hra) { for(Hrac hrac : hra.getHraci()) { hrac.odstranParyZRuky(); } } public void odstranHracovZHry(Hra hra) { //nemôžem mazať hraca z kolekcie ak cez nu prechadzam, preto si vytvorim novy zoznam a odstranim potom ArrayList<Hrac> hraciNaOdstranenie = new ArrayList<>(); for(Hrac hrac : hra.getHraci()){ //skontrolujem ci uz niekto neskoncil, teda ma prazdnu ruku //ak ano odstranim ho z hry if(hrac.getKartyVRuke().isEmpty()){ hraciNaOdstranenie.add(hrac); } } for(Hrac hrac : hraciNaOdstranenie){ hra.odstranHracaZHry(hrac); } } public boolean jeKoniecHry(Hra hra) { if(hra.getHraci().size() < 2){ hra.ukonciHru(); return true; } return false; } public void zoberHracoviKartu(Hrac hrac1, Hrac hrac2, Hra hra) { int poradieZobranejKarty = hra.getOvladanieHry().zoberKartu(hrac1,hrac2); Karta vzataKarta = hrac2.getKartyVRuke().get(poradieZobranejKarty); hrac1.getKartyVRuke().add(vzataKarta); hrac2.getKartyVRuke().remove(vzataKarta); //pomiesam karty v ruke Collections.shuffle(hrac1.getKartyVRuke()); Collections.shuffle(hrac2.getKartyVRuke()); } public void kolobehHry(Hra hra, int prvyHracIndex) { while (hra.getHraci().size() > 1) { int pocetHracov = hra.getHraci().size(); Hrac hrac1 = hra.getHraci().get(prvyHracIndex%pocetHracov); Hrac hrac2 = hra.getHraci().get((prvyHracIndex + 1)%pocetHracov); zoberHracoviKartu(hrac1, hrac2,hra); zlozHracomParyZRuky(hra); odstranHracovZHry(hra); if(jeKoniecHry(hra)) { break; } prvyHracIndex++; } } }
public static void main(String[] args) { Hra hra = new Hra(); hra.zacniHru(); }