Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 12.06.13
Prihlásený: 09.05.16
Príspevky: 8
Témy: 2
Príspevok NapísalOffline : 09.05.2016 13:02

Zdravím potrebujem pomoc s Javou, tento kód čo tu vidíte by som potreboval rozdeliť do viacerých tried ako sú trieda: Jedlo, pohyb atď...
Za pomoc vopred ĎAKUJEM


Kód:
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

public class Hra extends Jadro implements KeyListener {
   private static int obtiaznost = 0;
   


   // Hlavná metóda ktorá spušta hru
   public static void main(String[] args) {

      
      
      Object[] opts = { "Ľahká", "Normálna", "Tažká", "Šialená", "Vypnúť hru" };      //Zobrazí nám akú obtiažnosť si chceme zvoliť
      obtiaznost = JOptionPane.showOptionDialog(null, "Vitajte v hre SNAKE! \n  Zvolte si obtiažnosť: \n ", //this will be displayed in the box
            "Snake", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,      //title of the message box
            null, opts, opts);

      if (obtiaznost == 0) {      //pokial je obtiaznosť zvolená lahká tak potom
         spanok = 139;         //dlzka prestávky pri restartovaní cyklu
         mriezka = true;         //zobrazí mriežku kadial sa bude uživatel pohybovať
         new Hra().spustac();      //spustí novú hru
         
      } else if (obtiaznost == 1) {      //pokial je obtiaznosť zvolená normálna tak potom
         spanok = 99;         //dlzka prestávky pri restartovaní cyklu
         mriezka = true;         //nezobrazí mriežku kadial sa bude uživatel pohybovať
         new Hra().spustac();      //spustí novú hru
         
      } else if (obtiaznost == 2) {      //pokial je obtiaznosť zvolená tazka tak potom
         spanok = 69;         //dlzka prestávky pri restartovaní cyklu) v mili sekundách
         mriezka = false;         //nezobrazí mriežku kadial sa bude uživatel pohybovať
         new Hra().spustac();      //spustí novú hru
         
      } else if (obtiaznost == 3) {      //pokial je obtiaznosť zvolená sialena tak potom
         spanok = 29;         //dlzka prestávky pri restartovaní cyklu) v mili sekundách
         mriezka = false;         //nezobrazí mriežku kadial sa bude uživatel pohybovať
         new Hra().spustac();      //spustí novú hru
         
      } else {
         System.exit(0);      //ukonci hru
      }
      
      if(opakovat){
         main(null);
      }
   }

   ArrayList<Rectangle> had;
   Rectangle jedlo;      //vytvorí oblast pre umiestnenie jedla
   boolean hore, dole, vlavo, vpravo, zjedene, zmenaSmeru;      //zadeklaruje boolean premenne
   static boolean mriezka;      //zadeklaruje mriezku
   int body;      //zadeklaruje premennu pre body

   
   public void inicializaciaHry() {      // inicializačná metóda
      super.inicializaciaHry();
      oknoHry.addKeyListener(this);
      

      had = new ArrayList<Rectangle>();      //Umiestnenie a velkost hadíka
      had.add(new Rectangle(280, 240, 20, 20));
      had.add(new Rectangle(281, 240, 20, 20));
      had.add(new Rectangle(-20, -20, 20, 20));

      zjedene = true;
      body = 0;
   }

   public void aktualizaciaHry() {      
      Vytvorjedlo(); //vytvorenie jedla
      
      zmenaSmeru = false;

      // Kolizia medzi hadom a samím sebou
      for (int i = 0; i < had.size(); i++) {
         for (int j = i + 1; j < had.size(); j++) {
            if (had.get(i).getLocation().x == had.get(j).getLocation().x
                  && had.get(i).getLocation().y == had.get(j)
            .getLocation().y) {
               zastavenieHry();      //Ukonči hru ked had zje samého seba
               oknoHry.setVisible(false);
               JOptionPane.showMessageDialog(null, "Vaše skóre " + body,      //zobrazí kolko hráč nahral bodov
                     "Snake", JOptionPane.PLAIN_MESSAGE);
               opakovat = true;      //spusti znova hru
            }
         }
      }

      // pohyb hada
      for (int i = had.size() - 1; i >= 0; i--) {
         
         if (hore) {      //pokial je stlačená šipka hore
            try {      //skontroluje, či had už sa nepohybující smerom hore
               had.get(i).setLocation(had.get(i - 1).x,
                     had.get(i - 1).y);
            } catch (Exception alternate ) {      // pokial nie, tak sa zmení smer hada smerom hore
               if (had.get(i).getLocation().y > 0) {
                  had.get(i).setLocation(had.get(i).x,
                        had.get(i).y - 20);
               } else if ( (obtiaznost == 0) || (obtiaznost == 1)) {      // pokial je obtiažnosť nastavena na lahku alebo normálnu tak   
                  had.get(i).setLocation(had.get(i).x,
                        oknoHry.getHeight() - 20);      // Had vyskočí na druhej strane obrazovky, ale pokial je obtiažnost tazka alebo sialena , tak zomrie had
               }
            }
            
         } else if (dole) {      //pokial je stlačená šipka dole
            try {         //skontroluje, či had už sa nepohybující smerom dolu
               had.get(i).setLocation(had.get(i - 1).x,
                     had.get(i - 1).y);
            } catch (Exception alternate) {      // pokial nie, tak sa zmení smer hada smerom dole
               if (had.get(i).getLocation().y < oknoHry.getHeight() - 20) {
                  had.get(i).setLocation(had.get(i).x,   
                        had.get(i).y + 20);
               } else if ( (obtiaznost == 0) || (obtiaznost == 1)) {      // pokial je obtiažnosť nastavena na lahku alebo normálnu tak         
                  had.get(i).setLocation(had.get(i).x, 0);      // Had vyskočí na druhej strane obrazovky, ale pokial je obtiažnost tazka alebo sialena , tak zomrie had
               }
            }
            
         } else if (vlavo) {      //pokial je stlačená šipka vlavo
            try {         //skontroluje, či had už sa nepohybující smerom dolava
               had.get(i).setLocation(had.get(i - 1).x,
                     had.get(i - 1).y);
            } catch (Exception alternate) {      // pokial nie, tak sa zmení smer hada smerom vlavo
               if (had.get(i).getLocation().x > 0) {
                  had.get(i).setLocation(had.get(i).x - 20,
                        had.get(i).y);
               } else if ( (obtiaznost == 0) || (obtiaznost == 1)) {   // pokial je obtiažnosť nastavena na lahku alebo normálnu tak         
                  had.get(i).setLocation(oknoHry.getWidth() - 20,
                        had.get(i).y);      // Had vyskočí na druhej strane obrazovky, ale pokial je obtiažnost tazka alebo sialena , tak zomrie had
               }
            }
            
         } else if (vpravo) {      //pokial je stlačená šipka vpravo
            try {         //skontroluje, či had už sa nepohybující smerom doprava
               had.get(i).setLocation(had.get(i - 1).x,
                     had.get(i - 1).y);
            } catch (Exception alternate) {      // pokial nie, tak sa zmení smer hada smerom vlavo
               if (had.get(i).getLocation().x < oknoHry.getWidth() - 20) {
                  had.get(i).setLocation(had.get(i).x + 20,
                        had.get(i).y);
               } else if ( (obtiaznost == 0) || (obtiaznost == 1)) {      
                  had.get(i).setLocation(0, had.get(i).y);      
               }
            }
         }
      }
   }

   // vytváranie jedla
   public void Vytvorjedlo() {
      if (zjedene && hore || zjedene && dole || zjedene && vlavo || zjedene && vpravo) {      //skontroluje či jedlo bolo zjedené vo všetkých štyroch smeroch
         int x = new Random().nextInt(30) * 20;      //nastavanie náhodných x súradníc
         int y = new Random().nextInt(25) * 20;      //nastavanie náhodných y súradníc
         boolean vytvorJedlo = true;      //vytvorí nové jedlo

         for (int i = 0; i < had.size(); i++) {
            if (had.get(i).x == x && had.get(i).y == y) {
               vytvorJedlo = false;      //nevytvára jedlo
            }
         }

         if (vytvorJedlo) {      //
            jedlo = new Rectangle(x, y, 20, 20);      //umiestnenie a velkost hada zostávajú rovnaké
            zjedene = false;      //pokial nezje jedlo nastaví sa na false
         }
         
      } else if (jedlo != null && !zjedene) {   //pokial jedlo sa zje tak
         if (had.get(0).x == jedlo.x && had.get(0).y == jedlo.y) {      //nastaví sa nová pozícia jedla
            had.add(new Rectangle(-20, -20, 20, 20));
            body++;      // a pridajú body
            zjedene = true;      //nastavaví premennú že jedlo je zjedné
         }
      }
   }

   // kresliaca metóda
   public void kresli(Graphics2D g) {   //nastavenie grafiky pre hru
      
      g.setColor(Color.BLACK);      //nastavenie pozadia hry
      
      
      g.fillRect(0, 0, oknoHry.getWidth(), oknoHry.getHeight());      //Takže farba vyplní celé pozadie rámu

      g.setColor(Color.GRAY);      //nastavenie farby mriezky
      if(mriezka){      //použije cyklus na kreslenie mriežky
         for (int x = 0; x < oknoHry.getWidth() / 20; x++) {
            for (int y = 0; y < oknoHry.getHeight() / 20; y++) {
               g.drawRect(x * 20, y * 20, 20, 20);
            }
         }
      }
      
      if (!zjedene) {
         g.fill(jedlo);      //a vykresli skoci na metodu jedla
      }
      
      g.setColor(Color.WHITE);      //nastaví sa farba hada a písma
      for (int i = had.size() - 1; i >= 0; i--) {
         g.fill(had.get(i));      //nastavenie farby pre hada
      }

      g.setFont(new Font(".", Font.PLAIN, 16));
      g.drawString("Body: " + body, 2, 17);      //Nastaví umiestnenie a zobrazenie skóre na rámu
      g.drawString("Stlač ESC pre skončenie hry", 450, 17);      //nastaví pozíciu správy
      if(!hore && !dole && !vlavo && !vpravo){   //skontroluje či nebolo stlačené smerové tlačidlo
         g.drawString("Stlač smerové tlačidlo a spustí sa hra", 130, 17);   //Nastávi pozíciu hlášky
      }
   }


   public void keyPressed(KeyEvent alternate) {   // nastavnie pohybu
      
      if (alternate.getKeyCode() == KeyEvent.VK_ESCAPE) {      //pokial je tlačení ESCAPE
         zastavenieHry();      //ukončí sa hra
         
      } else if (alternate.getKeyCode() == KeyEvent.VK_UP && !dole && !zmenaSmeru) {   //pokial sa stlačí šipka hore
         zmenaSmeru = true;      //zmení sa smer a nastaví sa premenná na true
         hore = true;         //všetky smery okrem smeru hore sa nastavia na false
         dole = false;
         vlavo = false;
         vpravo = false;
         
      } else if (alternate.getKeyCode() == KeyEvent.VK_DOWN && !hore && !zmenaSmeru) {   //pokial sa stlačí šipka dole
         zmenaSmeru = true;      //zmení sa smer a nastaví sa premenná na true
         hore = false;         //všetky smery okrem smeru dolu sa nastavia na false
         dole = true;
         vlavo = false;
         vpravo = false;
         
      } else if (alternate.getKeyCode() == KeyEvent.VK_LEFT && !vpravo && !zmenaSmeru) {   //pokial sa stlačí šipka vlavo
         zmenaSmeru = true;      //zmení sa smer a nastaví sa premenná na true
         hore = false;         //všetky smery okrem smeru vlavo sa nastavia na false
         dole = false;
         vlavo = true;
         vpravo = false;
         
      } else if (alternate.getKeyCode() == KeyEvent.VK_RIGHT && !vlavo && !zmenaSmeru) {   //pokial sa stlačí šipka vpravo
         zmenaSmeru = true;      //zmení sa smer a nastaví sa premenná na true
         hore = false;         //všetky smery okrem smeru vpravo sa nastavia na false
         dole = false;
         vlavo = false;
         vpravo = true;
      }
   }

   public void keyReleased(KeyEvent alternate) {
   }

   public void keyTyped(KeyEvent alternate) {
   }
}


Kód:
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.*;

public abstract class Jadro {
   
   boolean beziaci;      //deklaracia premenných
   static boolean opakovat;
   JFrame oknoHry;
   

   public void zastavenieHry(){      //vypínacia metóda
      beziaci = false;   //vypne beziacu hru
   }
   

   public void spustac(){      //spustač hry zavolá metódu inicializácie a hlavný spuštač
      
      try{
         inicializaciaHry();   //nastaví okno hry
         Hlavnyspustachry();      //spustí celú hru
      }finally{
         if(!opakovat){   //pokial uživatel nechce znovu spustiť hru
            System.exit(0);      //tak sa hra skončí
         }
      }
   }
   
   public void inicializaciaHry(){
      
      oknoHry = new JFrame();   //vytvorenie okna 
      
      oknoHry.setUndecorated(false);      //vypnutie rámu
      oknoHry.setIgnoreRepaint(true);   
      oknoHry.setResizable(false);   //nastaví aby sa nemohlo okno rozsirovať
      
      
      oknoHry.setSize(800, 700);      //velkost okna
      oknoHry.setLocationRelativeTo(null);   //nastaví lokáciu pre okno
      
      oknoHry.setFont(new Font("Arial", Font.PLAIN, 50));   //nastaví písmo a jeho velkost   
      oknoHry.setVisible(true);      //viditelnost okna
      
      oknoHry.createBufferStrategy(2);   //
      opakovat = false;
      beziaci = true;
   }
   
   static long spanok;      //rýchlost hry
   
   
   public void Hlavnyspustachry(){   //hlavny herný cyklus
      
      while(beziaci){      //pokial hra stále beží
         Graphics2D graphics = (Graphics2D) oknoHry.getBufferStrategy().getDrawGraphics();
         kresli(graphics);      //zaháji kreslenie mriežky
         graphics.dispose();
         this.aktualizaciaHry();      //restartuje cyklus hry, skontroluje, ci had zjedlol jedlo, sám a případně šipka byla stisknuta pro pohyb
         
         if(oknoHry != null){
            BufferStrategy s = oknoHry.getBufferStrategy();
            if(!s.contentsLost()){
               s.show();
            }
         }
         
         try{
            Thread.sleep(spanok);
         }catch(Exception alternate){}
      }
   }
   

   public abstract void aktualizaciaHry();   //aktualizácia hry
   
   
   public abstract void kresli(Graphics2D graphics);   //nastavenia kreslacej metódy
   

   
}


Offline

Skúsený užívateľ
Skúsený užívateľ
JAVA - Vyriešenie problému s triedami

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 09.05.2016 13:03

Si robíš prdel, nie? Drbneš sem komplet zdrojáky s vetou v štýle "spravte to za mňa".







_________________
C#, PHP, ...
Odpovedať na tému [ Príspevkov: 2 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. c++ ako pracovat s triedami

v Assembler, C, C++, Pascal, Java

3

569

03.11.2008 20:13

tlacitko Enter Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyriešenie internetu

v Rozširujúce karty

7

509

24.09.2014 20:35

arven Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyriešenie pomalého adsl ?!

v Siete

9

457

26.10.2011 9:16

geared Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Čiastočné vyriešenie odpálených geniusoch

v Zvuk

2

764

17.09.2007 21:53

Dorques Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyriešenie chladenia v skrinke Corsair 200R Carbide Series

v Chladiče a všetky druhy chladenia

4

514

02.07.2015 14:23

vlado_PLUS Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunkčná integrovaná grafická karta (Intel HD) - fin. odmena za vyriešenie

v Ostatné grafické karty

9

996

30.08.2015 13:56

4040 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Identifikacia problemu

v Ostatné grafické karty

1

415

12.09.2013 12:57

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Diagnostika problemu

v ATI/AMD grafické karty

2

505

19.09.2011 22:24

qkrusty Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Riesenie mojho problemu

v Pevné disky a radiče

8

659

14.12.2007 21:42

Triplespace Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozdiel medzi Java Standard a Java EE

v Assembler, C, C++, Pascal, Java

1

844

02.04.2014 12:41

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. dobre java navody a nova tema JAVA

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Assembler, C, C++, Pascal, Java

35

5440

09.03.2009 17:14

tlacitko Enter Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. čo je zdrojom problému?

v Intel čipové sady

4

689

24.03.2011 18:42

petr1991 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zistenie problemu nefunckosti pc

v Operačné systémy Microsoft

0

399

14.06.2011 22:48

Naviz Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. hlasenie problemu z eset

v Bezpečnosť a firewally

3

903

04.01.2009 17:52

Kosak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pomoc pri hladani problemu.

v Pevné disky a radiče

8

703

24.09.2009 21:58

leinad422 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. riešenie post-refresh problému

v PHP, ASP

9

562

25.07.2008 16:57

Tominator Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra