PLEASE tell me whats wrong!!
Snake Body Code
Snake World code
Snake Head Code
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.*; /** * Write a description of class SnakeBody here. * * @author (your name) * @version (a version number or a date) */ public class SnakeBody extends Actor { private int x_speed=1; private int y_speed=0; private int bodyPos; private Point snakeCoords; /** * SnakeBody constructor * sets the image for the snakeBody * @param int bodyPosition */ public SnakeBody(int bodyPosition) { GreenfootImage image = new GreenfootImage(10, 10); image.setColor(Color.GRAY); image.fillRect(0, 0, 10, 10); setImage(image); bodyPos = bodyPosition; } /** * Act - do whatever the SnakeBody wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { moveBody(); } /** * moveBody * moves the snake body */ public void moveBody() { SnakeWorld world = (SnakeWorld)getWorld(); snakeCoords = world.getBodyPosition(bodyPos); setLocation(snakeCoords.getX(), snakeCoords.getY()); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.*; /** * Write a description of class SnakeWorld here. * * @author (your name) * @version (a version number or a date) */ public class SnakeWorld extends World { public static final int DOT_SIZE = 10; public static final int MAX_DOTS = (600*400)/(DOT_SIZE*DOT_SIZE); private int snakeSize=4; private Point snakeCoords[] = new Point[MAX_DOTS]; //private int x[] = new int[MAX_DOTS]; //private int y[] = new int[MAX_DOTS]; int dX=1, dY=0; //Direction variables private final int SPEED = 1; private int directionX = SPEED; private int directionY; private Score score = new Score(); private int speed = 30; /** * Constructor for objects of class SnakeWorld. * */ public SnakeWorld() { // Create a new world with 600x400 cells with a cell size of 1x1 pixels. super(61, 41, 10); setUpCoords(); drawSnake(); placeFood(1); addObject(new WorldOutline(), 30, 20); addObject(score, 6, 2); Greenfoot.setSpeed(speed); } /** * upDateCoords * Updates the coordinates of the snake to its new spot as it moves on the screen */ public void updateCoords() { for(int i = snakeSize - 1; i > 0;i--) { snakeCoords[i].setX(snakeCoords[i-1].getX()); snakeCoords[i].setY(snakeCoords[i-1].getY()); } snakeCoords[0].setX(snakeCoords[0].getX() + directionX); snakeCoords[0].setY(snakeCoords[0].getY() + directionY); } /** * drawSnake * Draws the snake at its starting position */ public void drawSnake() { addObject(new SnakeHead(0), snakeCoords[0].getX(), snakeCoords[0].getY()); for(int i = snakeSize - 1; i > 0; i--) { addObject(new SnakeBody(i), snakeCoords[i].getX(), snakeCoords[i].getY()); } } /** * placeFood * Place a set amount of food in the game window * @param int amountOfFood */ public void placeFood(int amountOfFood) { for (int i = 0; i < amountOfFood; i++) { addObject(new Food(), Greenfoot.getRandomNumber(59)+1, Greenfoot.getRandomNumber(39)+1); } } /** * setUpCoords * sets up the snake coordinates at the start of the game */ public void setUpCoords() { snakeCoords[0] = new Point(getWidth() / 2, getHeight() / 2); for(int i = 1; i < snakeSize; i++) { snakeCoords[i]=new Point(snakeCoords[i-1].getX() - 1, snakeCoords[i-1].getY()); } } /** * addTail * adds another tail to the end of the snake */ public void addTail() { snakeCoords[snakeSize] = new Point(snakeCoords[snakeSize-1].getX(), snakeCoords[snakeSize-1].getY()); addObject(new SnakeBody(snakeSize), snakeCoords[snakeSize].getX(), snakeCoords[snakeSize].getY()); snakeSize++; score.updateScore(); speed++; Greenfoot.setSpeed(speed); } /** * keyPress * changes the direction of the snake based upon key presses */ public void keyPress() { if( Greenfoot.isKeyDown("up") && directionY != SPEED) { directionY = -SPEED; directionX = 0; } if( Greenfoot.isKeyDown("down") && directionY != -SPEED) { directionY = SPEED; directionX = 0; } if( Greenfoot.isKeyDown("left") && directionX != SPEED) { directionX = -SPEED; directionY = 0; } if( Greenfoot.isKeyDown("right") && directionX != -SPEED) { directionX = SPEED; directionY = 0; } } /** * getBodyPosition * returns the coordinates of the snake at the passed in body position * @param int bodyPosition */ public Point getBodyPosition(int bodyPosition) { return snakeCoords[bodyPosition]; } /** * die - ends the game */ public void die() { addObject(new GameOver(), getWidth() / 2, getHeight() / 2); Greenfoot.stop(); } /** * hitEdge - game over if you hit the side of the world */ public void hitEdge() { if(snakeCoords[0].getX() < 1 || snakeCoords[0].getX() > getWidth()-2 || snakeCoords[0].getY() < 1 || snakeCoords[0].getY() > getHeight()-2) { die(); } } public void act() { keyPress(); updateCoords(); hitEdge(); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.*; /** * Write a description of class SnakeHead here. // * * @author (your name) * @version (a version number or a date) */ public class SnakeHead extends Actor { private int bodyPos; private Point snakeCoords; private int temp = 0; /** * SnakeHead Constructor * Sets the image for snakeHead * @param int bodyPosition */ public SnakeHead(int bodyPosition ) { GreenfootImage image = new GreenfootImage(10, 10); image.setColor(Color.GREEN); image.fillRect(0, 0, 10, 10); setImage(image); } /** * Act - do whatever the SnakeHead wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { moveHead(); lookForFood(); hitBody(); } /** * moveHead * moves the head to the next position on the screen */ public void moveHead() { SnakeWorld world = (SnakeWorld)getWorld(); snakeCoords = world.getBodyPosition(0); setLocation(snakeCoords.getX(), snakeCoords.getY()); } /** * growTail * adds a tail segment to the snake and adds new food to the world */ public void growTail() { SnakeWorld world = (SnakeWorld)getWorld(); world.addTail(); world.placeFood(1); } /** * lookForFood * Looks for food. * If the snake finds food it eats the food */ public void lookForFood() { if (canSee(Food.class)) { eat(Food.class); growTail(); } } /** * hitBody - checks whether the snake tries to eat it's own body */ public void hitBody() { SnakeWorld world = (SnakeWorld)getWorld(); if(canSee(SnakeBody.class)) { world.die(); } } /** * canSee * looks for other objects the intersect with the snake * @param Class clss */ public boolean canSee(Class clss) { Actor actor = getOneObjectAtOffset(0, 0, clss); return actor != null; } /** * eat * eats the object and removes it from the screen * @param Class clss */ public void eat(Class clss) { Actor actor = getOneObjectAtOffset(0, 0, clss); if(actor != null) { getWorld().removeObject(actor); } } }