日期:2014-05-20  浏览次数:20708 次

一个小游戏问题,大虾请帮我看看。谢谢
用JAVA抽象类实现:
战士打怪,战士分1级2级3级,怪也分1级2级3级,不同级别的战士打怪会有不同效果,比如1级战士打1级怪,打掉1点HP(生命值),1级战士打2级怪打掉0。5HP,1级战士打3级怪,MISS,
打不掉HP,2级战士打1级怪,打掉2点HP,打2级怪打掉1点HP,打3级怪,打0。5点HP,3级战士打1级怪,打掉3点HP,打2级怪,打掉2点HP,打3级怪,打掉1点HP;战士打怪,怪还击,1级怪打1级战士打掉1点HP,以次类推,和战士打怪一样。直到有一方HP减为O为止。不用画面。只写这个过程的算法,谢谢
哪位大虾帮着给做一下,感激!

------解决方案--------------------
http://blog.csdn.net/infon/archive/2007/04/19/1571190.aspx
摘抄部分如下,不过这是一个spring的一个例子,不过 LZ可以思想还是可以借用的

5.2.6一个简单的回合格斗小游戏示例
下面,我们使用一个简单的回合格斗的小游戏,来演示AspectJ的应用。这个示例主要设计了一个战士Soldier类,这个类包括发动攻击、治疗、躲避、移动等功能。另外有一个充当客户端的主程序MainTest,里面的功能就是让两个战士回合制互相攻击,直到一个被倒下。

核心类Soldier的源码如下:

publicclass Soldier {

private String name;

privateinthealth=100;

privateintdamage=10;

privateintx=10;

privateinty=10;

//攻击其它角色

publicboolean attack(Soldier target){

boolean ret=false;

if(!target.dodge())//目标是否躲闪成功

{

target.setHealth(target.getHealth()-this.damage);

ret=true;

}

move(); //移动一下

treat();//冶我疗伤

return ret;

}

publicvoid move()

{

this.x+=getRandom(5);

this.y+=getRandom(5);

}

//躲避x及y随机变动,成功率为50%

publicboolean dodge()

{

return getRandom(10)%2==0;

}

//治疗,具有一定成功的机会,可以提高生命值0-20点

publicvoid treat()

{

if(canTreat())

this.health+=getRandom(20);

}

publicboolean canTreat()

{

return getRandom(10)/2==0;

}



privateint getRandom(int seed)

{

return RandomUtil.getRandomValue(seed);

}



//getter及setter方法

publicint getHealth() {

returnhealth;

}

publicvoid setHealth(int health) {

this.health = health;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

publicint getX() {

returnx;

}

publicvoid setX(int x) {

this.x = x;

}

publicint getY() {

returny;

}

publicvoid setY(int y) {

this.y = y;

}

publicint getDamage() {

returndamage;

}

publicvoid setDamage(int damage) {

this.damage = damage;

}

}

Soldier引用了一个随机数生成工具类RandomUtil,用于模拟一定的发生概率,代码如下:

publicclass RandomUtil {

privatestatic java.util.Random random=new java.util.Random();

publicstaticint getRandomValue(int seed)

{

returnrandom.nextInt(seed);

}

}

然后就是使用Soldier的客户端程序MainTest,这里是一个简单的控制台程序,代码如下:

publicclass MainTest {

publicstaticvoid main(String[] args) {

Soldier p1=new Soldier();

p1.setName( "角色1 ");

Soldier p2=new Soldier();

p2.setName( "角色2 ");

int i=0;

while(p1.getHealth()> 0 && p2.getHealth()> 0)

{

p2.attack(p1);

p1.attack(p2);

i+=2;

}

System.out.println( "战斗次数: "+i);