英雄对决游戏开发流程(格斗游戏,电脑桌面对打游戏)附java源码
这是我大二那时候写的一个程序,那时候刚上完老师说的java抽象类的课,老师打了个比方,具体的忘了,大概说英雄联盟里面的游戏人物,都是继承一个基类的模型,每个英雄都是拥有攻击、防御等相同的操作,但是每个攻击操作的技能效果又是不一样的,这就是抽象。每个英雄继承了基类的攻击防御方法,但是在具体的英雄实现类重写了原来的抽象方法。
听完老师的课,感触特别多,好像英雄联盟也是这么回事,只是动画效果多了一些,以及有一些人物位置碰撞检测。那时候感觉自己好像也能写一个出来。于是下课回去就开始写下这个程序
- 首先,先写一个抽象的英雄基类 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);
}
- 继承基类的英雄
在构造函数里面初始化基本属性,以及重写基类的抽象方法
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......
- 每次攻击后重新计算血量蓝量,使用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毫秒启动一次}
- 每次游戏开始前初始化相关英雄血量蓝量数据
//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);}
- 界面设计
界面流程:StartFrame -> SelectFrame -> MainFrame
一共有设计有4个界面
运行src/dao/Frame/StartFrame文件里面的main方法即可
- 主菜单界面
- 选择英雄界面
- 格斗界面
- 帮助界面
项目源码:
https://gitee.com/zhangxinlin/HeroGame2
英雄对决游戏开发流程(格斗游戏,电脑桌面对打游戏)附java源码相关推荐
- 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)
一.前言 本文是<自己动手开发智能聊天机器人完全指南(附完整源码)>的第二篇,也是21天实战人工智能系列<知识图谱完全项目案例剖析>里面的知识图谱应用的案例.前文中实现了一个最 ...
- 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)
大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...
- 用python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)
大家好,我是辰哥~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流 ...
- 牛逼,一整套基于Java开发的的区块链系统(附完整源码)
前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...
- 《黄金矿工》挖矿游戏 前端高阶版本,Cocos2d-js,附项目源码
西游黄金矿工 西游黄金矿工是一款以黄金矿工玩法为基础,西游题材为背景的HTML5游戏,玩家需要在规定的时间内抓取宝物,同时需要达到过关分值方可过关. 页面效果 游戏起始页面 游戏场景选择页面 游戏页面 ...
- HTML小游戏11 —— 横版恐龙大冒险游戏(附完整源码)
- 【联机对战】微信小程序联机游戏开发流程详解
现有一个微信小程序叫中国象棋项目,棋盘类的单机游戏看着有缺少了什么,现在给补上了,加个联机对战的功能,增加了可玩性,对新手来说,实现联机游戏还是有难度的,那要怎么实现的呢,接下来给大家讲一下. 考虑到 ...
- 国内外3D游戏开发流程和职位分类
国内外3D游戏开发流程和职位分类 分类: 网游相关2010-07-04 21:11 851人阅读 评论(0) 收藏 举报 国内3D游戏开发流程 开发团队 n 制作人 n 执行制作人 n 策划团队 n ...
- 游戏开发流程以及Cocos2d与Cocos2dx区别
一.游戏开发流程. ①准备游戏引擎 ②准备各类美术资源 ③编写demo,逻辑 ④适配手机,屏幕分辨率,以iPhone4的分辨率为经典.内存.系统版本. ⑤优化,性能优化,操作系统优化 ⑦发布游戏 二. ...
最新文章
- Linux常用测试命令
- 网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包
- 连接池,数据库连接池
- Jupyter notebook 不安装主题,通过修改css更改 默认字体,字体大小等
- mysql数据库+ssh框架_SSH框架+Mysql数据库开发java web会员积分消费管理系统
- 关于python文件操作
- 【AI视野·今日NLP 自然语言处理论文速览 第二十期】Thu, 8 Jul 2021
- 求旋转数组的最小元素
- python之argmax
- 2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结
- Junit单元测试——如何正确测试异常
- ListView更新的几种方法
- IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
- 信安软考 第十六章 网络安全风险评估技术原理与应用
- SpringBoot2.1.9 多MongoDB配置template
- js转换Date日期格式
- 谷歌浏览器打不开产品给的原型图,提示AXURE RP EXTENSION For Chrome
- 咨询行业细分——管理咨询、战略咨询、IT咨询
- 沈阳服务器主板维修,沈阳铁西区附近电脑主板维修
- Django教程 —— 初步完善图书管理系统
热门文章
- 圆角边框(border-radius属性、border-radius使用规则)
- Gitlab安装汉化
- mxnet中的MultiBoxPrior、MultiBoxTarget、MultiBoxDetection函数理解
- 为什么,人们都喜欢说服别人
- 暂缓海外建站、关停拍拍二手入口等调整后 重新聚焦电商业务的京东Q1财报亮眼...
- [jQuery]使用jQuery.Validate进行客户端验证(高级篇-上)——不使用微软验证控件的理由...
- 【CET4四级英语】【单词】英语四级高频词汇(4)
- 居家办公之后,鹅厂小哥发现Web开发竟能助力身体健康!
- 九宫格重排问题 代码及通俗讲解
- [新闻]华为高端集群路由器面世