我用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("亚瑟穿上了“亚瑟-圣骑之力”皮肤");
        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王者荣耀内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java数据结构之实现跳表

    1.跳表的定义 跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好. SkipList(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的.SkipList让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过"空间来换取时间"的一个算法,在每个节点中增加了向前的指针,在插入.删除.查找时可以忽略一些不可能涉及到的结点,从而提高了效率. 在Java的API中已经有了实

  • 教你用Java实现RSA非对称加密算法

    一.非对称加密 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥).公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密.因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法. 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方:甲方再用自己私钥对加密

  • java实现表单必填参数验证的方法

    一. 概述 在开发后端接口, 通常都会涉及检验参数必填校验, 一般我们的处理都是很粗暴的写个if()判断, 然后抛异常. 本文将介绍通过代理的思想, 用注解优雅的处理非空判断 二. 实现过程 最终想要的效果->在方法的参数加个注解或者参数的属性里加个注解, 注解可以自定义报错信息, 就可以实现自动非空校验 2.1 编写注解 @Target({ElementType.FIELD}) //作用的位置 @Retention(RetentionPolicy.RUNTIME) //作用域 @Documen

  • 教你怎么用java实现客户端与服务器一问一答

    运行效果 开启多个客户端 服务端效果: 客户端效果: 当一个客户端断开连接: 代码 因为代码中有注释,我就直接贴上来了 服务端: package com.dayrain.server; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.*; import j

  • 教你怎么使用Java实现WebSocket

    一.WebSocket简介 WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能. 在WebSocket应用程序中,服务器发布WebSocket端点,客户端使用url连接到服务器.建立连接后,服务器和客户端就可以互相发送消息.客户端通常连接到一台服务器,服务器接受多个客户端的连接. 1.1 WebSocket协议 WebSocket协议有两个部分:握手和传输.客户端通过向服务端URL发送握手请求来建立连接.握手与现有的基于HTTP的基础结构相兼容.Web服务

  • Java实现学生信息管理系统IO版本

    学生信息管理系统IO版本代码实现(java),供大家参考,具体内容如下 之前写过的一个学生信息管理系统是用集合类来写的,但是不能实现代码在文档中的存储功能,每次运行过后都得重新输入数据,无法做到保存的功能. 而用IO流进行学生信息管理系统的编写以后将数据存储在文本文件中,以后每次访问都可以访问到之前已经存到的数据,类似于数据库的一个存储功能(这里并没有用到Mysql数据库,仅仅是用文本文档来进行数据的一系列存储) 以下是代码的实现过程: 主类 package zjh; import java.i

  • 用Java实现24点游戏

    一.常见游戏规则 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(使用自定义注释模板) 2.列出表达式无重复. 提高要求:用户初始生命值为一给定值(比如3),初始分数为0.随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这

  • Java实现FTP文件上传

    一.配置FTP文件服务器 以Ubuntu为例 FTP两种模式简介 PORT(主动模式) 第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务器的21号端口建立TCP连接,在FTP中这个连接叫做控制连接,连接成功建立后,FTP客户端会发送port命令,紧接着FTP客户端会监视自己的p1+1端口,FTP服务器接收到port命令会从自己的20号端口向FTP客户端的p1+1端口发起请求建立TCP连接,这个连接叫做数据连接,用来发送数据,数据传输完毕后数据连接随即

  • 图文详解JAVA实现快速排序

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 9 3 4 5 10 8"这个10个数进行排序.首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了).为了方便,就让第一个数6作为基准数吧.接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列: 3 1 2 5

  • Java实现学生成绩管理系统

    本文实例为大家分享了Java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 新手练手小项目,主要练习面向对象.循环.数组.排序等等. 本人也是自学练手,代码有不正确的或不完善的也请多多包涵,留言指导. 感谢! 一.创建学生类 储存学生的基本信息 public class Student { private int no; private String name; Result result; public Student() { super(); } public Student(in

  • java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    开发需求: 因系统程序部署时,经常是拆分部署(多台机器) ,手工部署费时费力,且每次都要手工配置系统参数(系统提供配置向导). 如下图所示: 1)进行main容器 -> 2)执行系统配置向导 -> 3)选择服务器模式 -> 4) 选择web控制台....然后进行具体的服务器IP设置. 为了解放双手,用java实现了Linux(centos) 下docker 应用程序的命令交互. 具体代码如下: import java.io.*; /** * @author by dujiajun * @

  • java实现树形菜单对象

    本文实例为大家分享了java实现树形菜单对象的具体代码,供大家参考,具体内容如下 1.SysMenu package com.zy.shiro.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.f

  • Java实现简单的扫雷图

    用Java实现简单的扫雷图,供大家参考,具体内容如下 扫雷图的思想是: 1.地图可以是一个二维数组,并对数组进行初始化 2.随机生成雷的位置,可以用Random函数进行随机生成也可以用Math.random()进行随机生成 (PS:我就是简单随机下标生成了雷的位置) 3.对每一个非雷的位置一周的格子进行判断是否有雷,进行数字的累加 4.遍历数组进行输出 private static void mineClearance() { // 声明一个二维数组表示扫雷地图 String[][] mineC

  • Java实现NIO聊天室的示例代码(群聊+私聊)

    功能介绍 功能:群聊+私发+上线提醒+下线提醒+查询在线用户 文件 Utils 需要用maven导入下面两个包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> </dependency> <dependency> <group

  • Java实现多线程中的静态代理模式

    前言 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式. 静态代理属于设计模式中的代理模式.反之则有动态代理,本篇文章不展开讲,有兴趣的可自行谷歌研究研究. 其实继承Thread也属于静态代理的一种,所以在这里学习静态代理有助于我们学习多线程. 静态代理 优点:可以在不修改目标对象的前提下扩

  • 教你怎么用Java实现给图片打上水印

    一.原图片 二.打水印(文字) import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; public class ImageUtils { // 水印字体 private static final Font FONT = new Font("微软雅黑", Font.

  • Java实现雪花算法的原理

    SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法.其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id.在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解. 这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号. 给大家举个例子吧,比如下面那个 64 bit 的 long 型数字: 第一个部分

  • Java实现哈希表的基本功能

    一.哈希表头插法放入元素 /** * user:ypc: * date:2021-05-20; * time: 11:05; */ public class HashBuck { class Node { public int key; int value; Node next; Node(int key, int value) { this.key = key; this.value = value; } } public int usedSize; public Node[] array;

随机推荐