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

发布时间:2021-07-05 18:40 来源:脚本之家 阅读:0 作者:沉默着忍受 栏目: 开发技术

目录

    一、前期准备

    提示:如果友友你没有看过系列一的文章点击这个链接:

    我们现在功能比较多,所有为了让程序运行起来比较直观,我们需要创建一个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;
    




    总结

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

    到此这篇关于我用java实现了王者荣耀的皮肤和英雄技能的文章就介绍到这了,更多相关java王者荣耀内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    ja