这是我大二那时候写的一个程序,那时候刚上完老师说的java抽象类的课,老师打了个比方,具体的忘了,大概说英雄联盟里面的游戏人物,都是继承一个基类的模型,每个英雄都是拥有攻击、防御等相同的操作,但是每个攻击操作的技能效果又是不一样的,这就是抽象。每个英雄继承了基类的攻击防御方法,但是在具体的英雄实现类重写了原来的抽象方法。
听完老师的课,感触特别多,好像英雄联盟也是这么回事,只是动画效果多了一些,以及有一些人物位置碰撞检测。那时候感觉自己好像也能写一个出来。于是下课回去就开始写下这个程序

  1. 首先,先写一个抽象的英雄基类 BaseHero.java
    1)包含了一些英雄的基础属性,比如姓名、描述、攻击力、防御力、敏捷力等
    2)抽象出英雄的基本操作方法,比如每个英雄有4个技能方法、普通攻击、反击方法
    3)基类代码
/*属性:* 名称name,ID,血HP,基础攻击力ATT,基础防御力DEF,敏捷DEX,头像head,形象body* 技能1名称sname1,技能2名称sname2,技能3名称sname3,技能4名称sname4,* 技能1描述describe_skill1,技能2描述describe_skill2,技能3描述describe_skill3,技能4描述describe_skill4* 英雄描述describe_hero,运气值luck*//*** 抽象方法:* skill1()技能1,skill2()技能2,skill3()技能3,Skill4()技能4* 攻击attack(),反击defend(),isDodge()是否闪避*/
public abstract class BaseHero {String name;  //名称int ID;double HP;    //血量int ATT;      //基础攻击力ATTdouble DEF;   //基础防御力int DEX;      //敏捷String myluck;//运气值描述,一般、良好、优秀String headpath;//头像图片String bodypath;//身体图片String sname1;//技能1String sname2;//技能2String sname3;//技能3String sname4;//技能4String describe_skill1;//技能1描述String describe_skill2;//技能2描述String describe_skill3;//技能3描述String describe_skill4;//技能4描述String describe_hero;//英雄描述public static int luck;//运气值double lastHP;public String tip ;//提示伤害信息int blue;//英雄蓝总量boolean blood;//回血还是掉血标志double maxHP;//最大血量boolean noDodge=false;/** get、set方法*/public String getName() {return name;}public void setName(String name) {this.name = name;}....../** 攻击防御方法*/public abstract void attack(int skill,BaseHero enemy);
//  public abstract void defend(BaseHero enemy);public abstract void skill1(BaseHero enemy);public abstract void skill2(BaseHero enemy);public abstract void skill3(BaseHero enemy);public abstract void skill4(BaseHero enemy);public abstract boolean isDodge(BaseHero enemy);
}
  1. 继承基类的英雄
    在构造函数里面初始化基本属性,以及重写基类的抽象方法
public Xinlin(){this.name="新林" ;this.ID = 1364;this.HP = 850;this.maxHP=HP;this.ATT = 80;      this.DEF = 18;     this.DEX = 72;   this.blue = 300;this.sname1 = "普通攻击";this.sname2 = "窃魂剑";this.sname3 = "凌波微步";this.sname4 = "无敌连环斩";this. describe_skill1 = "技能详解:普通攻击,造成一定的物理伤害";this.describe_skill2 = "技能详解:耗蓝45,华丽的剑法,有效迷惑敌人造成一定物理伤害,并使敌人防御力降低2";this.describe_skill3 = "技能详解:耗蓝25,主动释放敏捷永久提升5,敏捷最高提升到100,被动敌人闪避率格外降低10";this.describe_skill4 = "技能详解:耗蓝160,大招,在高速状态下(敏捷必须达到90才可以使用),对敌人造成多段(3-6)连环斩,每段造成较大伤害伤害";this.describe_hero = "人物介绍:时而话唠时而寡言,好静,追求平凡,英雄定位为高敏捷,刺客型英雄";this.myluck="良好";headpath="image\\"+"xlhead.png";bodypath="image\\"+"xlbody.png"; }
//技能1
public void skill1(BaseHero enemy) {// TODO Auto-generated method stubblood=true;//掉血BaseHero.luck=(int)(Math.random()*10);//运气值随机数enemy.setLastHP(enemy.getHP());//重置上一次血量if((BaseHero.luck<2||isDodge(enemy))&&!noDodge){tip="普通攻击,"+enemy.getName()+"运气太好了,闪开了这次攻击";}else if(BaseHero.luck>7){enemy.setHP(enemy.getHP()-(ATT*2+BaseHero.luck*5)*(1-enemy.getDEF()/100));tip=name+"状态不错,使出了会心一击,造成"+enemy.getName()+(int)(enemy.getLastHP()-enemy.getHP())+"伤害";}else {enemy.setHP(enemy.getHP()-(this.ATT+BaseHero.luck*4)*(1-enemy.getDEF()/100));tip=name+"普通攻击,造成"+enemy.getName()+(int)(enemy.getLastHP()-enemy.getHP())+"伤害";}}//技能2public void skill2(BaseHero enemy) {// TODO Auto-generated method stubblood=true;//掉血enemy.setLastHP(enemy.getHP());// 重置上一次血量if ((blue - 45) >= 0) {// 是否够蓝if (!noDodge && isDodge(enemy)) {// 闪避了tip = "窃魂剑," + enemy.getName() + "太敏捷了,竟然闪开了这次攻击";} else {// 没有闪避enemy.setHP(enemy.getHP()- (50 + ATT * (1 - enemy.getDEF() / 100)));enemy.setDEX(enemy.getDEX() - 2);tip = name + "窃魂剑,造成" + enemy.getName()+ (int) (enemy.getLastHP() - enemy.getHP())+ "点伤害,同时防御力降低2";}blue -= 45;} else {skill1(enemy);}}//技能3......
  1. 每次攻击后重新计算血量蓝量,使用TimerTask定时器,延时减去血量,造成缓慢掉血的动画效果
    /* TODO* hero第一个为被攻击者* myhero为发起攻击者* progressbar为对方血条* myprogressbar为己方血条* bluebar为己方蓝条*/public void reshowHP(BaseHero hero,BaseHero myhero,JProgressBar progressbar,JProgressBar myprogressbar,JProgressBar bluebar){//己方英雄先减蓝bluebar.setValue(myhero.getBlue());bluebar.setString(String.valueOf(bluebar.getValue()));myprogressbar.setValue((int)myhero.getHP());myprogressbar.setString(String.valueOf(myprogressbar.getValue()));//敌方英雄掉血if(myhero.isBlood()){timer.cancel();timer=new Timer();    //设置定时器timer.schedule(new delay_timer(hero,progressbar,timer,myhero.isBlood()), 0, 5);//每40毫秒启动一次}else{timer.cancel();timer = new Timer(); // 设置定时器timer.schedule(new delay_timer(myhero, myprogressbar, timer,myhero.isBlood()), 0, 5);// 每40毫秒启动一次}
  1. 每次游戏开始前初始化相关英雄血量蓝量数据
    //TODO 初始化血条函数public void initprogressbar(){progressbar1 = new JProgressBar();progressbar1.setBounds(45, 4, 180, 30);progressbar1.setOrientation(JProgressBar.HORIZONTAL);//进度条水平显示progressbar1.setMinimum(0);progressbar1.setMaximum((int)hero.getHP());progressbar1.setValue((int)hero.getHP());progressbar1.setStringPainted(true);//显示进度条里的百分值progressbar1.setString(String.valueOf(progressbar1.getValue()));//progressbar.setPreferredSize(new Dimension(150,30));progressbar1.setBorderPainted(true);progressbar1.setBackground(Color.white);//改变进度条背景颜色progressbar1.setForeground(Color.green);progressbar2 = new JProgressBar();progressbar2.setBounds(297, 4, 180, 30);progressbar2.setOrientation(JProgressBar.HORIZONTAL);//进度条水平显示progressbar2.setMinimum(0);progressbar2.setMaximum((int)hero2.getHP());progressbar2.setValue((int)hero2.getHP());progressbar2.setStringPainted(true);//显示进度条里的百分值progressbar2.setString(String.valueOf(progressbar2.getValue()));//progressbar.setPreferredSize(new Dimension(150,30));progressbar2.setBorderPainted(true);progressbar2.setBackground(Color.white);//改变进度条背景颜色progressbar2.setForeground(Color.green);//蓝bluebar1 = new JProgressBar();bluebar1.setBounds(45, 30, 180, 22);bluebar1.setOrientation(JProgressBar.HORIZONTAL);//进度条水平显示bluebar1.setMinimum(0);bluebar1.setMaximum(hero.getBlue());bluebar1.setValue(hero.getBlue());bluebar1.setStringPainted(true);//显示进度条里的百分值bluebar1.setString(String.valueOf(bluebar1.getValue()));bluebar1.setBorderPainted(true);bluebar1.setBackground(Color.white);//改变进度条背景颜色bluebar1.setForeground(Color.blue);bluebar2 = new JProgressBar();bluebar2.setBounds(297, 30, 180, 22);bluebar2.setOrientation(JProgressBar.HORIZONTAL);//进度条水平显示bluebar2.setMinimum(0);bluebar2.setMaximum(hero2.getBlue());bluebar2.setValue(hero2.getBlue());bluebar2.setStringPainted(true);//显示进度条里的百分值bluebar2.setString(String.valueOf(bluebar2.getValue()));bluebar2.setBorderPainted(true);bluebar2.setBackground(Color.white);//改变进度条背景颜色bluebar2.setForeground(Color.blue);}
  1. 界面设计
    界面流程:StartFrame -> SelectFrame -> MainFrame
    一共有设计有4个界面
    运行src/dao/Frame/StartFrame文件里面的main方法即可
  • 主菜单界面
  • 选择英雄界面
  • 格斗界面
  • 帮助界面

项目源码:
https://gitee.com/zhangxinlin/HeroGame2

英雄对决游戏开发流程(格斗游戏,电脑桌面对打游戏)附java源码相关推荐

  1. 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)

    一.前言 本文是<自己动手开发智能聊天机器人完全指南(附完整源码)>的第二篇,也是21天实战人工智能系列<知识图谱完全项目案例剖析>里面的知识图谱应用的案例.前文中实现了一个最 ...

  2. 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...

  3. 用python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是辰哥~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流 ...

  4. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)

    前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...

  5. 《黄金矿工》挖矿游戏 前端高阶版本,Cocos2d-js,附项目源码

    西游黄金矿工 西游黄金矿工是一款以黄金矿工玩法为基础,西游题材为背景的HTML5游戏,玩家需要在规定的时间内抓取宝物,同时需要达到过关分值方可过关. 页面效果 游戏起始页面 游戏场景选择页面 游戏页面 ...

  6. HTML小游戏11 —— 横版恐龙大冒险游戏(附完整源码)

  7. 【联机对战】微信小程序联机游戏开发流程详解

    现有一个微信小程序叫中国象棋项目,棋盘类的单机游戏看着有缺少了什么,现在给补上了,加个联机对战的功能,增加了可玩性,对新手来说,实现联机游戏还是有难度的,那要怎么实现的呢,接下来给大家讲一下. 考虑到 ...

  8. 国内外3D游戏开发流程和职位分类

    国内外3D游戏开发流程和职位分类 分类: 网游相关2010-07-04 21:11 851人阅读 评论(0) 收藏 举报 国内3D游戏开发流程 开发团队 n 制作人 n 执行制作人 n 策划团队 n ...

  9. 游戏开发流程以及Cocos2d与Cocos2dx区别

    一.游戏开发流程. ①准备游戏引擎 ②准备各类美术资源 ③编写demo,逻辑 ④适配手机,屏幕分辨率,以iPhone4的分辨率为经典.内存.系统版本. ⑤优化,性能优化,操作系统优化 ⑦发布游戏 二. ...

最新文章

  1. Linux常用测试命令
  2. 网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包
  3. 连接池,数据库连接池
  4. Jupyter notebook 不安装主题,通过修改css更改 默认字体,字体大小等
  5. mysql数据库+ssh框架_SSH框架+Mysql数据库开发java web会员积分消费管理系统
  6. 关于python文件操作
  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十期】Thu, 8 Jul 2021
  8. 求旋转数组的最小元素
  9. python之argmax
  10. 2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结
  11. Junit单元测试——如何正确测试异常
  12. ListView更新的几种方法
  13. IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
  14. 信安软考 第十六章 网络安全风险评估技术原理与应用
  15. SpringBoot2.1.9 多MongoDB配置template
  16. js转换Date日期格式
  17. 谷歌浏览器打不开产品给的原型图,提示AXURE RP EXTENSION For Chrome
  18. 咨询行业细分——管理咨询、战略咨询、IT咨询
  19. 沈阳服务器主板维修,沈阳铁西区附近电脑主板维修
  20. Django教程 —— 初步完善图书管理系统

热门文章

  1. 圆角边框(border-radius属性、border-radius使用规则)
  2. Gitlab安装汉化
  3. mxnet中的MultiBoxPrior、MultiBoxTarget、MultiBoxDetection函数理解
  4. 为什么,人们都喜欢说服别人
  5. 暂缓海外建站、关停拍拍二手入口等调整后 重新聚焦电商业务的京东Q1财报亮眼...
  6. [jQuery]使用jQuery.Validate进行客户端验证(高级篇-上)——不使用微软验证控件的理由...
  7. 【CET4四级英语】【单词】英语四级高频词汇(4)
  8. 居家办公之后,鹅厂小哥发现Web开发竟能助力身体健康!
  9. 九宫格重排问题 代码及通俗讲解
  10. [新闻]华为高端集群路由器面世