Advertisement
meteora8888

aaaa

Apr 29th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.11 KB | None | 0 0
  1. package hra;
  2.  
  3. import exceptions.NespravnyVstupException;
  4. import hra.pomocne.InicializacnyProcessor;
  5. import hra.pomocne.TextovyProcesor;
  6. import hra.pomocne.GrafickyProcessor;
  7. import hra.pomocne.FontProcessor;
  8. import hra.listeners.HlavnaPlochaListener;
  9. import java.awt.Color;
  10. import java.awt.Dimension;
  11. import java.awt.Rectangle;
  12. import java.awt.Toolkit;
  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;
  15. import javax.swing.JOptionPane;
  16.  
  17. /**
  18.  * Hlavná trieda ktorá je potomkom triedy JFrame a riadí inštancie triedy JPanel
  19.  * ako samostatné stavy hry. Inicializuje konštánty slúžiace na mierku prvkov v
  20.  * hre v závyslosti od rozmerov okna aplikácie samotnej. Je použitý návrhový
  21.  * vzor singleton pre uľahčenie prístupu ku všeobecne dôležitím metódám hry,
  22.  * inštancii pomocných tried. Takisto obsahuje inštancie triedy JPanel
  23.  * plochaStola ,plochaSiene a hlavnaPlocha ktoré sú stavmi hry
  24.  *
  25.  * @author (Andrej Jaššo)
  26.  * @version (04.04.2017)
  27.  */
  28. public final class Hra extends JFrame {
  29.  
  30.     public static final int SIRKA_OKNA = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 4 * 3;
  31.     public static final int VYSKA_OKNA = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 4 * 3;
  32.     public static final int ROZMER_KARTY = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 12;
  33.     public static final int MEDZERA_OBJEKTOV = 2;
  34.     public static final int SIRKA_POSUVACA = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() / (30);
  35.  
  36.     private static Hra hra;
  37.     private final JPanel plochaStola;
  38.     private final JPanel plochaSiene;
  39.     private final JPanel hlavnaPlocha;
  40.  
  41.     private final GrafickyProcessor graf;
  42.     private final TextovyProcesor text;
  43.     private final FontProcessor font;
  44.     private final InicializacnyProcessor init;
  45.  
  46.     private final KartovaSien hlavnaSien;
  47.     private final HlavnaPlochaListener mojListener;
  48.     private Stol hlavnyStol;
  49.  
  50.     /**
  51.      * Metóda nastavuje potrebné vlastnosti okna programu a jeho počiatočný
  52.      * stav. Sú použité parametre z hore uvedených konšťant.
  53.      *
  54.      *
  55.      * @param args
  56.      */
  57.     public static void main(String[] args) {
  58.         System.out.println("Zacina sa main triedy Hra");
  59.         Hra.hra = new Hra();
  60.         Hra.hra.setPreferredSize(new Dimension(Hra.SIRKA_OKNA, Hra.VYSKA_OKNA));
  61.         Hra.hra.setUndecorated(true);
  62.         Hra.hra.pack();
  63.         Hra.hra.setLocationRelativeTo(null);
  64.         Hra.hra.setVisible(true);
  65.         System.out.println("Konci sa main triedy Hra");
  66.     }
  67.  
  68.     /**
  69.      * Metóda vracia referenciu na dynamický časť triedy Hra.
  70.      *
  71.      * @return
  72.      */
  73.     public static Hra dajHru() {
  74.         return Hra.hra;
  75.     }
  76.  
  77.     /**
  78.      * Inicializuju sa všetky potrebne, premenné, atribúty triedy a komponenty
  79.      * okna hry. Inštancii triedy Hra vynuluje preddefinové rozloženie
  80.      * komponentov pre možnosť presnejšieho nastavenia pomocou tzv. absolutného
  81.      * rozloženia. Tlačidlám hlavného menu určuje súradnice a rozmery a
  82.      * pridávajú sa do JPanelu HlavnaPlocha ktorá reprezentuje stav hry keď je
  83.      * uživateľ v hlavnom menu hry.
  84.      */
  85.     public Hra() {
  86.         System.out.println("Zacina sa inicializacie Triedy Hra");
  87.         Hra.hra = (Hra)this;
  88.         this.setLayout(null);
  89.         this.graf = new GrafickyProcessor(); //Nezavysla trieda
  90.         this.font = new FontProcessor(); //Nezavysla trieda
  91.         this.text = new TextovyProcesor(); //Nezavysla trieda
  92.         this.init = new InicializacnyProcessor(); //Trieda vyuziva Graficky a Fontovy Procesor
  93.  
  94.         this.setCursor(this.graf.getRuka());
  95.  
  96.         this.hlavnaPlocha = this.init.inicializujAVratJPanel(new Rectangle(0, 0, Hra.SIRKA_OKNA, Hra.VYSKA_OKNA), Hra.dajHru());
  97.         this.plochaSiene = this.init.inicializujAVratJPanel(new Rectangle(0, 0, Hra.SIRKA_OKNA, Hra.VYSKA_OKNA), Hra.dajHru());
  98.         this.plochaStola = this.init.inicializujAVratJPanel(new Rectangle(0, 0, Hra.SIRKA_OKNA, Hra.VYSKA_OKNA), Hra.dajHru());
  99.  
  100.         this.hlavnaSien = new KartovaSien(this.plochaSiene);
  101.         this.mojListener = new HlavnaPlochaListener(this);
  102.         this.inicializujHlavneMenu();
  103.         this.vstupDoHlavnehoMenu();
  104.         this.hlavnaPlocha.setBackground(Color.black);
  105.         this.init.inicializujAVratJLabelSObrazkom("pozadie", "ramik.png", this.hlavnaPlocha.getComponentCount(), this.hlavnaPlocha, new Rectangle(Hra.SIRKA_OKNA, Hra.VYSKA_OKNA));
  106.         System.out.println("Konci sa inicializacia triedy Hra");
  107.     }
  108.  
  109.     /**
  110.      * Metóda ktorej sa posiela správa pri skončení hry. Zobrazí okienko s menom
  111.      * výťaza pri skončení hry. Pošle správu metóde vymazStol() vo vnorenej
  112.      * triede Panel. Zmení stav hlavnej ponuky na true. Prekreslí okno tohto
  113.      * objektu.
  114.      *
  115.      * @param menoVytaza Parameter typu string ktorý je poslaný z inštancie
  116.      * triedy Stol pri jej ukončení
  117.      */
  118.     public void koniecHry(String menoVytaza) {
  119.         System.out.println("koniecHry");
  120.         JOptionPane.showMessageDialog(null, "Hrac " + menoVytaza + " vyhral hru");
  121.         this.vymazStol();
  122.         this.vstupDoHlavnehoMenu();
  123.         this.prekresli();
  124.     }
  125.  
  126.     /**
  127.      * Metóda slúži na prepnútie na JPanel hlavnaPlocha spomedzi JPanelov ktoré
  128.      * obsahuje hlavný JFrame. Všetký ostatné panely vypne a prekreslí
  129.      * aktualizuje JFrame.
  130.      *
  131.      */
  132.     public void vstupDoHlavnehoMenu() {
  133.         this.plochaSiene.setVisible(false);
  134.         this.plochaSiene.setEnabled(false);
  135.         this.plochaStola.setVisible(false);
  136.         this.plochaStola.setEnabled(false);
  137.         this.hlavnaPlocha.setVisible(true);
  138.         this.hlavnaPlocha.setEnabled(true);
  139.         this.prekresli();
  140.     }
  141.  
  142.     /**
  143.      * Metóda slúži na prepnútie na JPanel plochaSiene spomedzi JPanelov ktoré
  144.      * obsahuje hlavný JFrame. Všetký ostatné panely vypne a prekreslí
  145.      * aktualizuje JFrame.
  146.      *
  147.      */
  148.     public void vstupDoSiene() {
  149.         this.hlavnaPlocha.setVisible(false);
  150.         this.hlavnaPlocha.setEnabled(false);
  151.         this.plochaStola.setVisible(false);
  152.         this.plochaStola.setEnabled(false);
  153.         this.plochaSiene.setVisible(true);
  154.         this.plochaSiene.setEnabled(true);
  155.         this.prekresli();
  156.     }
  157.  
  158.     /**
  159.      * Metóda slúži na prepnútie na JPanel plochaStola spomedzi JPanelov ktoré
  160.      * obsahuje hlavný JFrame. Všetký ostatné panely vypne a prekreslí
  161.      * aktualizuje JFrame.
  162.      *
  163.      */
  164.     public void vstupDoHry() {
  165.         this.hlavnaPlocha.setVisible(false);
  166.         this.hlavnaPlocha.setEnabled(false);
  167.         this.plochaSiene.setVisible(false);
  168.         this.plochaSiene.setEnabled(false);
  169.         this.plochaStola.setVisible(true);
  170.         this.plochaStola.setEnabled(true);
  171.         this.prekresli();
  172.     }
  173.  
  174.     /**
  175.      * Aktualizuje hlavný JFrame aby v buffery neostali neaktualne prvky.
  176.      */
  177.     public void prekresli() {
  178.         Hra.hra.revalidate();
  179.         Hra.hra.repaint();
  180.     }
  181.  
  182.     /**
  183.      * Pomocnou triedou InicializacnyProcesor vytvára nové JButtony do
  184.      * hlavnejPlochy a pridáva im ActionListener pre buttony na hlavnejPloche.
  185.      * Rozmedzie je zadefinované manuálne takže pre zmenu pozície je treba
  186.      * nastaviť presné súradnice do parametra metódy inicializujAVratTlacidlo
  187.      */
  188.     private void inicializujHlavneMenu() {
  189.         this.init.inicializujAVratTlacidlo("novaHra", "Nova Hra", this.hlavnaPlocha, this.mojListener, new Rectangle(Hra.SIRKA_OKNA / 2 - 100, 25 + 0 * 75, 200, 50));
  190.         this.init.inicializujAVratTlacidlo("nastaveniaKariet", "Nastavenia Kariet", this.hlavnaPlocha, this.mojListener, new Rectangle(Hra.SIRKA_OKNA / 2 - 100, 25 + 1 * 75, 200, 50));
  191.         this.init.inicializujAVratTlacidlo("vypniHru", "Vypni Hru", this.hlavnaPlocha, this.mojListener, new Rectangle(Hra.SIRKA_OKNA / 2 - 100, 25 + 2 * 75, 200, 50));
  192.     }
  193.  
  194.     /**
  195.      * Vracia referenciu na inštanciu pomocnej triedy GrafickyProcessor.
  196.      *
  197.      * @return the graf
  198.      */
  199.     public GrafickyProcessor dajGrafickyProcessor() {
  200.         return this.graf;
  201.     }
  202.  
  203.     /**
  204.      * Vracia referenciu na inštanciu pomocnej triedy TextovýProcessor.
  205.      *
  206.      * @return
  207.      */
  208.     public TextovyProcesor dajTextovyProcessor() {
  209.         return this.text;
  210.     }
  211.  
  212.     /**
  213.      * Vracia referenciu na inštanciu pomocnej triedy FontProcessor.
  214.      *
  215.      * @return
  216.      */
  217.     public FontProcessor dajFontProcessor() {
  218.         return this.font;
  219.     }
  220.  
  221.     /**
  222.      * Vracia referenciu na inštanciu pomocnej triedy InicializacnyProcessor.
  223.      *
  224.      * @return
  225.      */
  226.     public InicializacnyProcessor dajInitProcessor() {
  227.         return this.init;
  228.     }
  229.  
  230.     /**
  231.      * Metóda nuluje referenciu na hlavnyStol.
  232.      */
  233.     public void vymazStol() {
  234.         this.hlavnyStol = null;
  235.         this.plochaStola.removeAll();
  236.     }
  237.  
  238.     /**
  239.      * Metóda slúži na vyzvanie uživateľa na zadanie mien hráčov a spustenie hry
  240.      * s týmito informáciami. Ak užívateľ zadá prázdný reťazec alebo reťazec
  241.      * obsahuje medzeru ,sa hra nespustí a uživaťel je upozornení na nesprávny
  242.      * vstup. Ak nepotvrdi vstup suhlasom ho zachyti catch statements a upozorni
  243.      * ho. Ak zadá správny vstup hra sa začne.
  244.      *
  245.      */
  246.     public void vytvorNovyStol() {
  247.         String menoPrvehoHraca = JOptionPane.showInputDialog(this, "Ako sa volá hráč č.1?");
  248.         String menoDruhehoHraca = JOptionPane.showInputDialog(this, "Ako sa volá hráč č.2?");
  249.         try {
  250.             if (menoPrvehoHraca == null || menoDruhehoHraca == null || menoPrvehoHraca.isEmpty() || menoDruhehoHraca.isEmpty()) {
  251.                 throw new NespravnyVstupException();
  252.             }
  253.             this.vstupDoHry();
  254.             this.hlavnyStol = new Stol(menoPrvehoHraca, menoDruhehoHraca, this.hlavnaSien.dajBalicek(0), this.hlavnaSien.dajBalicek(1), this.plochaStola);
  255.         } catch (NespravnyVstupException ex) {
  256.             JOptionPane.showInputDialog("zadali ste nespravny vstup", "hlasenie o chybe");
  257.         }
  258.     }
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement