我用java实现了王者荣耀的皮肤和英雄技能
作者:沉默着忍受 发布时间:2022-01-13 13:44:09
一、前期准备
提示:如果友友你没有看过系列一的文章点击这个链接:王者荣耀中一个英雄是怎么被产生的?(一)
我们现在功能比较多,所有为了让程序运行起来比较直观,我们需要创建一个Menu包,来定义一些操作的界面;
Menulogin是游戏选择英雄皮肤,铭文和进入游戏的界面;代码简单易懂,我就不解释了
package Menu;
import java.util.Scanner;
public class Menulogin {
public static int Menulogin(){
System.out.println("*****备战选择*****");
System.out.println("按1 :选择皮肤");
System.out.println("按2 :选择铭文");
System.out.println("按3 :进入游戏");
System.out.println("*****************");
Scanner sc = new Scanner(System.in);
int res = sc.nextInt();
switch (res){
case 1: return 1;
case 2: return 2;
case 3: return 3;
default:
System.out.println("参数错误,尝试重新连接"); Menulogin();break;
}
return 0;
}
}
Menuable是英雄技能释放界面
package Menu;
import java.util.Scanner;
public class Menuable {
//技能菜单
public static int Menuable(){
System.out.println("***************");
System.out.println("按1 :技能一(控制)");
System.out.println("按2 :技能二(伤害)");
System.out.println("按3 :技能三(控制)");
System.out.println("按0 :自动平A");
System.out.println("按10 :攻击野怪");
System.out.println("按11 :购买装备");
System.out.println("***************");
Scanner sc = new Scanner(System.in);
int res = sc.nextInt();
switch (res){
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 0: return 0;
case 10: return 10;
case 11: return 11;
default:return 4;
}
}
}
Menuyeguai是攻击目标野怪的菜单,主要是通过选择野怪,并且完成击杀,获得金币
package Menu;
import yeguai.*;
import java.util.Scanner;
public class Menuyeguai {
//刷野菜单
public static int Menuyeguai(){
System.out.println("******选择要攻击的野怪******");
System.out.println("1.野猪");
System.out.println("2.小鸟");
System.out.println("3.河蟹");
System.out.println("4.小兵");
System.out.println("5.炮车");
System.out.println("6.红buff");
System.out.println("7.蓝buff");
System.out.println("10.进入技能页面");
System.out.println("11.进入装备页面");
Scanner sc = new Scanner(System.in);
int res = sc.nextInt();
switch (res){
case 1: Pig pig = new Pig(); return pig.getNum();
case 2:
Bird bird = new Bird();return bird.getNum();
case 3:
Heixie heixie = new Heixie();return heixie.getNum();
case 4:
Xiaobing xiaobing = new Xiaobing();return xiaobing.getNum();
case 5:
Paocar paocar = new Paocar();return paocar.getMoney();
case 6:return 1;
case 7:return 0;
case 10:return 10;
case 11:return 11;
default:
System.out.println("无效操作"); return 12;
}
}
}
Menuzhuangbei是玩家是进入装备页面,购买装备,增加全方位属性,目前只实现了抵抗之靴,反甲,暗影战斧
package Menu;
import java.util.Scanner;
public class Menuzhuangbei {
//装备页面
public static int Menuzhuangbei(){
System.out.println("++++++++++++++++++++++");
System.out.println("1.抵抗之靴");
System.out.println("2.反甲");
System.out.println("3.暗影战斧");
System.out.println("4.极寒风暴");
System.out.println("5.破军");
System.out.println("6.碎星锤");
System.out.println("7.魔女斗篷");
System.out.println("10.进入技能页面");
System.out.println("11.进入刷怪页面");
System.out.println("++++++++++++++++++++++");
Scanner sc = new Scanner(System.in);
int res = sc.nextInt();
switch (res){
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 4;
case 5: return 5;
case 6: return 6;
case 7: return 7;
case 10:return 10;
case 11:return 11;
default:return 12;
}
}
}
二、没有钱买皮肤,我就自己造!
2.1 皮肤选择界面设计
我们主要是后端设计,所有我们分析分析一下,如何实现一个皮肤。
如果友友玩过王者荣耀,那么你一定知道,不管一个皮肤有多贵,它可以固定给穿戴的英雄加20点的攻击力,我是亚瑟的皮肤,所以加20点物理攻击。如果创建了一个法师英雄,那么加20点法术攻击。花里胡哨的皮肤,其实底层实现很容易,就是建模,美工比较折磨人。
package skin;
import yeguai.*;
import zhuangbei.Fajia;
import java.util.Scanner;
public class Yaseisskin {
public static int Yaseisskin(){
System.out.println("_________________________");
System.out.println(" 1. 亚瑟-圣骑之力 ");
System.out.println(" 2. 亚瑟-死亡骑士 ");
System.out.println(" 3. 亚瑟-狮心王 ");
System.out.println(" 4. 亚瑟-心灵战警 ");
System.out.println("_________________________");
Scanner sc = new Scanner(System.in);
int res = sc.nextInt();
if(res==1){
int add = Yuanshenskin();
return add;
}
if(res==2){
int add = Firstskin();
return add;
}
if(res==3){
int add = Secondskin();
return add;
}
if(res==4){
int add = Thirdskin();
return add;
}
return 0;
}
private static int Yuanshenskin(){
System.out.println("亚瑟穿上了“亚瑟-圣骑之力”皮肤");
int phyattack =20;
return phyattack;
}
private static int Firstskin(){
System.out.println("亚瑟穿上了“亚瑟-死亡骑士”皮肤");
int phyattack =20;
return phyattack;
}
private static int Secondskin(){
System.out.println("亚瑟穿上了“亚瑟-狮心王 ”皮肤");
int phyattack =20;
return phyattack;
}
private static int Thirdskin(){
System.out.println("亚瑟穿上了“亚瑟-心灵战警 ”皮肤");
int phyattack =20;
return phyattack;
}
}
没错,这是我的想法,如果你感兴趣,可以在自己创造新的,牛逼,开挂的皮肤。哈哈哈
2.2 如何将皮肤属性赋给英雄
这个十分简单,我们只需要拿到所选的皮肤返回值,然后将该返回值赋给英雄的基础攻击力就实现了属性赋予。
代码如下:
if(menulogin.Menulogin()==1){
int num = Yaseisskin.Yaseisskin();
yase.setPhyattack(yase.getPhyattack()+num);
System.out.println("皮肤穿戴成功!");
System.out.println(yase.getName()+"当前属性为"+" 金币 "+yase.getMoney()+" 物理攻击 "+yase.getPhyattack()+" 血量 "+yase.getBlood()+" 移速 "+yase.getMove()
);
}
四个皮肤具体实现:
原皮 :亚瑟-圣骑之力 无加成
private static int Yuanshenskin(){
System.out.println("亚瑟穿上了“亚瑟-圣骑之力”皮肤");
int phyattack =0;
return phyattack;
}
赛季皮肤:亚瑟-狮心王
private static int Secondskin(){
System.out.println("亚瑟穿上了“亚瑟-狮心王 ”皮肤");
int phyattack =20;
return phyattack;
}
活动皮肤:亚瑟-死亡骑士
private static int Firstskin(){
System.out.println("亚瑟穿上了“亚瑟-死亡骑士”皮肤");
int phyattack =20;
return phyattack;
}
碎片兑换皮肤:亚瑟-心灵战警
private static int Thirdskin(){
System.out.println("亚瑟穿上了“亚瑟-心灵战警 ”皮肤");
int phyattack =20;
return phyattack;
}
三、没有牛逼的英雄技能,玩个锤子!
3.1 确定英雄技能效果
我们实现好皮肤后,点击进入游戏,那么,我们玩什么,当然是刷怪,打人,推塔(打人,推塔在系列三开始实现)。我现在创建的英雄是亚瑟。
亚瑟有三个技能和一个被动技能;(被动技能我没有实现,因为木有好想法,友友快快帮忙!)
**第一个技能:**
//亚瑟的一技能
public static int[] Firstable(boolean Redbuff){ //给技能一个参数,如果有红buff或蓝buff,那么技能属性就会提升
int[] res = new int[4];
if(Redbuff){ //有红buff
int phyattack = 120;//输出的伤害
int blood = 200;
int move = 100; //一技能效果加速
res[0]=120;
res[1]=200;
res[2]=100;
}else{ //无红buff
int phyattack = 100;
int blood = 0;
int move = 100;
res[0]=100;
res[1]=0;
res[2]=100;
}
//一技能特殊属性,沉默英雄,也就是说,被击中的英雄2s内无法释放技能。
res[3] = 1;//标志1为该技能的效果是可以沉默;
return res;
}
第二个技能实现:
//亚瑟的二技能
public static int[] Secondable(boolean Redbuff,boolean bluebuff){ //给技能一个参数,如果有红buff,那么技能属性就会提升
int[] res1 = new int[4];
int phyattack = 300;
int blood = 0;
int move = 50;
int time1 = 7000; // 每7s ,一个二技能
res1[0]=phyattack;
res1[1]=blood;
res1[2]=move ;
res1[3]=time1;
if(Redbuff){ //有红buff
phyattack = 400;
blood = 200;
move = 50;
res1[0]=phyattack;
res1[1]=blood;
res1[2]=move;
res1[3]=time1;
}
if(bluebuff){ //有蓝buff
time1 = 6000;
res1[3]=time1;
}
return res1;
}
第三个技能实现:
//亚瑟的三技能
public static int[] Thirdable(boolean Redbuff,boolean bluebuff){ //给技能一个参数,如果有红buff,那么技能属性就会提升
int[] res2 = new int[4];
int phyattack = 600;
int blood = 0;
int move = 50;
int time2 = 12000; //每12s一个三技能
res2[0]=phyattack;
res2[1]=blood;
res2[2]=move ;
res2[3]=time2;
if(Redbuff){ //有红buff
phyattack = 800;
blood = 400;
move = 50;
res2[0]=phyattack;
res2[1]=blood;
res2[2]=move ;
res2[3]=time2;
}
if(bluebuff){ //有蓝buff
time2 = 10000;
res2[0]=phyattack ;
res2[1]=blood ;
res2[2]=move ;
res2[3]=time2;
}
return res2;
}
3.2 英雄技能使用
**利用技能菜单,完成技能的使用,**
int flag=menulogin.Menulogin(); //游戏开始标记符;
Boolean red = false;
Boolean blue = false; //默认英雄初始是没有buff的
while (flag==3) {
Menuable menuable = new Menuable();
Menuyeguai menuyeguai = new Menuyeguai();
Menuzhuangbei menuzhuangbei = new Menuzhuangbei();
int res = menuable.Menuable(); //技能菜单
int[] arr = new int[4];
switch (res) { //技能生效操作
case 1:
System.out.println("当前使用一技能誓约之盾!");
arr = Firstable(red);
break;
case 2:
System.out.println("当前使用二技能回旋打击!");
arr = Secondable(red, blue);
break;
case 3:
System.out.println("当前使用二技能圣剑裁决!");
arr = Thirdable(red, blue);
break;
case 10:
int res1 = menuyeguai.Menuyeguai();
switch (res1){ //刷野生效操作
case 80:
case 100:
case 150:
case 200:
case 250:yase.setMoney(yase.getMoney()+res1);break;
case 1: red = true;break;
case 0: blue = true;break;
case 10:;
case 11:;
default:
System.out.println("系统错误");
}
break;
case 11:
int res2 = menuzhuangbei.Menuzhuangbei();
switch (res2){ //进入装备购买页面
case 1:
Shoe shoe = new Shoe();
if(yase.getMoney()>=200){
System.out.println(yase.name+"购买了"+shoe.name);
yase.phyfangyu+=shoe.getPhyattack();
yase.move+=shoe.getMove();
yase.money=yase.money-200;
}else{
System.out.println("金币不足,无法购买"+shoe.name);
};break;
case 2:
Fajia fajia = new Fajia();
if(yase.getMoney()>=1200){
System.out.println(yase.name+"购买了"+fajia.name);
yase.phyattack+=fajia.getPhyattack(); //攻击力+
yase.phyfangyu+=fajia.getPhyfanyu(); //防御力+
yase.money=yase.money-1200;
}else {
System.out.println("金币不足,无法购买"+fajia.name);
};break;
case 3:
Anyinzhanfu anyinzhanfu = new Anyinzhanfu();
if(yase.getMoney()>=2000){
System.out.println(yase.name+"购买了"+anyinzhanfu.name);
yase.phyattack+=anyinzhanfu.getPhyattack(); //攻击力+
yase.blood+=anyinzhanfu.getBlood(); //生命力+
yase.money=yase.money-2000;
}else {
System.out.println("金币不足,无法购买"+anyinzhanfu.name);
}
break;
case 10:
case 11:
default:
System.out.println("系统错误");
}
break;
case 4:
return;
default:
System.out.println("自动平A中。。。。");
break;
}
yase.setPhyattack(yase.getPhyattack()+arr[0]);
yase.setBlood(yase.getBlood()+arr[1]);
yase.setMove(yase.getMove()+arr[2]);
System.out.println(yase.getName()+"当前属性为"+" 金币 "+yase.getMoney()+" 物理攻击 "+yase.getPhyattack()+" 血量 "+yase.getBlood()+" 移速 "+yase.getMove()
+" 当前技能冷却时间 "+arr[3]+"ms");
}
里面嵌套了装备购买和刷怪的代码实现,代码十分基础,聪明的友友你一定看的懂。
刷野怪主要是给每个野怪设定了不同的金币数量,然后通过Switch,进行判断。
buff是根据返回值,来确定当前是否有buff;
装备购买的代码原理一样,调用装备类,在购买装备前先判断经济是否满足条件;
3.3 技能释放演示
使用一技能:
四、光放技能有什么用,刷怪买装备!
4.1 刷怪实现的方法
int res1 = menuyeguai.Menuyeguai();
switch (res1){ //刷野生效操作
case 80:
case 100:
case 150:
case 200:
case 250:yase.setMoney(yase.getMoney()+res1);break;
case 1: red = true;break;
case 0: blue = true;break;
default:
System.out.println("系统错误");
}
break;
程序运行演示:
4.2 购买装备!
int res2 = menuzhuangbei.Menuzhuangbei();
switch (res2){ //进入装备购买页面
case 1:
Shoe shoe = new Shoe();
if(yase.getMoney()>=200){
System.out.println(yase.name+"购买了"+shoe.name);
yase.phyfangyu+=shoe.getPhyattack();
yase.move+=shoe.getMove();
yase.money=yase.money-200;
}else{
System.out.println("金币不足,无法购买"+shoe.name);
};break;
case 2:
Fajia fajia = new Fajia();
if(yase.getMoney()>=1200){
System.out.println(yase.name+"购买了"+fajia.name);
yase.phyattack+=fajia.getPhyattack(); //攻击力+
yase.phyfangyu+=fajia.getPhyfanyu(); //防御力+
yase.money=yase.money-1200;
}else {
System.out.println("金币不足,无法购买"+fajia.name);
};break;
case 3:
Anyinzhanfu anyinzhanfu = new Anyinzhanfu();
if(yase.getMoney()>=2000){
System.out.println(yase.name+"购买了"+anyinzhanfu.name);
yase.phyattack+=anyinzhanfu.getPhyattack(); //攻击力+
yase.blood+=anyinzhanfu.getBlood(); //生命力+
yase.money=yase.money-2000;
}else {
System.out.println("金币不足,无法购买"+anyinzhanfu.name);
}
break;
case 10:
case 11:
default:
System.out.println("系统错误");
}
break;
来源:https://blog.csdn.net/ILOVEMYDEAR/article/details/116867540


猜你喜欢
- excel对于下拉框较多选项的,需要使用隐藏工作簿来解决,使用函数取值来做选项选项较少(一般少于5个):private static Dat
- 一、定义一个配置类,自定义RedisTemplate的序列化方式@Configurationpublic class RedisConfig
- 问题描述设有n个会议的集合C={1,2,…,n},其中每个会议都要求使用同一个资源(如会议室),而在同一时间内只能有一
- 一、问题描述上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展
- Spring Boot 集成MyBatis在集成MyBatis前,我们先配置一个druid数据源。Spring Boot 集成druiddr
- ASP.NET为开发人员提供了一套简单实用的服务器控件来验证用户输入的信息是否有效。这些控件的主要属性有id(控件的唯一id)、Contro
- MyBatis注解实现动态SQL在 Mybatis 中,使用注解可以很方便的进行sql操作,但很多动态 SQL 都是由 xml 配置实现的。
- 概念理解Properties 继承于 Hashtable。表示一个持久的属性集,属性列表以key-value的形式存在,key和value都
- 在使用ListView组件来显示列表数据时,有的时候我们需要改变列表中的数据,有以下方法:1、重新给ListView组件设置适配器这种方法重
- 一、开源项目 Javascript .NET地址: http://javascriptdotnet.codeplex.com/ 它是Goog
- 计数排序是非比较的排序算法,用辅助数组对数组中出现的数字计数,元素转下标,下标转元素计数排序优缺点优点:快缺点:数据范围很大,比较稀疏,会导
- 最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。1、继承Thread类实现多线程继承Thread类的方法
- 前言相信有很多小伙伴,在日常的开发中都有遇到过需要调用第三方接口的需求吧,但是自己有没有写过接口提供给第三方使用呢,常规的都是我们调用别人的
- 1. 定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。2. 使用的
- Android从网络中获得一张图片并显示在屏幕上的实例详解看下实现效果图:1:androidmanifest.xml的内容<?xml
- 目录概述非阻塞算法依赖JCTools队列队列实现原子队列容量其他数据结构工具性能测试使用JCTools的缺点结论概述在本文中,我们将介绍JC
- 数据层测试事务回滚pom.xml导入对应的一些坐标,mysql,Mp,等<dependency> &
- 一、DurationDuration主要用来衡量秒级和纳秒级的时间,使用于时间精度要求比较高的情况。先来看看Duration的定义:publ
- zookeeper集群配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读
- 前言:在 Java 中,常用的锁有两种:synchronized(内置锁)和 ReentrantLock(可重入锁),二者的功效都是相同得,