我用java实现了王者荣耀的皮肤和英雄技能

网友投稿 255 2022-10-24


我用java实现了王者荣耀的皮肤和英雄技能

一、前期准备

提示:如果友友你没有看过系列一的文章点击这个链接:王者荣耀中一个英雄是怎么被产生的?(一)

我们现在功能比较多,所有为了让程序运行起来比较直观,我们需要创建一个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("亚瑟穿上了“亚瑟-圣骑之力”皮肤");

inhttp://t 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;

EdctAV 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;

总结

我完全是外行,这是通过自己的兴趣来练习练习对象的使用和方法的调用,通过这种兴趣与爱好的结合,我发现才可以主观的学到更多知识,接下来我要使用比较难的,那就是多线程,并结合Web,来实现两个英雄的战斗!大家多多关注!不喜勿喷,呜呜呜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:VMware虚拟机从一台电脑转移复制到另一台电脑的方法
下一篇:小灰的网工日常之华三瘦转胖AP,我与华三的又一段孽缘呀~~~
相关文章

 发表评论

评论列表