美国警察枪战合集:请问怎样用JAVA实现技能树

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 22:34:11
_______________________50:冰弹
_____________20:冰风暴_______60:冰封装甲
10:冰尖柱 ______40:暴风雪________70:碎冰甲
________________30:冰封球___________80:寒冰装甲
如上,谢谢.

写的很乱,勉强能看懂.
用二叉树就能实现.

public class SkillTree {
private class Node{
static final int UNDEF=0;
int key;
int value;
String name;
Node left;
Node right;

Node(int key,int value,String name){
this.key = key;
this.value = value;
this.name = name;
left = null;
right = null;
}
public String toString(){
return "("+name+","+value+")";
}
}

private Node root;

public SkillTree(){
root = null;
}

public void insert(int key,int value,String name){
Node newNode = new Node(key,value,name);
if(root == null){
root = newNode;
}else{
insertNode(root,newNode);
}
}
private Node getNode(int key) throws Exception{
Node result = root;
while(result.key != key){
if(result.value == 0){
return null;
}
if(key < result.key){
result = result.left;
}else{
result = result.right;
}
if(result == null){
throw new Exception("Can't find value by "+key);
}
}
return result;

}
public int getValue(int key) throws Exception{
return getNode(key).value;
}
private void insertNode(Node subtreeRoot,Node newNode){
Node current = subtreeRoot;
while(true){
if(newNode.key<current.key){ //go left
if(current.left == null){
current.left = newNode;
return;
}else{
current = current.left;
}
}else{ //go right
if(current.right == null){
current.right = newNode;
return;
}else{
current = current.right;
}
}
}
}

public void setPoint(String name,int point){
int key = getKey(name);
if(key == -1){
System.out.println("没有这个技能名称:"+name);
return;
}else{
try {
Node current = getNode(key);
if(current == null){
System.out.println("你还没有拥有这项技能."+name);
return;
}
if(point >=0){
current.value = point;
}else{
System.out.println("技能点不能为负.");
return;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}

public int getKey(String name){
if(name.equals("冰弹")){
return 50;
}else if(name.equals("冰风暴")){
return 20;
}else if(name.equals("冰封装甲")){
return 60;
}else if(name.equals("冰尖柱")){
return 10;
}else if(name.equals("暴风雪")){
return 40;
}else if(name.equals("碎冰甲")){
return 70;
}else if(name.equals("冰封球")){
return 30;
}else if(name.equals("寒冰装甲")){
return 80;
}else{
return -1;
}
}

public void view(Node subtreeRoot){
if(subtreeRoot !=null){
System.out.print(subtreeRoot+"[");
view(subtreeRoot.left);
System.out.print(",");
view(subtreeRoot.right);
System.out.print("]");
}else{
System.out.print("N");
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
SkillTree st = new SkillTree();
st.insert(st.getKey("冰弹"),0,"冰弹");
st.insert(st.getKey("冰风暴"),0,"冰风暴");
st.insert(st.getKey("冰封装甲"),0,"冰封装甲");
st.insert(st.getKey("冰尖柱"),0,"冰尖柱");
st.insert(st.getKey("暴风雪"),0,"暴风雪");
st.insert(st.getKey("碎冰甲"),0,"碎冰甲");
st.insert(st.getKey("冰封球"),0,"冰封球");
st.insert(st.getKey("寒冰装甲"),0,"寒冰装甲");
st.view(st.root);
System.out.println();
st.setPoint("冰风暴",5);
st.view(st.root);
}
}

强啊,佩服jayez:)

关注ing

一楼的说的不错