2D葫芦娃v1
Main函数(上帝之手)
上帝先创造世界:一个20*20的方形舞台。
public static void main(String args[]){
int N = 20;
Stage stage = new Stage(N);
然后创造生物:7个葫芦兄弟brothers
、12只小妖怪们monsters
、1个爷爷grandpa
和1只蛇精snake
。
//Create Huluwa Brothers
HuLuWa[] brothers = new HuLuWa[7];
for (int i = 0; i<brothers.length; i++){
brothers[i] = new HuLuWa(RANK.values()[i], COLOR.values()[i]);
}
//Create Monsters
Creature[] monsters = new Creature[12];
for ( int i = 0; i < monsters.length; i++){
if ( i == 0 ) monsters[i] = new Scorpion();
else{
monsters[i] = new LouLuo();
}
}
//Create Grandpa
Grandpa grandpa = new Grandpa();
//Create Snake
Snake snake= new Snake();
上帝将世界舞台的左半侧划分给葫芦兄弟阵营,让他们排成长蛇阵型;然后,将世界右半侧划分给妖怪阵营,让小妖怪们以蝎子精为首排成箭阵。
CreatureQueue hulu_q = new CreatureQueue(brothers, stage.get_space(), 1, N/2-1, 0, N);
CreatureQueue mst_q = new CreatureQueue(monsters, stage.get_space(), N-2,N/2, 0, N);
Pattern ls_p= new LongSnakePattern();
ls_p.Reform(hulu_q);
Pattern arrow_p = new ArrowPattern();
arrow_p.Reform(mst_q);
上帝把爷爷和蛇精放在各自势力范围的最后方,让他们加油鼓劲。
grandpa.set_pos(stage.get_space()[N/2][0]);
snake.set_pos(stage.get_space()[N/2][N-1]);
展示舞台,上帝觉得不是很满意。
stage.printStage();
于是让妖怪们又变换成了新月阵型,展示舞台,上帝觉得很满意。
Pattern crescent_p = new CrescentPattern();
crescent_p.Reform(mst_q);
stage.printStage();
位置相关类
1. Stage
舞台类
- 成员变量
Position[][] space
二维数组用于存储程序运行的二维空间,space[y][x]存储坐标为(x,y)的Position - 成员函数
Stage(int N);
初始化舞台
public void printStage();
打印舞台
2. Position
位置类
- 成员变量
private boolean avail;
private Creature holder;
private Coord coord;
Coord
类型有x,y两个成员,代表坐标
- 成员函数
public void put_in(Creature creature);
放入生物
public void clear_pos();
清空该位置
public Creature get_holder();
获取当前坐标
public boolean get_avail();
获取当前生物
public Coord get_coord();
获取位置是否可用
生物相关类
1. 抽象类Creature
- 成员变量
protected Position pos
每个生物都有一个位置,初始为空 - 成员函数
public boolean set_pos(Position p)
普通方法,所有生物有关位置设置的方法都是相同的
public Position get_pos()
普通方法,获得生物的位置
public abstract String show()
抽象方法,显示生物信息
public abstract String get_symbol()
抽象方法,返回生物的代表符号,用于打印舞台的显示
2. 比较接口Comparable
public boolean BiggerThan(Comparable another);
对生物比较行为的抽象。
3. HuLuWa
葫芦娃类
- 成员变量
private RANK rank;
private COLOR color;
在Creature
抽象类的基础上,增加color
rank
属性
- 成员函数
public boolean BiggerThan(Comparable another);
根据rank
比较大小
public String get_symbol();
代表符号为颜色,如红
4. 其他生物子类
Scorpion
蝎子精类,代表符号为蝎
Snake
蛇精类,代表符号为蛇
LouLuo
小喽啰类,代表符号为喽
Grandpa
爷爷类,代表符号为爷
移动排队类
1. CreatureQueue
生物队列类
- 将一组生物对象集合起来,主要作用使将生物类
Creature
与舞台类Stage
联结起来,是阵型变换的基本单位。 - 成员变量
private Position[][] space;
舞台空间,初始化时将当前舞台空间代入队列之中
private Creature[] creatures;
一维数组,代表被操作生物队列
private int bound_x1;
private int bound_x2;
private int bound_y1;
private int bound_y2;
规定生物队列可活动的矩形范围, bound_x1 < bound_x2
则代表队列头部朝向右侧,队列在舞台左半场活动;反之头部朝向左侧,在舞台右半场活动
- 成员函数
主要定义了有关获取生物数组、舞台空间、范围等属性的方法
public Creature[] get_creatures();
public Position[][] getSpace();
public int getBound_x1();
public int getBound_x2()
public int getBound_y1();
public int getBound_y2();
2. 抽象类Pattern
- 对于排列阵型行为的抽象
- 成员函数
public void Reform(CreatureQueue queue);
普通方法,对一个生物队列进行阵型排列;调用get_basic_pattern(int num)
获得num
大小的用Coord
一维数组表示基本阵型,再根据queue
的活动范围等,在对应的舞台空间上移动生物,排列阵型。
public abstract Coord[] get_basic_pattern(int num)
抽象方法,根据num
大小生成对应的基本阵型,返回值为坐标Coord
的一维数组,下标为0的位置对应"将领(鞋子)"的坐标。
2. 具体阵型子类
- 对于每一个阵型子类,需要定义不同的get_basic_pattern(int num)。
LongSnakePattern
长蛇阵
BalancePattern
衡轭阵
ArrowPattern
箭形阵
ScalePattern
鱼鳞阵
SquarePattern
方阵
WingPattern
翼阵
EchelonPattern
雁形阵
CrescentPattern
偃月阵