I am trying to make a snake program
The code I currently have looks like this
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class SnakeG extends JPanel implements KeyListener, Runnable{
private Vector<Point> snake = new Vector<Point> (5,2);
private Vector<Rectangle> snakeRectangle = new Vector<Rectangle> (5,2);
public void startGraphics (){
this.addKeyListener(this);
Thread thread = new Thread (this);
repaint();
grabFocus();
snake.add (new Point (250,250));
snake.add(new Point (250,240));
snake.add(new Point (250,230));
addBall();
thread.start();
}
private void addBall() {
// TODO Auto-generated method stub
}
public void paintComponent (Graphics g){
//TODO GRAPHICS AREA
super.paintComponent (g);
for (Point x : snake){
g.fillOval((int)x.getX(),(int)x.getY(),10, 10);
}
}
private boolean pressed = false;
private boolean up,down,left,right;
@Override
public void keyPressed(KeyEvent e) {
System.out.println ("KeyListener");
int key = e.getKeyCode();
up = false;
down = false;
left = false;
right = false;
if (key == KeyEvent.VK_UP && pressed == false){
up = true;
}
else if (key == KeyEvent.VK_DOWN && pressed == false){
down = true;
}
else if (key == KeyEvent.VK_LEFT && pressed == false){
left = true;
}
else if (key == KeyEvent.VK_RIGHT && pressed == false){
right = true;
}
pressed = true;
}
@Override
public void keyReleased(KeyEvent e) {
pressed = false;
}
@Override
public void keyTyped(KeyEvent e){}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println ("Started Thread");
while (true){
if (up == true){
for (int i = snake.size(); i < 0; i--){
System.out.println ("Entered loop");
if (i == 0){
snake.firstElement().y -= 10;
}
else {
snake.elementAt(i).y = snake.elementAt(i-1).y;
}
snake.elementAt(i);
}
}
else if (down == true){
}
else if (left == true){
for (int i = snake.size(); i < 0; i--){
if (i == 0){
snake.firstElement().x -= 10;
}
else {
snake.elementAt(i).x = snake.elementAt(i-1).x;
}
}
}
else if (right == true){
}
repaint();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
The run method has my animations in it. The snake however does not more. I put the printed just inside the for loop that will reassign the values and will make the snake animate, but it does not print. There are no errors. What is the problem.
Thanks for the help.