代码小练习,分别用 python 和 java 实现圣诞树效果
Python
效果
源码
'''
Author: coder-jason
Date: 2021-12-14 15:49:17
LastEditTime: 2021-12-14 16:21:45
'''
from turtle import *
import random
import time
n = 94.0 # main line height
speed("normal") # setting speeds: fast slow fastest slowest
setup(700,650) # setting window size
screensize(bg='seashell')
left(90)
forward(3 * n)
color("orange", "yellow")
begin_fill()
left(126)
for i in range(5):
forward(n / 5)
right(144)
forward(n / 5)
left(72)
end_fill()
right(126)
color("dark green")
backward(n * 4.8)
def tree(d, s):
if d <= 0:
return
forward(s)
tree(d - 1, s * .8)
right(120)
tree(d - 3, s * .5)
right(120)
tree(d - 3, s * .5)
right(120)
backward(s)
tree(15, n)
backward(n / 2)
for i in range(200):
a = 200 - 400 * random.random()
b = 10 - 20 * random.random()
up()
forward(b)
left(90)
forward(a)
down()
if random.randint(0, 1) == 0:
color('tomato')
else:
color('wheat')
circle(2)
up()
backward(a)
right(90)
backward(b)
time.sleep(60)
Java
效果
源码
Start 类
/*
* @Author: coder-jason
* @Date: 2021-12-14 15:26:49
* @LastEditTime: 2021-12-14 16:43:55
*/
package com.christmasTree;
public class Start {
public static void main(String[] args) {
new Frame();
}
}
Frame 类
/*
* @Author: coder-jason
* @Date: 2021-12-14 15:26:49
* @LastEditTime: 2021-12-14 16:43:55
*/
package com.christmasTree;
import javax.swing.*;
public class Frame extends JFrame {
Panel p;
Frame() {
p = new Panel();
add(p);
setBounds(200, 200, 650, 500); //设置窗口尺寸和位置 x,y坐标 width,height窗口宽高
setVisible(true);
validate();
setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
}
}
Panel 类
package com.christmasTree;
import javax.swing.*;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
public class Panel extends JPanel implements ActionListener {
int x, y;
JButton onOff;
Timer time;
boolean flag;
boolean color;
File file = new File("your music location");
URL url = null;
URI uri = null;
AudioClip clip = null;
Panel() {
setLayout(null);
ImageIcon icon = new ImageIcon("off.png");
icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));
onOff = new JButton();
onOff.addActionListener(this);
onOff.setIcon(icon);
onOff.setBorder(null);
onOff.setContentAreaFilled(false);
onOff.setBounds(0, 0, 50, 50);
add(onOff);
flag = true;
color = true;
time = new Timer(300, this);
time.stop();
try {
uri = file.toURI();
url = uri.toURL();
} catch (MalformedURLException e1) {
}
clip = Applet.newAudioClip(url);
}
public void paintComponent(Graphics g) {
x = 380;
y = 100;
if (color) {
ImageIcon image1 = new ImageIcon("star1.png");
g.drawImage(image1.getImage(), x - 3, y - 25, 28, 26, null);
} else {
ImageIcon image1 = new ImageIcon("star2.png");
g.drawImage(image1.getImage(), x - 3, y - 25, 25, 25, null);
}
Color red = new Color(255, 0, 0);
Color yellow = new Color(255, 241, 0);
drawTree(1, 4, g);
if (color) {
drawDecoration(x + 22, y - 44, 6, yellow, g);
drawDecoration(x, y - 22, 8, red, g);
} else {
drawDecoration(x + 22, y - 44, 6, red, g);
drawDecoration(x, y - 22, 8, yellow, g);
}
x = 380 - 2 * 22;
drawTree(3, 6, g);
if (color) {
drawDecoration(x + 22, y - 44, 10, yellow, g);
drawDecoration(x, y - 22, 12, red, g);
} else {
drawDecoration(x + 22, y - 44, 10, red, g);
drawDecoration(x, y - 22, 12, yellow, g);
}
x = 380 - 4 * 22;
drawTree(5, 8, g);
if (color) {
drawDecoration(x + 22, y - 44, 14, yellow, g);
drawDecoration(x, y - 22, 16, red, g);
} else {
drawDecoration(x + 22, y - 44, 14, red, g);
drawDecoration(x, y - 22, 16, yellow, g);
}
x = 380 - 1 * 22;
drwaRoot(g);
}
void drawTree(int from, int to, Graphics g) {
Color c = new Color(9, 124, 37);
g.setColor(c);
for (int i = from; i <= to; i++) {
for (int j = 0; j < (i * 2 - 1); j++) {
g.fillRect(x, y, 20, 20);
x += 22;
}
x = 380 - i * 22;
y += 22;
}
}
void drawDecoration(int tx, int ty, int num, Color c, Graphics g) {
g.setColor(c);
g.fillRoundRect(tx, ty, 18, 18, 18, 18);
g.fillRoundRect(tx + num * 22, ty, 18, 18, 18, 18);
}
void drwaRoot(Graphics g) {
Color c = new Color(131, 78, 0);
g.setColor(c);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
g.fillRect(x, y, 20, 20);
x += 22;
}
x = 380 - 1 * 22;
y += 22;
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == onOff) {
if (flag) {
ImageIcon icon = new ImageIcon("on.png");
icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));
onOff.setIcon(icon);
flag = false;
clip.loop();
time.restart();
} else {
ImageIcon icon = new ImageIcon("off.png");
icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));
onOff.setIcon(icon);
flag = true;
time.stop();
clip.stop();
}
} else if (e.getSource() == time) {
repaint();
color = !color;
}
}
}