【Python | Java】代码绘制圣诞树

2022-06-03 12:32:38 浏览数 (1)

马上圣诞节了,祝大家圣诞快乐,快来看看程序员的圣诞节都做了什么

Python

效果

源码

代码语言:javascript复制
'''
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 类

代码语言:javascript复制
/*
 * @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 类

代码语言:javascript复制
/*
 * @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 类

代码语言:javascript复制
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;
        }
    }
}

0 人点赞