| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 12.06.13 Prihlásený: 09.05.16 Príspevky: 8 Témy: 2 |
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
}
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
Si robíš prdel, nie? Drbneš sem komplet zdrojáky s vetou v štýle "spravte to za mňa".
_________________ C#, PHP, ... |
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| c++ ako pracovat s triedami v Assembler, C, C++, Pascal, Java | 3 | 569 | 03.11.2008 20:13 tlacitko Enter | | Vyriešenie internetu v Rozširujúce karty | 7 | 509 | 24.09.2014 20:35 arven | | Vyriešenie pomalého adsl ?! v Siete | 9 | 457 | 26.10.2011 9:16 geared | | Čiastočné vyriešenie odpálených geniusoch v Zvuk | 2 | 764 | 17.09.2007 21:53 Dorques | | 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 | | Nefunkčná integrovaná grafická karta (Intel HD) - fin. odmena za vyriešenie v Ostatné grafické karty | 9 | 996 | 30.08.2015 13:56 4040 | | Identifikacia problemu v Ostatné grafické karty | 1 | 415 | 12.09.2013 12:57 michalesku | | Diagnostika problemu v ATI/AMD grafické karty | 2 | 505 | 19.09.2011 22:24 qkrusty | | Riesenie mojho problemu v Pevné disky a radiče | 8 | 659 | 14.12.2007 21:42 Triplespace | | Rozdiel medzi Java Standard a Java EE v Assembler, C, C++, Pascal, Java | 1 | 844 | 02.04.2014 12:41 XOLOO | | dobre java navody a nova tema JAVA [ Choď na stránku: 1, 2 ] v Assembler, C, C++, Pascal, Java | 35 | 5440 | 09.03.2009 17:14 tlacitko Enter | | čo je zdrojom problému? v Intel čipové sady | 4 | 689 | 24.03.2011 18:42 petr1991 | | zistenie problemu nefunckosti pc v Operačné systémy Microsoft | 0 | 399 | 14.06.2011 22:48 Naviz | | hlasenie problemu z eset v Bezpečnosť a firewally | 3 | 903 | 04.01.2009 17:52 Kosak | | pomoc pri hladani problemu. v Pevné disky a radiče | 8 | 703 | 24.09.2009 21:58 leinad422 | | riešenie post-refresh problému v PHP, ASP | 9 | 562 | 25.07.2008 16:57 Tominator |
| 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
|
|