Ir ao conteúdo
  • Cadastre-se

Java Desenvolvendo um clone de zelda em java


Ir à solução Resolvido por AdrianoSiqueira,

Posts recomendados

Eu estava desenvolvendo um clone de zelda só que um importuno apareceu no meu desenvolvimento, os meus códigos deram errado, o problema é que não sei  o erro. Obs= eu usei o eclipse

Código= <>

<import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

public class Game extends Canvas implements Runnable,  KeyListener{

    
public static int WIDTH = 480, HEIGHT = 480;    
public Player player;

public World world;

public void tick() {

player.tick();


}

public void render() {
BufferStrategy bs = this.getBufferStrategy();

if(bs == null) {
this.createBufferStrategy(3);
return;    
    
}    

Graphics g = bs.getDrawGraphics();

g.setColor(Color.black);
g.fillRect(0, 0, WIDTH, HEIGHT);

player.render(g);

world.render(g);

bs.show();    
    
    
}


public Game() {    
this.addKeyListener(this);    
this.setPreferredSize(new Dimension(WIDTH,HEIGHT));
new Spritesheet();    
player = new Player(32,32);
world = new World();

}

public static void main(String[] args) {
    
Game game = new Game();        
JFrame frame = new JFrame();        

frame.add(game);
frame.setTitle("Zelda as Aventuras de Mike");
frame.setLocationRelativeTo(null);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

new Thread(game).start();


}    
    
    
    
    @Override
    public void run() {
    
    while(true)    {
        
tick();
render();    
try {
    Thread.sleep(1000/60);
} catch (InterruptedException e) {
    e.printStackTrace();
}    


}        
        
        
    
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
        
        player.right = true;    
            
        }        
        else if(e.getKeyCode() == KeyEvent.VK_LEFT)    {
            player.left = true;
        }            
    
        if(e.getKeyCode() == KeyEvent.VK_UP) {
            
            player.up = true;    
                
            }        
            else if(e.getKeyCode() == KeyEvent.VK_DOWN)    {
                player.down = true;
            }            
            
        
        
        
        
        
        
        
    }

    @Override
    public void keyReleased(KeyEvent e) {
        
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            
            player.right = false;    
                
            }        
            else if(e.getKeyCode() == KeyEvent.VK_LEFT)    {
                player.left = false;
            }            
        
            if(e.getKeyCode() == KeyEvent.VK_UP) {
                
                player.up = false;    
                    
                }        
                else if(e.getKeyCode() == KeyEvent.VK_DOWN)    {
                    player.down = false;
                }        

import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

public class World {

public static List<Blocks> blocos = new ArrayList<Blocks>();
    
public World() {
for(int xx = 0; xx < 15; xx++ ) {
blocos.add(new Blocks(xx*32,0));    
}    
for(int xx = 0; xx < 15; xx++ ) {
blocos.add(new Blocks(xx*32,480-32));    
}        
for(int yy = 0; yy < 15; yy++ ) {
blocos.add(new Blocks(0,yy*32));    
}        
for(int yy = 0; yy < 15; yy++ ) {
blocos.add(new Blocks(480-32,yy*32));    
}    

}

public static boolean isFree(int x, int y) {
    for(int i = 0; i < blocos.size(); i++) {    
Blocks blocoAtual = blocos.get(i);
if(blocoAtual.intersects(new Rectangle(x,y,32,32))) {        
return false;
}    
    
    
        }
    return true;
}

public void render(Graphics g) {
for(int i = 0; i < blocos.size(); i++) {    

blocos.get(i).render(g);
}    
    
}    
    
}

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;

public class Blocks extends Rectangle {

public Blocks(int x,int y) {    
    super(x,y,32,32);

}
    
public void render(Graphics g) {    
g.setColor(Color.MAGENTA);
g.fillRect(x, y, width, height);    
g.setColor(Color.black);    
g.drawRect(x, y, width, height);
}    
    
    
    
    
}>

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Em 23/04/2022 às 11:21, AdrianoSiqueira disse:

Difícil ajudar sem saber o erro. Eu criei a estrutura do seu código, mas estão faltando as classes:

  • Spritesheet

  • Player

Sem elas não dá para executar o programa para depurar.

Obrigado. você poderia indicar esse topico a alguém que talvez entenda melhor do assunto. Quando aperto o botão run do eclipsr da um erro que nem eu sei

 

Link para o comentário
Compartilhar em outros sites

Em 26/04/2022 às 09:54, AdrianoSiqueira disse:

Se você puder postar o código das classes mencionadas, talvez eu possa ajudar.

Aqui estão: <> 

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
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.List;

import javax.swing.JFrame;

public class Player extends Rectangle {

public int spd = 4;    
    
    
    
    
public boolean right,up,down,left;    
    
    
    

    
    
public Player(int x, int y) {
 super(x,y,32,32);    
    
}    
    
public void tick()    {
if(right && World.isFree(x+spd, y)) {
    
x+=spd;


}else if(left && World.isFree(x-spd, y)) {

x-=spd;


}if(up && World.isFree(x, y-spd)) {
    
y-=spd;


}else if(down && World.isFree(x, y+spd)) {

y+=spd;

}

public void render(Graphics g) {
//g.setColor(Color.blue);
//g.fillRect(x, y, width, height);
g.drawImage(Spritesheet.player_front, x, y, 32, 32, null)

}


}    

    
public Spritesheet() {    
try {
    spritesheet = ImageIO.read(getClass().getResource("/spritesheet.png"));
} catch (IOException e) {
    
    e.printStackTrace();
}    
player_front= Spritesheet.getSprite(0, 11, 16, 16);
    
}

public static BufferedImage getSprite(int x, int y, int width, int height) {
return spritesheet.getSubimage(x, y, width, height);

    
    
}    
    
    
}
 

Em 28/04/2022 às 14:52, Felipecfk disse:

Existe uma diferença entre desenvolver um jogo e montar um jogo a partir de um código já existente. 

E você tem razão. Sabe como editar texto nesse fórum. Obs sou novo aqui

Em 28/04/2022 às 14:52, Felipecfk disse:

Existe uma diferença entre desenvolver um jogo e montar um jogo a partir de um código já existente. 

No caso estou fazendo um curso de programação que me ensinou esse códigos para criar o clone de Zelda. Desculpa o erro

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

O problema está relacionado com o objeto spritesheet. Está faltando essa classe, ou o código simplesmente não está completo. Remova toda as referências para esse objeto e o código irá compilar e executar.

 

Além disso, seu código está cheio de erros relacionados com o fechamento incorreto de chaves.

 

Modifiquei o código para ficar dentro de uma classe só, apenas para ficar mais fácil de postar aqui.

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import java.util.List;

public class Game extends Canvas implements Runnable, KeyListener {

    public static int WIDTH  = 480;
    public static int HEIGHT = 480;

    public Player player;
    public World  world;

    public Game() {
        this.addKeyListener(this);
        this.setPreferredSize(new Dimension(WIDTH, HEIGHT));

        player = new Player(32, 32);
        world  = new World();
    }

    public static void main(String[] args) {
        Game game = new Game();

        JFrame frame = new JFrame();
        frame.add(game);
        frame.setTitle("Zelda as Aventuras de Mike");
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        new Thread(game).start();
    }

    public void render() {
        BufferStrategy bs = this.getBufferStrategy();

        if (bs == null) {
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();

        g.setColor(Color.black);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        player.render(g);
        world.render(g);

        bs.show();
    }

    public void tick() {
        player.tick();
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            player.right = true;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            player.left = true;
        }

        if (e.getKeyCode() == KeyEvent.VK_UP) {
            player.up = true;
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            player.down = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            player.right = false;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            player.left = false;
        }

        if (e.getKeyCode() == KeyEvent.VK_UP) {
            player.up = false;
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            player.down = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {}

    @Override
    public void run() {
        while (true) {
            tick();
            render();
            try {
                Thread.sleep(1000 / 60);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private static class Blocks extends Rectangle {

        public Blocks(int x, int y) {
            super(x, y, 32, 32);
        }

        public void render(Graphics g) {
            g.setColor(Color.MAGENTA);
            g.fillRect(x, y, width, height);
            g.setColor(Color.black);
            g.drawRect(x, y, width, height);
        }
    }

    private static class Player extends Rectangle {

        public int spd = 4;

        public boolean right;
        public boolean up;
        public boolean down;
        public boolean left;

        public Player(int x, int y) {
            super(x, y, 32, 32);
        }

        public void render(Graphics g) {
            g.setColor(Color.blue);
            g.fillRect(x, y, width, height);
        }

        public void tick() {
            if (right && World.isFree(x + spd, y)) {
                x += spd;
            } else if (left && World.isFree(x - spd, y)) {
                x -= spd;
            }
            if (up && World.isFree(x, y - spd)) {
                y -= spd;
            } else if (down && World.isFree(x, y + spd)) {
                y += spd;
            }
        }
    }

    private static class World {

        public static List<Blocks> blocos = new ArrayList<>();

        public World() {
            for (int xx = 0; xx < 15; xx++) {
                blocos.add(new Blocks(xx * 32, 0));
            }
            for (int xx = 0; xx < 15; xx++) {
                blocos.add(new Blocks(xx * 32, 480 - 32));
            }
            for (int yy = 0; yy < 15; yy++) {
                blocos.add(new Blocks(0, yy * 32));
            }
            for (int yy = 0; yy < 15; yy++) {
                blocos.add(new Blocks(480 - 32, yy * 32));
            }
        }

        public static boolean isFree(int x, int y) {
            for (int i = 0; i < blocos.size(); i++) {
                Blocks blocoAtual = blocos.get(i);
                if (blocoAtual.intersects(new Rectangle(x, y, 32, 32))) {
                    return false;
                }
            }
            return true;
        }

        public void render(Graphics g) {
            for (int i = 0; i < blocos.size(); i++) {
                blocos.get(i).render(g);
            }
        }
    }
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!