Hej alle!
- Har et problem med slick. Når jeg starter spillet, bliver de initRedAndBlueBall kørt uendeligt, eller, indtil den røde bold spawner i purpBall. Problemet ser uimiddelbart til at være her:
- public void initRedAndBlueBall() throws SlickException
- {
- // Makes sure the red and the blue ball aren't too close
- for(int i = 0; i <= amountOfEatenBalls; i++)
- {
- // Get random cordinates for the red and blue ball.
- randomRedX[i] = random.nextInt(550) + 24;
- randomRedY[i] = random.nextInt(350) + 24;
- randomBlueX = random.nextInt(550) + 24;
- randomBlueY = random.nextInt(350) + 24;
-
- // Initialize the new Redball with a picture.
- redball[i] = new Image("res/RedBall.png");
- // Draws the red ball on the screen.
- drawRedBall(randomRedX[i], randomRedY[i], redball[i]);
-
- if(isInTheRangeOf(randomRedX[i], randomBlueX, 30) == false)
- {
- System.out.println("The red and the blue ball have good positions");
- break;
- }
- else if(isInTheRangeOf(randomRedX[i], randomBlueX, 30) == true)
- {
- System.out.println("The red and the blue ball are to close!");
- System.out.println("Repositioning the red and blue ball");
- }
- }
- }
- Her er resten af min kode
Game.java
- package javagame;
-
- import org.newdawn.slick.*;
- import org.newdawn.slick.state.*;
-
- public class Game extends StateBasedGame
- {
-
- public static final String gamename = "Mini Game";
- public static final int menu = 0;
- public static final int play = 1;
- public static final int gameOver = 2;
- public static final int windowX = 600;
- public static final int windowY = 400;
-
- public Game(String gamename)
- {
- super(gamename);
- this.addState(new Menu(menu));
- this.addState(new Play(play));
- this.addState(new GameOver(gameOver));
- }
-
- public void initStatesList(GameContainer gc) throws SlickException
- {
- this.getState(menu).init(gc, this);
- this.getState(play).init(gc, this);
- this.enterState(menu);
- }
-
- public static void main(String[] args)
- {
- AppGameContainer appgc;
- try
- {
- appgc = new AppGameContainer(new Game(gamename));
- appgc.setDisplayMode(windowX, windowY, false);
- appgc.start();
- }
- catch(SlickException e)
- {
- e.printStackTrace();
- }
- }
-
- }
Menu.java
- package javagame;
-
- import org.lwjgl.input.Mouse;
- import org.newdawn.slick.*;
- import org.newdawn.slick.state.*;
- import org.newdawn.slick.MouseListener;
-
- public class Menu extends BasicGameState
- {
- Image PlayNow, PlayNowHover, ExitGame, ExitGameHover, PlayButton, ExitGameButton;
- int MousePosX;
- int MousePosY;
-
- public Menu(int state) {}
-
- public void init(GameContainer gc, StateBasedGame sbg) throws SlickException
- {
- // Billederne er 125x26
- PlayNow = new Image("res/PlayNow.png");
- PlayNowHover = new Image("res/PlayNowHover.png");
- ExitGame = new Image("res/ExitGame.png");
- ExitGameHover = new Image("res/ExitGameHover.png");
-
- PlayButton = PlayNow;
- ExitGameButton = ExitGame;
- }
-
- public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException
- {
- // Framet er 600x400
- g.drawString(MousePosX + ", " + MousePosY, 500, 10);
- g.drawLine(0, 26, 600, 26);
-
- g.drawImage(PlayButton, 200, 100);
- g.drawImage(ExitGameButton, 200, 150);
-
- g.drawString("You move with the arrowkeys.", 200, 200);
- g.drawString("There's 1 rule:", 200, 215);
- g.drawString("Don't eat the red balls!", 200, 230);
- g.drawString("But you can enjoy the blue ones :- P", 200, 245);
- }
-
- public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException
- {
- Input input = gc.getInput();
- MousePosX = input.getMouseX();
- MousePosY = input.getMouseY();
-
- // PlayNow Hover or Normal
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 100 && MousePosY < 126)
- {
- PlayButton = PlayNowHover;
- }
- else
- {
- PlayButton = PlayNow;
- }
- //ExitGame Hover or Normal
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 150 && MousePosY < 176)
- {
- ExitGameButton = ExitGameHover;
- }
- else
- {
- ExitGameButton = ExitGame;
- }
-
- // Now the buttons have a function
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 100 && MousePosY < 126)
- {
- if(Mouse.isButtonDown(0))
- {
- sbg.enterState(1);
- }
- }
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 150 && MousePosY < 176)
- {
- if(Mouse.isButtonDown(0))
- {
- System.exit(0);
- }
- }
-
-
- }
-
- public int getID()
- {
- return 0;
- }
- }
Play.java
- package javagame;
-
- import org.newdawn.slick.*;
- import org.newdawn.slick.state.*;
-
- import java.util.Random;
-
- public class Play extends BasicGameState
- {
- Image ball, blueball;
- Image[] redball;
- Animation roll;
-
- int[] duration = {200, 200};
- float defBallPosX = 300; // DEFAULT
- float defBallPosY = 200; // DEFAULT
- float ballPosX = 300;
- float ballPosY = 200;
- int MousePosX;
- int MousePosY;
- Random random;
- float[] randomRedX; // X for the RedBall.png
- float[] randomRedY; // Y for the RedBall.png
- float randomBlueX; // X for the BlueBall.png
- float randomBlueY; // Y for the BlueBall.png
-
- static int amountOfEatenBalls;
-
- boolean blueAndRedAreNotToClose;
-
- public Play(int state)
- {
-
- }
-
- public void init(GameContainer gc, StateBasedGame sbg) throws SlickException
- {
- ball = new Image("res/PurpBallNorm.png"); // 25x25 px
- Image[] images = {ball, ball};
-
- redball = new Image[50];
- blueball = new Image("res/BlueBall.png");
-
- roll = new Animation(images, duration, false);
-
- random = new Random();
-
- randomRedX = new float[50];
- randomRedY = new float[50];
-
- amountOfEatenBalls = 0;
- }
-
- public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException
- {
- // The Window is 600x400
- g.drawString(MousePosX + ", " + MousePosY, 500, 10);
-
- g.drawLine(0, 26, Game.windowX, 26); // Ceiling
- g.drawLine(1, 26, 1, Game.windowY); // Left Wall
- g.drawLine(Game.windowX - 2, 26, Game.windowX - 2, Game.windowY - 2); // Right Wall
- g.drawLine(1, Game.windowY - 2, Game.windowX - 2, Game.windowY - 2); // Floor
-
- roll.draw(ballPosX, ballPosY);
-
- initRedAndBlueBall();
- }
-
- public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException
- {
- Input input = gc.getInput();
- MousePosX = input.getMouseX();
- MousePosY = input.getMouseY();
-
- if(input.isKeyDown(Input.KEY_UP))
- ballPosY -= delta * .1f;
- else if(input.isKeyDown(Input.KEY_DOWN))
- ballPosY += delta * .1f;
- else if(input.isKeyDown(Input.KEY_LEFT))
- ballPosX -= delta * .1f;
- else if(input.isKeyDown(Input.KEY_RIGHT))
- ballPosX += delta * .1f;
-
- blueBallTouch();
-
- for(int i = 0; i <= amountOfEatenBalls; i++)
- {
- if(isInTheRangeOf(ballPosX, randomRedX[i], 25) == true && isInTheRangeOf(ballPosY, randomRedY[i], 25) == true)
- {
- System.out.println("Player has eaten a red ball!");
- sbg.enterState(2);
- }
- }
-
- // Makes sure the ball can't run out of the window
- if(ballPosX <= 2)
- {
- ballPosX += delta * .1f;
- }
- else if(ballPosX >= Game.windowX - 27)
- {
- ballPosX -= delta * .1f;
- }
- else if(ballPosY <= 26)
- {
- ballPosY += delta * .1f;
- }
- else if(ballPosY >= Game.windowY - 27)
- {
- ballPosY -= delta * .1f;
- }
- }
-
- public int getID()
- {
- return 1;
- }
-
- public boolean isInTheRangeOf(float x, float y, float range)
- {
- float a = 0;
- float b = 0;
-
- if(x > y)
- {
- a = x;
- b = y;
- }
- else if(y > x)
- {
- b = x;
- a = y;
- }
-
- if((a - b) <= range)
- {
- return true;
- }
- else if((a - b) >= range)
- {
- return false;
- }
- return true;
- }
-
- public void initRedAndBlueBall() throws SlickException
- {
- // Makes sure the red and the blue ball aren't too close
- for(int i = 0; i <= amountOfEatenBalls; i++)
- {
- // Get random cordinates for the red and blue ball.
- randomRedX[i] = random.nextInt(550) + 24;
- randomRedY[i] = random.nextInt(350) + 24;
- randomBlueX = random.nextInt(550) + 24;
- randomBlueY = random.nextInt(350) + 24;
-
- // Initialize the new Redball with a picture.
- redball[i] = new Image("res/RedBall.png");
- // Draws the red ball on the screen.
- drawRedBall(randomRedX[i], randomRedY[i], redball[i]);
-
- if(isInTheRangeOf(randomRedX[i], randomBlueX, 30) == false)
- {
- System.out.println("The red and the blue ball have good positions");
- break;
- }
- else if(isInTheRangeOf(randomRedX[i], randomBlueX, 30) == true)
- {
- System.out.println("The red and the blue ball are to close!");
- System.out.println("Repositioning the red and blue ball");
- }
- }
- }
-
- public void drawRedBall(float x, float y, Image image)
- {
- Graphics g = new Graphics();
- g.drawImage(image, x, y);
- }
-
- public void blueBallTouch() throws SlickException
- {
- if(isInTheRangeOf(ballPosX, randomBlueX, 25) == true && isInTheRangeOf(ballPosY, randomBlueY, 25) == true)
- {
- amountOfEatenBalls++;
-
- initRedAndBlueBall();
- }
- else
- {
-
- }
- }
-
- public static int getAmountOfEatenBalls()
- {
- return amountOfEatenBalls;
- }
-
- }
GameOver.java
- package javagame;
-
- import org.lwjgl.input.Mouse;
- import org.newdawn.slick.*;
- import org.newdawn.slick.state.*;
-
- public class GameOver extends BasicGameState
- {
- Image ExitGame, ExitGameHover, ExitGameButton;
- int MousePosX;
- int MousePosY;
-
-
- public GameOver(int state)
- {
-
- }
-
- public void init(GameContainer gc, StateBasedGame sbg) throws SlickException
- {
- ExitGame = new Image("res/ExitGame.png");
- ExitGameHover = new Image("res/ExitGameHover.png");
-
- ExitGameButton = ExitGame;
- }
-
- public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException
- {
- g.drawImage(ExitGameButton, 200, 100);
- g.drawString("You've eaten: " + Play.getAmountOfEatenBalls() + " balls!", 200, 190);
- }
-
- public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException
- {
- Input input = gc.getInput();
- MousePosX = input.getMouseX();
- MousePosY = input.getMouseY();
-
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 100 && MousePosY < 126)
- {
- ExitGameButton = ExitGameHover;
- }
- else
- {
- ExitGameButton = ExitGame;
- }
-
- if(MousePosX > 200 && MousePosX < 325 && MousePosY > 100 && MousePosY < 126)
- {
- if(Mouse.isButtonDown(0))
- {
- System.exit(0);
- }
- }
- }
-
- public int getID()
- {
- return 2;
- }
-
- }