Eu estava fazendo um simples projeto repetindo os passos de um video gringo que encontrei de um projeto do jogo da cobrinha, fui seguindo passo a passo e simplesmente o que eu codei não desenha nada do jogo, mesmo estando idêntico ao código do gringo. O que pode estar ocorrendo ? fiz um segundo projeto com o código do gringo e rodou, contudo o meu fica apenas nessa tela preta:
Segue o código:
public class JogoDaCobrinha {
public static void main(String[] args) {
new GameFrame();
}
}
public class GameFrame extends JFrame {
GameFrame() {
this.add(new GamePanel());
this.setTitle("Jogo da Cobrinha");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.pack();
this.setVisible(true);
this.setLocationRelativeTo(null);
}
}
public class GamePanel extends JPanel implements ActionListener {
static final int LARGURA_TELA = 800;
static final int ALTURA_TELA = 800;
static final int TAMANHO_UNIDADE = 30;
static final int UNIDADES_JOGO = (LARGURA_TELA * ALTURA_TELA) / TAMANHO_UNIDADE;
static final int DELAY = 85;
final int x[] = new int[UNIDADES_JOGO];
final int y[] = new int[UNIDADES_JOGO];
int partesDoCorpo = 6;
int macasComidas;
int macaX;
int macaY;
char direcao = 'R';
boolean rodando = false;
Timer timer;
Random random;
GamePanel() {
random = new Random();
this.setPreferredSize(new Dimension(LARGURA_TELA, ALTURA_TELA));
this.setBackground(Color.black);
this.setFocusable(true);
this.addKeyListener(new AdaptadorDeTecla());
comecaJogo();
}
public void comecaJogo() {
novaMaca();
rodando = true;
timer = new Timer(DELAY, this);
timer.start();
}
public void componenteDePintura(Graphics g) {
super.paintComponent(g);
desenhar(g);
}
public void desenhar(Graphics g) {
if (rodando) {
g.setColor(Color.red);
g.fillOval(macaX, macaY, TAMANHO_UNIDADE, TAMANHO_UNIDADE);
for (int i = 0; i < partesDoCorpo; i++) {
if (i == 0) {
g.setColor(Color.green);
g.fillRect(x[i], y[i], TAMANHO_UNIDADE, TAMANHO_UNIDADE);
} else {
g.setColor(new Color(45, 180, 0));
g.fillRect(x[i], y[i], TAMANHO_UNIDADE, TAMANHO_UNIDADE);
}
}
g.setColor(Color.red);
g.setFont(new Font("Ink Free", Font.BOLD, 40));
FontMetrics metrics = getFontMetrics(g.getFont());
g.drawString("PLACAR: " + macasComidas, (LARGURA_TELA - metrics.stringWidth("PLACAR: " + macasComidas))/2, g.getFont().getSize());
}
else {
gameOver(g);
}
}
public void novaMaca() {
macaX = random.nextInt((int) (LARGURA_TELA / TAMANHO_UNIDADE)) * TAMANHO_UNIDADE;
macaY = random.nextInt((int) (ALTURA_TELA / TAMANHO_UNIDADE)) * TAMANHO_UNIDADE;
}
public void mover() {
for (int i = partesDoCorpo; i > 0; i--) {
x[i] = x[i - 1];
y[i] = y[i - 1];
}
switch (direcao) {
case 'C':
y[0] = y[0] - TAMANHO_UNIDADE;
break;
case 'B':
y[0] = y[0] + TAMANHO_UNIDADE;
break;
case 'E':
x[0] = x[0] - TAMANHO_UNIDADE;
break;
case 'D':
x[0] = x[0] + TAMANHO_UNIDADE;
break;
}
}
public void checarMaca() {
if ((x[0] == macaX) && (y[0] == macaY)) {
partesDoCorpo++;
macasComidas++;
novaMaca();
}
}
public void checarColisao() {
// Checar se colide com a cabeçaS
for (int i = partesDoCorpo; i > 0; i--) {
if ((x[0] == x[i]) && (y[0] == y[i])) {
rodando = false;
}
}
// Checar se a cabeça colide com a borda da esquerda
if (x[0] < 0) {
rodando = false;
}
// Checar se a cabeça colide com a borda da direita
if (x[0] < LARGURA_TELA) {
rodando = false;
}
// Checar se a cabeça colide com a borda do topo
if (y[0] < 0) {
rodando = false;
}
// Checar se a cabeça colide com a borda da esquerda
if (x[0] < 0) {
rodando = false;
}
// Chegar se a cabeça colide com a borda de baixo
if (y[0] < ALTURA_TELA) {
rodando = false;
}
if (!rodando) {
timer.stop();
}
}
public void gameOver(Graphics g) {
//Texto de GameOver
g.setColor(Color.red);
g.setFont(new Font("Ink Free", Font.BOLD, 75));
FontMetrics metrics1 = getFontMetrics(g.getFont());
g.drawString("VOCÊ PERDEU", (LARGURA_TELA - metrics1.stringWidth("VOCÊ PERDEU"))/2, ALTURA_TELA/2);
//Placar GameOver
g.setColor(Color.red);
g.setFont(new Font("Ink Free", Font.BOLD, 40));
FontMetrics metrics2 = getFontMetrics(g.getFont());
g.drawString("PLACAR: " + macasComidas, (LARGURA_TELA - metrics2.stringWidth("PLACAR: " + macasComidas))/2, g.getFont().getSize());
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (rodando) {
mover();
checarMaca();
checarColisao();
}
repaint();
}
public class AdaptadorDeTecla extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (direcao != 'D') {
direcao = 'E';
}
break;
case KeyEvent.VK_RIGHT:
if (direcao != 'E') {
direcao = 'R';
}
break;
case KeyEvent.VK_UP:
if (direcao != 'B') {
direcao = 'C';
}
break;
case KeyEvent.VK_DOWN:
if (direcao != 'C') {
direcao = 'B';
}
break;
}
}
}
}