La création de Serpent à l'aide de Java

J'ai décidé de re-créer de Serpent à l'aide de Java, mais je suis un peu coincé. Pour le moment, j'ai un carré que l'utilisateur peut se déplacer autour de l'écran en utilisant les touches fléchées. Lorsque vous appuyez sur la touche encore une fois à GAUCHE, la place commence à se déplacer vers la gauche à l'aide d'une minuterie.. Vous n'avez pas besoin d'appuyer sur la touche ou maintenir la pression; il change de direction lorsque vous appuyez sur l'une des autres clés de set(à Droite, en Haut, en Bas). Mon but est d'utiliser une ArrayList pour tenir les carrés qui composent le serpent. Pour le moment, j'ai créé une liste de tableaux avec juste un Serpent objet à l'intérieur, si j'ajoute un deuxième Serpent objet de la liste et d'ajouter à l'image(avec le premier), un seul Serpent objet est visible, et les touches pour se déplacer, il ne fonctionne pas. Je suis à la recherche de quelques idées de la façon dont je peut progresser avec ce projet - s'il vous plaît, ne me donne pas la réponse, parce que j'aimerais comprendre la plupart de ma part; j'ai seulement besoin d'une direction. Merci à l'avance - le code est ci-dessous.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Snake extends JPanel implements KeyListener, ActionListener
{
int x = 0, y = 0, velx = 0, vely = 0;
Timer t = new Timer(250, this);
public Snake(int num1, int num2)
{
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(true);
x = num1;
y = num2;
}
public void paintComponent(Graphics g)
{   
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(x, y, 20, 20);
}
public void actionPerformed(ActionEvent e)
{
repaint();
x += velx;
y += vely;
}
public void up()
{
vely = -20;
velx = 0;
}
public void down()
{
vely = 20;
velx = 0;
}
public void left()
{
vely = 0;
velx = -20;
}
public void right()
{
vely = 0;
velx = 20;
}
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(code == KeyEvent.VK_UP)
up();
else if(code == KeyEvent.VK_DOWN)
down();
else if(code == KeyEvent.VK_RIGHT)
right();
else if(code == KeyEvent.VK_LEFT)
left();
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
//Driver Class
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class UserClass
{
private static JFrame frame = new JFrame("Snake");
private static ArrayList<Snake> mySnake = new ArrayList<Snake>();
public static void main(String[] args)
{
frame.setSize(500,500);
frame.setBackground(Color.black);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mySnake.add(new Snake(20,20));
frame.add(mySnake.get(0));
}
}

P. S Quand je mets ce même code dans Eclipse sur mon Mac, le fond de mon image est noire, mais sur Windows, il est gris clair... quelqu'un sait pourquoi? Merci.

Je suis assez sûr que la superposition d'un Composite par objet n'est pas une bonne idée ...

OriginalL'auteur corecase | 2012-06-09