📄 dataobject.java
字号:
/*
* DataObject.java
*
* Created on 14 October 2006, 10:19
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package wpc.data;
import java.awt.Graphics;
import java.awt.Color;
/**
*
* @author craig
*/
public abstract class DataObject {
int startX, startY, endX, endY;
Color color;
wpc.MainFrame mainFrame;
DataObject[] data;
/** Creates a new instance of DataObject */
public DataObject(wpc.MainFrame mainFrame) {
this.mainFrame = mainFrame;
}
abstract public void createData(int number);
abstract public void draw(Graphics g);
public void setData(DataObject[] data){
this.data = data;
}
public void splitWorld(){
/* Rules for splitting:
* Spliting all space by:
* 1: all space
* 2: 1 = 0.0x,0.0y - 0.5x, 1.0y
* 2 = 0.5x,0.0y - 1.0x, 1.0y
* 3: 1 = 0.0x,0.5y - 0.5x, 1
* 2 =
* 3 =
* 4:
*
*/
if(data!=null){/*
/* Steps to split the world!
* 1: Calculate the number of levels.
* Using dataobject.length+1, Square root this, and then the number
* of levels is the floor of this.
*
* 2: Calculate the number of splits per level
* Using the celing of remainingObjects/remainingLevels
*
* 3: Calculate the Y position of the objects
* LevelSpaceY = EndY/numberOfLevels;
* startY = levelSpaceY*(remaingingLevels-1);
* EndY = levelSpaceY*(remaingLevels)
*
* 4: Calculate the X position of the objects
* LevelSpaceX = EndX/numberOfObjectsThisLevel;
* Using startX = LevelSpaceX*n
* endX = LevelSpaceX*(n+1)
*
*
*
*
*/
//Calculate number of levels
int numberOfObjects = data.length;
int remainingObjects = numberOfObjects;
int currentObject = 0;
int numberOfLevels = (int)Math.floor(Math.sqrt(numberOfObjects));
int remainingLevels = numberOfLevels;
int numberOfObjectsThisLevel;
int levelSpaceY;
int levelSpaceX;
for(int i = 0; i < numberOfLevels; i++){
//Calculate number of splits in this level
numberOfObjectsThisLevel = (int)Math.ceil(remainingObjects/remainingLevels);
levelSpaceY = endY/numberOfLevels;
levelSpaceX = endX/numberOfObjectsThisLevel;
for(int n = 0; n < numberOfObjectsThisLevel; n++){
//Devide the space between each split
if(currentObject<=data.length){
try{
data[currentObject].setYPOS(levelSpaceY*(remainingLevels-1), levelSpaceY*remainingLevels);
data[currentObject].setXPOS(levelSpaceX*n, levelSpaceX*(n+1));
//Recersive call here:
data[currentObject].splitWorld();
}catch(java.lang.ArrayIndexOutOfBoundsException e){
System.out.println("Error");
}
}
currentObject++;
remainingObjects--;
}
remainingLevels--;
}
}
}
//SETTERS
public void setXPOS(int startX, int endX){
this.startX = startX;
this.endX = endX;
}
public void setYPOS(int startY, int endY){
this.startY = startY;
this.endY = endY;
}
public void setColour(Color color){
this.color = color;
}
//GETTERS
public int getStartX(){
return startX;
}
public int getStartY(){
return startY;
}
public int getEndX(){
return endX;
}
public int getEndY(){
return endY;
}
public void calcYear(){
if(data!=null){
for(int i = 0; i<data.length; i++){
data[i].calcYear();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -