谁说 java 不能搞炫酷的月亮🌛

3,291 阅读1分钟

我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛

思路

  1. 输出一个月亮
  2. 清屏
  3. 换一个颜色输出一个月亮
  4. 清屏
  5. 换一个颜色输出一个月亮
  6. 达到效果

难点

java 如何清空控制台????

代码

一、清空控制台

  • 思路

    • 在c++ 中 window:system("cls"); mac/linux:system("clear");可以直接清空
    • 可以通过 JNI 实现 java 调用 C++/C 的dll
    • 声明一个 native
    • 将class通过javah编译成 xx.h
    • 编写c++项目
    • 生成 dll
    • 将 dll copy到自己的jdk\jre\lib的目录下
    • java代码调用
  • 声明一个 native

    public class Cls {
    
        /**
         * 声明本地方法
         */
        public native void clear();
    
        static {
            //加载动态链接库DLL
            //必须保证加载的 xxxx.dll 或者 xxx.dylib 在你jdk\jre\lib下目录
            System.loadLibrary("cls");
        }
    }
    
  • 将class通过javah编译成 xx.h

    image.png

  • 编写c++项目

    image.png

    image.png

  • 生成 dll

    ctrl/command + F9

  • 将 dll copy到 自己的 jdk\jre\lib 的目录下

  • java 调用

    image.png

  • 效果

    Kapture 2021-09-18 at 12.40.31.gif

二、绘制月亮

public class zhongqiu {
    public static void main(String[] args) throws Exception {
        for (int i = 31; i <= 36; i++) {
            //清空控制台
            new Cls().clear();
            //输出月亮
            yueLiang(i);
            //慢一点,不然会闪
            Thread.sleep(300);
            //循环换颜色
            if (i == 36) {
                i = 31;
            }
        }
    }

    //输出月亮
    public static void yueLiang(int c) {
        int r = 15;
        double R = 2 * r;
        for (int i = 0; i <= R; i += 2) {
            double y = Math.round(Math.sqrt(r * r - Math.pow(r - i, 2)));
            double x = r - y;
            int b = i == 0 || R - i == 0 ? 4 : 0;
            for (int j = 0; j < x + 2 * y + b; j++) {
                System.out.print(" ");
            }
            int yl = 6;
            if (i == 0 || R - i == 0) {
                yl = 2;
            } else if (i == 1 || R - i == 1) {
                yl = 4;
            } else if (i == 2 || R - i == 2) {
                yl = 5;
            }
            for (int j = 0; j < yl; j++) {
                System.out.print("\033[" + c + "m*\033[m");
            }
            System.out.println("");
        }
    }

}

效果

Kapture 2021-09-18 at 13.27.53.gif

注意事项:不能在idea运行,要去终端运行才有效果