Diskuze: Pridanie elementov do hry

Java Java Pridanie elementov do hry

Avatar
Róbert Giertl:

Dobrý deň mám problém a zároveň málo času. Nie som až tak zdatný programátor, píšem z toho dôvodu, že mám hru snake ale do nej treba pridať objekty do ktorých bude had narážať. Posielám vám celý zdrojak ďakujem za pomoc vopred

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;




public class Game {
    private UI ui;
    private Had had;

    public Game(UI ui, Had had) {
        this.ui = ui;
        this.had = had;
    }
       public void play(){
        while(ui.isBeziaci()){
            Graphics2D graphics = (Graphics2D) ui.getOknoHry().getBufferStrategy().getDrawGraphics();
            this.draw(graphics);
            graphics.dispose();
            this.refreshGame();
            if(ui.getOknoHry() != null){
                BufferStrategy s = ui.getOknoHry().getBufferStrategy();
                if(!s.contentsLost())
                    s.show();
            }
            try{
                Thread.sleep(ui.getRychlost());
            }catch(Exception alternate){}
        }
    }
    private void endGame(){
        ui.setBeziaci(false);
    }
    private void refreshGame(){
        this.createFood();
        ui.setZmenaSmeru(false);
        for (int i = 0; i < had.getHad().size(); i++) {
            for (int j = i + 1; j < had.getHad().size(); j++) {
                if (had.getHad().get(i).getLocation().x == had.getHad().get(j).getLocation().x && had.getHad().get(i).getLocation().y == had.getHad().get(j).getLocation().y) {
                    JFrame tmp = ui.getOknoHry();
                    tmp.setVisible(false);
                    ui.setOknoHry(tmp);
                    JOptionPane.showMessageDialog(null, "Vaše skóre " + this.had.getBody(),"Snake", JOptionPane.PLAIN_MESSAGE);
                    ui.setOpakovat(true);
                    ui.setBeziaci(false);
                }
            }
        }
        for (int i = had.getHad().size() - 1; i >= 0; i--) {
            if (ui.isHore()) {
                try {
                    had.getHad().get(i).setLocation(had.getHad().get(i - 1).x,had.getHad().get(i - 1).y);
                }
                catch (Exception alternate ) {
                    if (had.getHad().get(i).getLocation().y > 0) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x,had.getHad().get(i).y - 20);
                    }
                    else if ( (ui.getObtiaznost() == 0) || (ui.getObtiaznost() == 1)) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x,
                            ui.getOknoHry().getHeight() - 20);
                    }
                }
            }
            else if (ui.isDole()) {
                try {
                    had.getHad().get(i).setLocation(had.getHad().get(i - 1).x,had.getHad().get(i - 1).y);
                }
                catch (Exception alternate) {
                    if (had.getHad().get(i).getLocation().y < ui.getOknoHry().getHeight() - 20) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x,had.getHad().get(i).y + 20);
                    }
                    else if ( (ui.getObtiaznost() == 0) || (ui.getObtiaznost() == 1)) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x, 0);
                    }
                }
            }
            else if (ui.isVlavo()) {
                try {
                    had.getHad().get(i).setLocation(had.getHad().get(i - 1).x,had.getHad().get(i - 1).y);
                }
                catch (Exception alternate) {
                    if (had.getHad().get(i).getLocation().x > 0) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x - 20,had.getHad().get(i).y);
                    }
                    else if ( (ui.getObtiaznost() == 0) || (ui.getObtiaznost() == 1)) {
                        had.getHad().get(i).setLocation(ui.getOknoHry().getWidth() - 20,had.getHad().get(i).y);
                    }
                }
            }
            else if (ui.isVpravo()) {
                try {
                    had.getHad().get(i).setLocation(had.getHad().get(i - 1).x,had.getHad().get(i - 1).y);
                }
                catch (Exception alternate) {
                    if (had.getHad().get(i).getLocation().x < ui.getOknoHry().getWidth() - 20) {
                        had.getHad().get(i).setLocation(had.getHad().get(i).x + 20,had.getHad().get(i).y);
                    }
                    else if ( (ui.getObtiaznost() == 0) || (ui.getObtiaznost() == 1)) {
                        had.getHad().get(i).setLocation(0, had.getHad().get(i).y);
                    }
                }
            }
        }
    }
    private void draw(Graphics2D g){
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, ui.getOknoHry().getWidth(), ui.getOknoHry().getHeight());
        g.setColor(Color.GRAY);
        if(ui.isMriezka()){
            for (int x = 0; x < ui.getOknoHry().getWidth() / 20; x++) {
                for (int y = 0; y < ui.getOknoHry().getHeight() / 20; y++) {
                    g.drawRect(x * 20, y * 20, 20, 20);
                }
            }
        }
        if (!this.had.isZjedene())
            g.fill(ui.getJedlo());

        g.setColor(Color.WHITE);
        for (int i = had.getHad().size() - 1; i >= 0; i--)
            g.fill(had.getHad().get(i));

        g.setFont(new Font(".", Font.PLAIN, 16));
        g.drawString("Body: " + this.had.getBody(), 2, 17);
        g.drawString("Stlač ESC pre skončenie hry", 450, 17);
        if(!ui.isHore() && !ui.isDole() && !ui.isVlavo() && !ui.isVpravo())
            g.drawString("Stlač smerové tlačidlo a spustí sa hra", 130, 17);
    }
    private void createFood(){
        if (had.isZjedene() && (ui.isHore() || ui.isDole() || ui.isVlavo() || ui.isVpravo())) {

            int x = new Random().nextInt(30) * 20;
            int y = new Random().nextInt(25) * 20;

            boolean vytvorJedlo = true;

            for (int i = 0; i < had.getHad().size(); i++)
                if (had.getHad().get(i).x == x && had.getHad().get(i).y == y)
                    vytvorJedlo = false;

                if (vytvorJedlo) {
                    ui.setJedlo(new Rectangle(x, y, 20, 20));
                    had.setZjedene(false);
                }
        }
        else if (ui.getJedlo() != null && !had.isZjedene()) {
            if (had.getHad().get(0).x == ui.getJedlo().x && had.getHad().get(0).y == ui.getJedlo().y) {
                ArrayList<Rectangle> tmpHad;
                tmpHad = had.getHad();
                tmpHad.add(new Rectangle(-20, -20, 20, 20));
                had.setHad(tmpHad);
                had.setBody(had.getBody()+1);
                had.setZjedene(true);
            }
        }
    }

    public boolean isOpakovat() {
        return ui.isOpakovat();
    }
}
import java.awt.Rectangle;
import java.util.ArrayList;



public class Had {

    private ArrayList<Rectangle> had;
    private int body;
    private boolean zjedene;

    public Had() {
        had = new ArrayList<>();                //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));

        had.add(new Rectangle(-80, -60, 90, 20));



        zjedene = true;
        body = 0;
    }

    public int getBody() {
        return body;
    }

    public boolean isZjedene() {
        return zjedene;
    }

    public void setBody(int body) {
        this.body = body;
    }

    public void setZjedene(boolean zjedene) {
        this.zjedene = zjedene;
    }

    public ArrayList<Rectangle> getHad() {
        return had;
    }

    public void setHad(ArrayList<Rectangle> had) {
        this.had = had;
    }

}
public class Hra{
    public static void initGame(UI ui,Had had,Game game) {
        try{
            ui.createWorkplace();
            ui.bindKeyListener();
            game.play();
        }
        finally{
            if(!(ui.isOpakovat())){
                System.exit(0);
            }
        }
    }
    public static void main(String[] args) {
        Had snake = new Had();
        UI ui = new UI(snake);
        Game game = new Game(ui,snake);
        ui.setDifficulty();

        initGame(ui,snake,game);

        if(ui.isOpakovat())
            main(null);
    }
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class UI implements KeyListener{
    private final Object[] opts = { "Ľahká", "Normálna", "Ťažká", "Šialená", "Vypnúť hru" };
    private final Had had;

    public int getObtiaznost() {
        return obtiaznost;
    }

    public void setObtiaznost(int obtiaznost) {
        this.obtiaznost = obtiaznost;
    }

    public int getRychlost() {
        return rychlost;
    }

    public void setRychlost(int rychlost) {
        this.rychlost = rychlost;
    }

    public boolean isMriezka() {
        return mriezka;
    }

    public void setMriezka(boolean mriezka) {
        this.mriezka = mriezka;
    }

    public boolean isBeziaci() {
        return beziaci;
    }

    public void setBeziaci(boolean beziaci) {
        this.beziaci = beziaci;
    }

    public boolean isOpakovat() {
        return opakovat;
    }

    public void setOpakovat(boolean opakovat) {
        this.opakovat = opakovat;
    }

    public boolean isHore() {
        return hore;
    }

    public void setHore(boolean hore) {
        this.hore = hore;
    }

    public boolean isDole() {
        return dole;
    }

    public void setDole(boolean dole) {
        this.dole = dole;
    }

    public boolean isVlavo() {
        return vlavo;
    }

    public void setVlavo(boolean vlavo) {
        this.vlavo = vlavo;
    }

    public boolean isVpravo() {
        return vpravo;
    }

    public void setVpravo(boolean vpravo) {
        this.vpravo = vpravo;
    }

    public boolean isZmenaSmeru() {
        return zmenaSmeru;
    }

    public void setZmenaSmeru(boolean zmenaSmeru) {
        this.zmenaSmeru = zmenaSmeru;
    }

    public JFrame getOknoHry() {
        return oknoHry;
    }

    public void setOknoHry(JFrame oknoHry) {
        this.oknoHry = oknoHry;
    }

    public Rectangle getJedlo() {
        return jedlo;
    }

    public void setJedlo(Rectangle jedlo) {
        this.jedlo = jedlo;
    }

    private int obtiaznost,rychlost;
    private boolean mriezka,beziaci,opakovat,hore, dole, vlavo, vpravo,zmenaSmeru;
    private JFrame oknoHry;
    private Rectangle jedlo;

    public UI(Had had) {

        this.had = had;
        this.obtiaznost = 0;
        this.mriezka = true;
        this.rychlost = 139;
    }
    public void setDifficulty(){
        this.obtiaznost = JOptionPane.showOptionDialog(null, "Vitajte v hre SNAKE! \n  Zvolte si obtiažnosť: \n ",
                "Snake", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,null, this.opts, this.opts);
        switch(this.obtiaznost){
            case 0:
                break;
            case 1:
                this.rychlost = 99;
                this.mriezka = true;
                break;
            case 2:
                this.rychlost = 69;
                this.mriezka = false;
                break;
            case 3:
                this.rychlost = 29;
                this.mriezka = false;
                break;
            default:
                System.exit(0);
        }
    }
    public void createWorkplace(){
        this.oknoHry = new JFrame();    //vytvorenie okna
        this.oknoHry.setUndecorated(false);             //vypnutie r�mu
        this.oknoHry.setIgnoreRepaint(true);
        this.oknoHry.setResizable(false);       //nastav� aby sa nemohlo okno rozsirova�
        this.oknoHry.setSize(800, 700);         //velkost okna
        this.oknoHry.setLocationRelativeTo(null);       //nastav� lok�ciu pre okno
        this.oknoHry.setFont(new Font("Arial", Font.PLAIN, 50));        //nastav� p�smo a jeho velkost
        this.oknoHry.setVisible(true);          //viditelnost okna
        this.oknoHry.createBufferStrategy(2);   //

        this.oknoHry.setDefaultCloseOperation(this.oknoHry.EXIT_ON_CLOSE);



        this.opakovat = false;
        this.beziaci = true;
    }

    public void bindKeyListener() {
       this.oknoHry.addKeyListener(this);
    }

    @Override
    public void keyPressed(KeyEvent alternate) {
        if (alternate.getKeyCode() == KeyEvent.VK_ESCAPE)
            System.exit(0);
        else if (alternate.getKeyCode() == KeyEvent.VK_UP && !dole && !zmenaSmeru) {
            zmenaSmeru = hore = true;
            dole = vlavo = vpravo = false;
        }
        else if (alternate.getKeyCode() == KeyEvent.VK_DOWN && !hore && !zmenaSmeru) {
            zmenaSmeru = dole = true;
            hore = vlavo = vpravo = false;
        }
        else if (alternate.getKeyCode() == KeyEvent.VK_LEFT && !vpravo && !zmenaSmeru) {        //pokial sa stla�� �ipka vlavo
            zmenaSmeru = vlavo = true;
            hore = dole = vpravo = false;
        }
        else if (alternate.getKeyCode() == KeyEvent.VK_RIGHT && !vlavo && !zmenaSmeru) {        //pokial sa stla�� �ipka vpravo
            zmenaSmeru = vpravo = true;
            hore = dole = vlavo = false;
        }
    }
    @Override
    public void keyReleased(KeyEvent ke) {
    }
    @Override
    public void keyTyped(KeyEvent ke) {
    }
}
 
Odpovědět 18. května 23:47
Avatar
Róbert Giertl:

Obrazkom som chcel naznačiť ako by mal pridaný objekt vyzerať :)

 
Nahoru Odpovědět 18. května 23:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.