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
}