?? helkcraft.java
字號:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.util.*;
import java.util.Timer;
import java.awt.geom.*;
/**
* @version 0.0
* @author Liu Fangran
*/
class UnitManager {
LinkedList units = new LinkedList();
public UnitManager() {
}
public void createUnit(Unit unit) {
units.add(unit);
}
public void addUnitGroup(LinkedList list) {
units.addAll(list);
}
public void destoryUnit(Unit unit) {
units.remove(unit);
}
public void updateAll() {
ListIterator lit = units.listIterator();
Unit u;
while (lit.hasNext()) {
(u = (Unit)lit.next()).update();
}
}
public void showAll(Graphics g, Rectangle r) {
ListIterator lit = units.listIterator();
Unit u;
while (lit.hasNext()) {
u = (Unit)lit.next();
if (r.contains((int)(u.getX()), (int)(u.getY()))) {
u.show(g, r.getLocation());
}
}
}
public void miniShowAll(Graphics g, Point p, int scale) {
ListIterator lit = units.listIterator();
while (lit.hasNext()) {
((Unit)(lit.next())).miniShow(g, p, scale);
}
}
public LinkedList getUnitGroup() {
return units;
}
public Unit getUnitAt(Point p) {
ListIterator lit = units.listIterator();
Unit u;
while (lit.hasNext()) {
u = (Unit)(lit.next());
if(Math.sqrt((u.getX() - p.x) * (u.getX() - p.x) + (u.getY() - p.y) * (u.getY() - p.y)) < u.getSize().width / 2) {
return u;
}
}
return null;
}
}
/**
* @version 0.0
* @author Liu Fangran
*/
class UnitLayout {
public UnitLayout() {
}
static public LinkedList square(int n, Position p, int interval) {
Position pos = new Position(p);
LinkedList list = new LinkedList();
for(int i = 0; i < n; i++) {
pos.x = p.x;
for(int j = 0; j < n; j++) {
list.add(new MobileUnit(pos));
pos.x += interval;
}
pos.y += interval;
}
return list;
}
}
/**
* @version 0.0
* @author Liu Fangran
*/
class UnitControler {
LinkedList units = new LinkedList();
public UnitControler() {
}
public void addUnit(Unit unit) {
units.add(unit);
unit.setSelected(true);
}
public void removeUnit(Unit unit) {
if(units.remove(unit)) {
unit.setSelected(false);
}
}
public void removeAll() {
ListIterator lit = units.listIterator();
while(lit.hasNext()) {
((Unit)(lit.next())).setSelected(false);
lit.remove();
}
}
public void setUnitGroup(LinkedList units) {
removeAll();
ListIterator lit = units.listIterator();
this.units = units;
lit = units.listIterator();
Unit u;
while(lit.hasNext()) {
((Unit)(lit.next())).setSelected(true);
}
}
public void setUnitGroup(Unit u) {
removeAll();
units.add(u);
u.setSelected(true);
}
public void setUnitGroup(LinkedList units, Rectangle r) {
ListIterator lit = this.units.listIterator();
while(lit.hasNext()) {
((Unit)(lit.next())).setSelected(false);
}
lit = units.listIterator();
this.units = new LinkedList();
Unit u;
while(lit.hasNext()) {
u = (Unit)(lit.next());
if(r.contains((int)(u.getX()), (int)(u.getY()))){
this.units.add(u);
u.setSelected(true);
}
}
}
public void executeCommand(Command cmd) {
ListIterator lit = units.listIterator();
while(lit.hasNext()) {
((Unit)lit.next()).executeCommand(cmd);
}
}
}
/**
* @version 0.0
* @author Liu Fangran
*/
interface Unit {
public void setColor(Color c);
public Color getColor();
public double getX();
public double getY();
public Position getPosition();
public Dimension getSize();
public void setPosition(double x, double y);
public void setPosition(Position p);
public void setSize(Dimension d);
public void setSize(int w, int h);
public void setSelected(boolean s);
public boolean isSelected();
public void update();
public void show(Graphics g, Point p);
public void miniShow(Graphics g, Point p, int scale);
public void executeCommand(Command cmd);
}
/**
* @version 0.0
* @author Liu Fangran
*/
class Position {
public double x;
public double y;
public Position() {
}
public Position(double x, double y) {
this.x = x;
this.y = y;
}
public Position(Position p) {
x = p.x;
y = p.y;
}
public void setPosition(double x, double y) {
this.x = x;
this.y = y;
}
public void setPosition(Position p) {
x = p.x;
y = p.y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
}
/**
* @version 0.0
* @author Liu Fangran
*/
class MoveCommand implements Command {
Position desPos;
public MoveCommand(double x, double y) {
desPos = new Position(x, y);
}
public MoveCommand(Position p) {
desPos = new Position(p.x, p.y);
}
public double getX() {
return desPos.x;
}
public double getY() {
return desPos.y;
}
public Position getPosition() {
return desPos;
}
}
/**
* @version 0.0
* @author Liu Fangran
*/
interface Command {
}
/**
* @version 0.0
* @author Liu Fangran
*/
class MobileUnit implements Unit{
boolean isMove;
boolean isSlct;
Position curPos;
Position desPos;
double sclX;
double sclY;
Color clr = Color.BLUE;
Color miniClr = Color.BLUE;
static double vel = 2.0;
static double rngStop = 2.1;
static Dimension size = new Dimension(30,30); // selected size.
static Dimension sizeDraw = new Dimension(26, 26);
public MobileUnit() {
curPos = new Position(0.0, 0.0);
desPos = new Position(0.0, 0.0);
}
public MobileUnit(Position p) {
curPos = new Position(p);
desPos = new Position(p);
}
public MobileUnit(double x, double y) {
curPos = new Position(x, y);
desPos = new Position(x, y);
}
public void setColor(Color c) {
clr = c;
}
public Color getColor() {
return clr;
}
public boolean isMoving() {
return isMove;
}
public double getX() {
return curPos.x;
}
public double getY() {
return curPos.y;
}
public Position getPosition() {
return curPos;
}
public Dimension getSize() {
return size;
}
public void setPosition(double x, double y) {
curPos.setPosition(x, y);
}
public void setPosition(Position p) {
curPos.setPosition(p);
}
public void setSize(Dimension d) {
size.setSize(d);
}
public void setSize(int w, int h) {
size.setSize(w, h);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -