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

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

思路

  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
1
2
3
4
5
6
7
8
9
10
11
12
13
java复制代码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

二、绘制月亮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
java复制代码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运行,要去终端运行才有效果

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%