Кто сказал, что java не может сделать крутую луну🌛

Java задняя часть Технологии Nuggets призывают к публикации

Я участвую в творческом конкурсе «Праздник середины осени».Творческий конкурс «Праздник середины осени»

идеи

  1. вывести луну
  2. чистый экран
  3. Измените цвет, чтобы вывести луну
  4. чистый экран
  5. Измените цвет, чтобы вывести луну
  6. Добейтесь желаемого эффекта

трудность

Как java очищает консоль? ? ? ?

код

1. Очистить консоль

  • идеи

    • в С++window:system("cls"); mac/linux:system("clear");можно очистить напрямую
    • Java может вызывать C++/C dll через JNI
    • объявить уроженцем
    • Скомпилируйте класс в xx.h через javah
    • написать проект на с++
    • генерировать dll
    • Скопируйте dll в свой собственный каталог jdk\jre\lib
    • вызов java-кода
  • объявить уроженцем

    public class Cls {
    
        /**
         * 声明本地方法
         */
        public native void clear();
    
        static {
            //加载动态链接库DLL
            //必须保证加载的 xxxx.dll 或者 xxx.dylib 在你jdk\jre\lib下目录
            System.loadLibrary("cls");
        }
    }
    
  • Скомпилируйте класс в xx.h через javah

    image.png

  • написать проект на с++

    image.png

    image.png

  • генерировать dll

    ctrl/command + F9

  • Скопируйте dll в свой собственный каталог jdk\jre\lib

  • Java-вызов

    image.png

  • Эффект

    Kapture 2021-09-18 at 12.40.31.gif

2. Рисование Луны

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

Примечание. Его нельзя запустить в идее, вам нужно перейти в терминал, чтобы запустить его, чтобы он был эффективным.