I am trying to create a basic falling sand game in java, I have each particle store it's X and Y in a Point array. Each Point array is specific to it's element, so sand and water are two different arrays, what i would like to know is how do i check my sand array against itself to see if two particles have the same position, and if so, move them?
This is my Sand Class
package testingzone;
import java.awt.Point;
import java.util.Stack;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
public class Sand {
public Graphics g = new Graphics();
public float sizeX = 1;
public float sizeY = 1;
public int speed = 1;
public String BaseState = "fall";
public String state = "fall";
public String Name = "Sand";
public Point[] point = new Point[(600 * 800)];
public Point[] pointcheck = new Point[(600 * 800)];
public int num = 0;
public boolean check = false;
public org.newdawn.slick.Color c = org.newdawn.slick.Color.yellow;
public void drawParticle(float x, float y) throws SlickException{
g.setColor(c);
g.drawRect(x, y, sizeX, sizeY);
}
public void createParticle() throws SlickException{
if(state == "fall"){
fall(point);
} else {
}
if(state == "stay"){
stay(point);
} else {
}
}
public void fall(Point[] point) throws SlickException{
for (int index = 0; index < point.length; index++) {
Point p = point[index];
if (p != null) {
if (p.y >= 598) {
drawParticle(point[index].x, 598);
} else {
drawParticle(p.x, p.y);
p.y += speed;
}
}
}
}
public void stay(Point[] point) throws SlickException{
for (int index = 0; index < point.length; index++) {
Point p = point[index];
if (p != null) {
drawParticle(p.x, p.y);
}
}
}
}
And this is a simplified version of my main class
package testingzone;
import java.awt.Point;
import org.lwjgl.input.Mouse;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class Control extends BasicGameState {
public static final int ID = 2;
public Sand s = new Sand();
public Run run = new Run();
int maxnum = (800 * 600);
int pressedX;
int pressedY;
int num = 0;
String Build = "1.4";
String Element = "sand";
String name;
public boolean endgame = false;
public void init(GameContainer container, StateBasedGame game) throws SlickException{
}
public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
if(Element == "sand"){
s.createParticle();
name = s.Name;
}
g.setColor(Color.yellow);
g.drawRect(240, 10, 15, 15);
g.fillRect(240, 10, 15, 15);
if(Element == "sand"){
// g.setColor(Color.white);
// g.drawRect(235, 5, 25, 25);
g.drawLine(235, 35, 260, 35);
}
g.setColor(Color.white);
g.drawString("Open Sand", 700, 0);
g.drawString("Build: " + Build, 700, 15);
g.drawString("Total Pixels: " + num, 10, 25);
g.drawString("Current Type: " + name, 10, 40);
g.drawString("Mouse X: " + Mouse.getX(), 10, 55);
g.drawString("Mouse Y: " + Mouse.getY(), 10, 70);
}
public void update(GameContainer container, StateBasedGame game, int delta) {
if(endgame == true){
container.exit();
}
}
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
pressedX = newx;
pressedY = newy;
num = num + 1;
if(Element == "sand"){
s.num = s.num + 1;
s.point[s.num] = new Point(pressedX, pressedY);
s.pointcheck[s.num] = new Point(pressedX, pressedY);
}
}
public void keyPressed(int key, char c) {
if (key == Input.KEY_ESCAPE) {
endgame = true;
}
if (key == Input.KEY_1) {
Element = "sand";
}
public int getID() {
return ID;
}
}