用java做一个撩妹的烟花特效教学

文章展示了如何利用Java的JFrame创建窗口,结合Graphics2D的绘图功能实现烟花动画效果。代码中通过定时器不断刷新界面,重写JPanel的paintComponent方法绘制烟花。同时,提到了调试器OllyDbg和x64dbg在用户模式调试中的应用。
摘要由CSDN通过智能技术生成

需要使用到 JFrame 和画图工具 Graphics2D

1.创建一个 JFrame 窗口并设置其大小。

JFrame frame = new JFrame("Fireworks");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);

2.创建一个 JPanel,并将其设置为 JFrame 的内容面板。

JPanel panel = new JPanel();
frame.setContentPane(panel);

3.重写 JPanel 的 paintComponent() 方法,在方法中调用 Graphics2D 的 drawOval()、drawLine() 和 fillOval() 方法来绘制烟花效果。

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    int x = 250;
    int y = 250;
    int r = 5;
    int length = 30;
    Color[] colors = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGENTA};

    for (int i = 0; i < 6; i++) {
        g2d.setColor(colors[i]);
        g2d.setStroke(new BasicStroke(2.0f));
        for (int j = 0; j < 12; j++) {
            double angle = (30 * j) * Math.PI / 180;
            int x1 = (int)Math.round(x + r * Math.cos(angle));
            int y1 = (int)Math.round(y + r * Math.sin(angle));
            int x2 = (int)Math.round(x + (r + length) * Math.cos(angle));
            int y2 = (int)Math.round(y + (r + length) * Math.sin(angle));
            g2d.drawLine(x1, y1, x2, y2);
        }
        g2d.fillOval(x - r, y - r, 2 * r, 2 * r);
        r += 10;
        length += 20;
    }
}

4.在 main() 方法中创建一个 Timer,每隔一定时间调用 JPanel 的 repaint() 方法,不断刷新窗口。

public static void main(String[] args) {
    JFrame frame = new JFrame("Fireworks");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);

    JPanel panel = new JPanel() {
        protected void paintComponent(Graphics g) {
            // 绘制烟花效果的代码
        }
    };
    frame.setContentPane(panel);

    int delay = 10;
    ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            panel.repaint();
        }
    };
    new Timer(delay, taskPerformer).start();

    frame.setVisible(true);
}

5.运行程序就可以看到烟花特效啦!

这段代码中,我们使用Python的turtle库来实现烟花效果。在程序开始时,我们通过turtle.Screen()函数创建了一个画布,并设置了背景颜色和大小。接着,我们定义了一个画笔pen,并将其初始化为未下笔状态。然后,我们定义了烟花效果的主要函数firework。该函数首先从颜色列表中随机选择一个颜色,接着在指定位置画出火柴棒,并开始模拟烟花爆炸效果。最后,我们绑定了鼠标点击事件,当用户点击画布时,程序会在鼠标点击的位置调用firework函数。最后,我们通过turtle.mainloop()方法进入主事件循环。

动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。
用户模式调试器: 用来调试用户模式应用程序的调试器,工作在Ring3级,例如OllyDbg、x64dbg。也存在有VisualC++等编译器自带的调试器。
内核模式调试器: 能调试操作系统内核的调试器,例如WinDbg。

OllyDbg
简称OD,用户级调试器。OD是一款十分强大的32位调试器,虽然作者早已停止更新,但作为学习工具还是可以的。实践中建议使用x64dbg的32位版本。

64位平台可以使用x64dbg、IDA Pro等

操作窗口


配置
ollydbg.ini: OD中Options菜单里的所有设置,保存在ollydbg.ini中
UDD文件: OD的工程文件,用于保存当前调试的一些状态,例如断点、注释等,以便下次调试时继续使用。
插件: OD支持插件,并提供了相关api。这使得其扩展性非常好。

调试设置
单击“Options” —“Debugsingoplions” 选项,打开调试设置选项对话框,一般保持默认即可。其中,“Exceptions” (异常)选项用于设置让OllyDbg 忽路或不忽略某些异常,建议全部选择。 有关异常的知识将在第8 章讲解。

加载符号文件
点击“Debug”- "Seleet importlibraries” 选项,打开导入库窗口进行加载。符号文件可以在调试过程中,让函数以函数名字表示。比如存在一个函数叫“abc”,但是在调试器中很可能是一串数字”004012f7“,而符号文件就能让它显示为”abc“。

基本操作
常见快捷键:

断点
常用断点有:INT3断点、硬件断点、消息断点。

INT3断点
当你使用bp命令或者按下F2时,所设的断点为INT3断点。原理是把下断点的地方的指令换成CC指令来引发异常,调试器捕获异常后中断,并把原指令还原。例如:

 复制代码 隐藏代码
004011F3 68 D0404000
||||||||||||
004011F3 CC D0404000
优点: 可以设置无数个INT3断点,只要电脑受得住。
缺点: 由于修改了程序,所以易被检测

硬件断点
设断方法是在指定的代码行单击右键,执行快捷菜单中的“Breakpoint” 一 "Hardware,on execution”(“断点〞一,“硬件执行”)命令(也可以在命令行中设置“HE地址”)
最多可以设置四个硬件断点。

其中DR0、DR1、DR2、DR3可以设定地址,用来断下,DR7用来控制状态。
原理: 设置好断点后,运行到改地址时,CPU会向调试器发送异常,调试器捕获后中断。
优点: 执行速度快,不易被检测
缺点: 只能设置四个

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个使用Python和Pygame库制作动态烟花特效的例子: ```python import pygame import random # 初始化Pygame pygame.init() # 设置窗口大小和标题 size = (800, 600) screen = pygame.display.set_mode(size) pygame.display.set_caption("Fireworks") # 定义颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) COLORS = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)] # 定义烟花粒子类 class Particle(): def __init__(self, x, y, vx, vy, color): self.x = x self.y = y self.vx = vx self.vy = vy self.color = color self.age = 0 self.lifetime = random.randint(20, 50) def update(self): self.age += 1 self.x += self.vx self.y += self.vy self.vy += 0.5 def draw(self, screen): pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), 5) # 定义烟花类 class Firework(): def __init__(self, x, y): self.x = x self.y = y self.particles = [] for i in range(50): speed = random.randint(5, 20) angle = random.uniform(0, 2 * 3.1415926) vx = speed * math.cos(angle) vy = speed * math.sin(angle) color = random.choice(COLORS) self.particles.append(Particle(x, y, vx, vy, color)) def update(self): for particle in self.particles: particle.update() def draw(self, screen): for particle in self.particles: particle.draw(screen) # 创建烟花列表 fireworks = [] # 主循环 done = False clock = pygame.time.Clock() while not done: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 添加新的烟花 if random.random() < 0.1: fireworks.append(Firework(random.randint(0, size[0]), size[1])) # 更新烟花 for firework in fireworks: firework.update() # 绘制背景 screen.fill(BLACK) # 绘制烟花 for firework in fireworks: firework.draw(screen) # 删除已经消失的烟花 fireworks = [firework for firework in fireworks if len(firework.particles) > 0] # 刷新屏幕 pygame.display.flip() # 控制帧率 clock.tick(60) # 退出Pygame pygame.quit() ``` 这段代码使用Pygame创建一个窗口,并在窗口中随机生成烟花。每一个烟花是由许多彩色的粒子构成的,当粒子运动到一定时间后,就会消失。您可以根据需要调整烟花和粒子的参数,以及添加其他效果和声音。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七八八九九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值