Java做的黑客帝国的屏幕保护程序

这是差不多一个月前做的东西,感觉挺好玩的,写出来分享一下。

效果类似于这样,如下:


这张图是我在网上找的,是静态的。当然最后做出了肯定是动态的,我自己做的动态程序由于我不会截动态图就没法上传(原谅我的笨拙)

好啦,言归正传,下面说一些怎么做。

先贴上代码:

public class Rain extends JDialog implements ActionListener {

  private static final long serialVersionUID = 1549334578038217282L;

  private Random random = new Random();
  private Dimension screenSize;
  private JPanel graphicsPanel;
  // 行高,列宽
  private final static int gap = 20;
  // 存放雨点顶部的位置信息(marginTop)
  private int[] posArr;
  // 行数
  private int lines;
  // 列数
  private int columns;

  public Rain() {
    initComponents();
  }

  private void initComponents() {
    setLayout(new BorderLayout());
    graphicsPanel = new GraphicsPanel();
    add(graphicsPanel, BorderLayout.CENTER);
    // 设置光标不可见
    Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
    Image image = defaultToolkit.createImage(new MemoryImageSource(0, 0, null, 0, 0));
    Cursor invisibleCursor = defaultToolkit.createCustomCursor(image, new Point(0, 0), "cursor");
    setCursor(invisibleCursor);
    // ESC键退出
    KeyPressListener keyPressListener = new KeyPressListener();
    this.addKeyListener(keyPressListener);
    // this.setAlwaysOnTop(true);
    // 去标题栏
    this.setUndecorated(true);
    // 全屏
    this.getGraphicsConfiguration().getDevice().setFullScreenWindow(this);
    this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    setVisible(true);

    screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    lines = screenSize.height / gap;
    columns = screenSize.width / gap;

    posArr = new int[columns + 1];
    random = new Random();
    for (int i = 0; i < posArr.length; i++) {
      posArr[i] = random.nextInt(lines);
    }

    // 每秒10帧
    new Timer(100, this).start();
  }

  /**
   * @return 随机字符
   */
  private char getChr() {
    return (char) (random.nextInt(94) + 33);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    graphicsPanel.repaint();
  }

  private class GraphicsPanel extends JPanel {
    private static final long serialVersionUID = 3043939524168375053L;

    @Override
    public void paint(Graphics g) {
      Graphics2D g2d = (Graphics2D) g;
      g2d.setFont(getFont().deriveFont(Font.BOLD));
      g2d.setColor(Color.BLACK);
      g2d.fillRect(0, 0, screenSize.width, screenSize.height);
      // 当前列
      int currentColumn = 0;
      for (int x = 0; x < screenSize.width; x += gap) {
        int endPos = posArr[currentColumn];
        g2d.setColor(Color.CYAN);
        g2d.drawString(String.valueOf(getChr()), x, endPos * gap);
        int cg = 0;
        for (int j = endPos - 15; j < endPos; j++) {
          // 颜色渐变
          cg += 20;
          if (cg > 255) {
            cg = 255;
          }
          g2d.setColor(new Color(0, cg, 0));
          g2d.drawString(String.valueOf(getChr()), x, j * gap);
        }
        // 每放完一帧,当前列上雨点的位置随机下移1~5行
        posArr[currentColumn] += random.nextInt(5);
        // 当雨点位置超过屏幕高度时,重新产生一个随机位置
        if (posArr[currentColumn] * gap > getHeight()) {
          posArr[currentColumn] = random.nextInt(lines);
        }
        currentColumn++;
      }
    }
  }

  private class KeyPressListener extends KeyAdapter {
    @Override
    public void keyPressed(KeyEvent e) {
      if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
        System.exit(0);
      }
    }
  }

  public static void main(String[] args) {
    new Rain();
  }

}

(代码并不是我写的,代码来自于https://hacpai.com/article/1472700604290)

之后就需要将Java项目导出为可执行的程序,可以参考以下博客:

1.https://blog.youkuaiyun.com/sunkun2013/article/details/13167099

最后一步是将生成的exe文件的后缀名改为scr,之后就可以在设置里将自己做的黑客帝国屏幕保护程序设置为屏保啦。

下面是我做的屏幕保护程序地址:

https://download.youkuaiyun.com/download/dukongjian/10466975

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值