版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44001965/article/details/87920318
模拟王者荣耀中多个英雄同时攻击一个水晶,直到水晶死亡,游戏胜利
1,先建一个英雄抽象类Hero类,说明英雄的特征。
package com.aaa.Hero;
import com.aaa.skill.ISkill;
/**
* className:Hero
* discription:英雄抽象类
* author:zz
* createTime:2018-11-09 17:21
*/
public abstract class Hero {
//英雄名字
private String heroName;
//技能接口
private ISkill iSkill;
//英雄自我介绍
public abstract void display();
//英雄普通攻击
public abstract void normalAttack();
//一次普攻的伤害值
private int heroHeart;
//英雄使用技能
public String getHeroName() {
return heroName;
}
public void setHeroName(String heroName) {
this.heroName = heroName;
}
public ISkill getiSkill() {
return iSkill;
}
public void setiSkill(ISkill iSkill) {
this.iSkill = iSkill;
}
public int getHeroHeart() {
return heroHeart;
}
public void setHeroHeart(int heroHeart) {
this.heroHeart = heroHeart;
}
public void skill(){
iSkill.useSkill();
}
}
2,建立一个基地(单例类)Base类
package com.aaa.Hero;
/**
* className:Base
* discription:基地(单例类)
* author:zz
* createTime:2018-11-09 18:10
*/
public class Base {
private Base(){}
private static Base base=null;
public static void setBase(Base base) {
Base.base = base;
}
public int getBaseLife() {
return baseLife;
}
public void setBaseLife(int baseLife) {
this.baseLife = baseLife;
}
public boolean isOver() {
return over;
}
public void setOver(boolean over) {
this.over = over;
}
public synchronized static Base getBase(){
if(base==null){
base=new Base();
}
return base;
}
private int baseLife=2600;
private boolean over=false;
}
3,建立一个技能的接口ISkill接口
package com.aaa.skill;
/**
* 技能接口
*/
public interface ISkill {
/**
* 释放技能
*/
public abstract void useSkill();
}
4,写两个技能类实现技能接口Jipao类和Kuangbao类
package com.aaa.skill;
/**
* className:JiPao
* discription:疾跑类
* author:zz
* createTime:2018-11-09 17:19
*/
public class JiPao implements ISkill{
@Override
public void useSkill() {
System.out.println("使用疾跑技能,10秒内提高移速30%!");
}
}
package com.aaa.skill;
/**
* className:KuangBao
* discription:狂暴类
* author:zz
* createTime:2018-11-09 17:20
*/
public class KuangBao implements ISkill{
@Override
public void useSkill() {
System.out.println("使用狂暴技能,5秒内提高攻速50%");
}
}
5,写两个英雄类,继承英雄的抽象类Huangzhong类和LiBai类
package com.aaa.Hero;
/**
* className:HuangZhong
* discription:
* author:zz
* createTime:2018-11-09 18:15
*/
public class HuangZhong extends Hero{
public HuangZhong(){
super.setHeroName("黄忠");
super.setHeroHeart(60);
}
@Override
public void display() {
System.out.println("让你尝尝我的大炮的滋味吧!");
}
@Override
public void normalAttack() {
System.out.println("pongpongpong~~~");
}
}
package com.aaa.Hero;
/**
* className:LiBai
* discription:李白类
* author:zz
* createTime:2018-11-09 17:28
*/
public class LiBai extends Hero{
public LiBai(){
super.setHeroName("李白");
super.setHeroHeart(120);
}
//英雄自我介绍
@Override
public void display() {
System.out.println("你的剑,就是我的剑!");
}
//英雄普通攻击
@Override
public void normalAttack() {
System.out.println("锵锵锵~~~刺了一剑!");
}
}
6,写一个基地的测试类BaseTest类
package com.aaa.test;
import com.aaa.Hero.*;
import com.aaa.skill.JiPao;
import com.aaa.skill.KuangBao;
/**
* className:BaseTest
* discription:
* author:zz
* createTime:2018-11-09 18:18
*/
public class BaseTest {
public static void main(String[] args) {
System.out.println("游戏即将开始,请选择您的英雄!");
new Thread(new Runnable() {
@Override
public void run() {
Hero hero=new LiBai();
System.out.println("您选择了英雄"+hero.getHeroName());
hero.display();
hero.setiSkill(new JiPao());
Base base=Base.getBase();
destroyBase(hero,base);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
Hero hero=new HuangZhong();
System.out.println("您选择了英雄"+hero.getHeroName());
hero.display();
hero.setiSkill(new KuangBao());
Base base=Base.getBase();
destroyBase(hero,base);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
Hero hero=new LvBu();
System.out.println("您选择了英雄"+hero.getHeroName());
hero.display();
hero.setiSkill(new KuangBao());
Base base=Base.getBase();
destroyBase(hero,base);
}
}).start();
}
private static void destroyBase(Hero hero, Base base) {
System.out.println("英雄["+hero.getHeroName()+"]伤害值为"+hero.getHeroHeart());
hero.skill();
while(base.getBaseLife()>0){
synchronized (base){
if(!base.isOver()){
base.setBaseLife(base.getBaseLife()-hero.getHeroHeart());
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(base.getBaseLife()>0){
System.out.println("["+hero.getHeroName()+"]攻击了水晶,水晶剩余生命值为"+base.getBaseLife());
}else{
base.setOver(true);
System.out.println("["+hero.getHeroName()+"]摧毁了水晶,游戏结束!");
}
}
}
}
}
}
7,写一个英雄的测试类HeroTest类
package com.aaa.test;
import com.aaa.Hero.Hero;
import com.aaa.Hero.LiBai;
import com.aaa.skill.JiPao;
import com.aaa.skill.KuangBao;
/**
* className:HeroTest
* discription:
* author:zz
* createTime:2018-11-09 17:31
*/
public class HeroTest {
public static void main(String[] args) {
// System.out.println("游戏开始,全军出击!!!");
Hero hero=new LiBai();
System.out.println("您选择了["+hero.getHeroName()+"]英雄"+" ");
hero.display();
System.out.println("["+hero.getHeroName()+"]英雄的伤害值:"+hero.getHeroHeart());
System.out.println("游戏开始,全军出击!");
hero.setiSkill(new JiPao());
hero.normalAttack();
hero.skill();
}
}
然后运行测试多个英雄同时攻击水晶。