Cześć wszystkim,
Próbuję stworzyć snake'a w javie, ale mam niezły problem z jego wydłużaniem. Mam jeden segment którym bez problemu poruszam, ale dodanie nowego, który zachowuje sie tak jak bym chciała to już nie taka prosta sprawa:P Może załącze kod tego co napisałam ogólnie jest to poruszanie kulki:P
Main.java
package snake;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame=new MainFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
MainFrame.java
package snake;
import javax.swing.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class MainFrame extends JFrame implements KeyListener {
private Ball ball; //głowa węża
private PaintComponent comp;
private int x;
private int y;
public MainFrame()
{
setTitle("Snake");
setSize(400,400);
ball=new Ball();
comp=new PaintComponent();
comp.add(ball);
add(comp);
addKeyListener(this);
Runnable r=new BallRunnable(ball,comp);
Thread t=new Thread(r);
t.start();
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_LEFT) {
x=-1;
y=0;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x=1;
y=0;
}
if(e.getKeyCode()==KeyEvent.VK_UP){
x=0;
y=-1;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
x=0;
y=1;
}
}
public void keyReleased(KeyEvent event) {}
public void keyTyped(KeyEvent event) {}
private class BallRunnable implements Runnable
{
private Ball ball;
private PaintComponent comp;
public BallRunnable(Ball aBall, PaintComponent acomp)
{
ball=aBall;
comp=acomp;
}
public void run()
{
try{
while(true) {
ball.move(x,y);
comp.repaint();
Thread.sleep(5);
}
}
catch(InterruptedException e)
{
}
}
}
}
Ball.java
package snake;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Ball {
private Image image;
private int x;
private int y;
Ball()
{
try {
image=ImageIO.read(new File("images\\ball.png"));
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void move(int ax,int ay)
{
x+=ax;
y+=ay;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public Image getImage()
{
return image;
}
}
PaintComponent.java
package snake;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JPanel;
public class PaintComponent extends JPanel {
static public ArrayList<Ball> balls=new ArrayList<Ball>();
public void add(Ball b)
{
balls.add(b);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
for (Ball b: balls)
g.drawImage(b.getImage(),b.getX(),b.getY(),null);
}
}
Jeśli komuś chciałoby się mi pomóc, to byłabym wdzięczna:) Chodzi mi tylko o wydłużanie węża. Dziękuję z góry:)