Java 贪吃蛇游戏
这段 Java 代码实现了一个经典的贪吃蛇游戏。玩家可以使用键盘的上下左右箭头键控制蛇的移动方向,蛇会在游戏面板中移动并尝试吃掉随机生成的食物。每吃掉一个食物,蛇的身体会变长,玩家的得分也会增加。如果蛇撞到自己的身体或者撞到游戏面板的边界,游戏就会结束。
类和方法详细说明
类定义
java
public class SnakeGame extends JPanel implements ActionListener {
SnakeGame
类继承自JPanel
,用于创建游戏面板。- 实现了
ActionListener
接口,用于处理定时器触发的事件。
常量定义
java
static final int SCREEN_WIDTH = 600;
static final int SCREEN_HEIGHT = 600;
static final int UNIT_SIZE = 25;
static final int GAME_UNITS = (SCREEN_WIDTH * SCREEN_HEIGHT) / UNIT_SIZE;
static final int DELAY = 75;
SCREEN_WIDTH
和SCREEN_HEIGHT
:定义游戏面板的宽度和高度,单位为像素。UNIT_SIZE
:定义游戏中每个格子的大小,单位为像素。GAME_UNITS
:计算游戏面板中总的格子数量。DELAY
:定义游戏的延迟时间,单位为毫秒,用于控制蛇的移动速度。
成员变量定义
java
final int x[] = new int[GAME_UNITS];
final int y[] = new int[GAME_UNITS];
int bodyParts = 6;
int applesEaten;
int appleX;
int appleY;
char direction = 'R';
boolean running = false;
Timer timer;
Random random;
x[]
和y[]
:存储蛇的身体每个部分的 x 和 y 坐标。bodyParts
:蛇的初始身体长度。applesEaten
:记录蛇吃掉的食物数量,即玩家的得分。appleX
和appleY
:食物的 x 和 y 坐标。direction
:蛇的移动方向,初始为向右('R'
)。running
:表示游戏是否正在运行的标志。timer
:定时器,用于控制游戏的更新。random
:随机数生成器,用于随机生成食物的位置。
构造函数
java
SnakeGame() {random = new Random();this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT));this.setBackground(Color.black);this.setFocusable(true);this.addKeyListener(new MyKeyAdapter());startGame();
}
- 初始化随机数生成器。
- 设置游戏面板的首选大小、背景颜色。
- 使游戏面板可获得焦点,以便接收键盘事件。
- 添加键盘事件监听器。
- 调用
startGame()
方法开始游戏。
开始游戏方法
java
public void startGame() {newApple();running = true;timer = new Timer(DELAY, this);timer.start();
}
- 调用
newApple()
方法生成新的食物。 - 将
running
标志设置为true
,表示游戏开始运行。 - 创建一个定时器,每隔
DELAY
毫秒触发一次actionPerformed()
方法。 - 启动定时器。
绘制组件方法
java
public void paintComponent(Graphics g) {super.paintComponent(g);draw(g);
}
- 重写
paintComponent()
方法,调用父类的paintComponent()
方法进行默认绘制。 - 调用
draw()
方法绘制游戏元素。
绘制游戏元素方法
java
public void draw(Graphics g) {if (running) {g.setColor(Color.red);g.fillOval(appleX, appleY, UNIT_SIZE, UNIT_SIZE);for (int i = 0; i < bodyParts; i++) {if (i == 0) {g.setColor(Color.green);} else {g.setColor(new Color(45, 180, 0));}g.fillRect(x[i], y[i], UNIT_SIZE, UNIT_SIZE);}g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 40));FontMetrics metrics = getFontMetrics(g.getFont());g.drawString("Score: " + applesEaten, (SCREEN_WIDTH - metrics.stringWidth("Score: " + applesEaten)) / 2, g.getFont().getSize());} else {gameOver(g);}
}
- 如果游戏正在运行:
- 将画笔颜色设置为红色,绘制一个圆形表示食物。
- 遍历蛇的身体部分,将蛇头设置为绿色,身体其他部分设置为深绿色,绘制矩形表示蛇的身体。
- 绘制当前得分,居中显示在游戏面板上方。
- 如果游戏结束,调用
gameOver()
方法显示游戏结束信息。
生成新食物方法
java
public void newApple() {appleX = random.nextInt((int) (SCREEN_WIDTH / UNIT_SIZE)) * UNIT_SIZE;appleY = random.nextInt((int) (SCREEN_HEIGHT / UNIT_SIZE)) * UNIT_SIZE;
}
- 使用随机数生成器随机生成食物的 x 和 y 坐标,确保食物的位置在游戏面板的格子内。
移动蛇的方法
java
public void move() {for (int i = bodyParts; i > 0; i--) {x[i] = x[i - 1];y[i] = y[i - 1];}switch (direction) {case 'U':y[0] = y[0] - UNIT_SIZE;break;case 'D':y[0] = y[0] + UNIT_SIZE;break;case 'L':x[0] = x[0] - UNIT_SIZE;break;case 'R':x[0] = x[0] + UNIT_SIZE;break;}
}
- 遍历蛇的身体部分,将每个部分的坐标更新为前一个部分的坐标。
- 根据蛇的移动方向,更新蛇头的坐标。
检查是否吃到食物的方法
java
public void checkApple() {if ((x[0] == appleX) && (y[0] == appleY)) {bodyParts++;applesEaten++;newApple();}
}
- 检查蛇头的坐标是否与食物的坐标相同。
- 如果相同,蛇的身体长度加 1,得分加 1,调用
newApple()
方法生成新的食物。
检查碰撞的方法
java
public void checkCollisions() {for (int i = bodyParts; i > 0; i--) {if ((x[0] == x[i]) && (y[0] == y[i])) {running = false;}}if (x[0] < 0) {running = false;}if (x[0] > SCREEN_WIDTH) {running = false;}if (y[0] < 0) {running = false;}if (y[0] > SCREEN_HEIGHT) {running = false;}if (!running) {timer.stop();}
}
- 检查蛇头是否撞到自己的身体,如果是,将
running
标志设置为false
,表示游戏结束。 - 检查蛇头是否撞到游戏面板的边界,如果是,将
running
标志设置为false
。 - 如果游戏结束,停止定时器。
游戏结束的方法
java
public void gameOver(Graphics g) {g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 40));FontMetrics metrics1 = getFontMetrics(g.getFont());g.drawString("Score: " + applesEaten, (SCREEN_WIDTH - metrics1.stringWidth("Score: " + applesEaten)) / 2, g.getFont().getSize());g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 75));FontMetrics metrics2 = getFontMetrics(g.getFont());g.drawString("Game Over", (SCREEN_WIDTH - metrics2.stringWidth("Game Over")) / 2, SCREEN_HEIGHT / 2);
}
- 绘制玩家的最终得分,居中显示在游戏面板上方。
- 绘制 “Game Over” 信息,居中显示在游戏面板中间。
定时器触发的方法
java
@Override
public void actionPerformed(ActionEvent e) {if (running) {move();checkApple();checkCollisions();}repaint();
}
- 如果游戏正在运行,调用
move()
方法移动蛇,调用checkApple()
方法检查是否吃到食物,调用checkCollisions()
方法检查是否发生碰撞。 - 调用
repaint()
方法重新绘制游戏面板。
键盘事件监听器类
java
public class MyKeyAdapter extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:if (direction != 'R') {direction = 'L';}break;case KeyEvent.VK_RIGHT:if (direction != 'L') {direction = 'R';}break;case KeyEvent.VK_UP:if (direction != 'D') {direction = 'U';}break;case KeyEvent.VK_DOWN:if (direction != 'U') {direction = 'D';}break;}}
}
MyKeyAdapter
类继承自KeyAdapter
,用于处理键盘事件。- 当用户按下键盘的上下左右箭头键时,根据当前蛇的移动方向,更新蛇的移动方向,避免蛇直接掉头。
主方法
java
public static void main(String[] args) {JFrame frame = new JFrame("Snake Game");SnakeGame gamePanel = new SnakeGame();frame.add(gamePanel);frame.pack();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setResizable(false);frame.setLocationRelativeTo(null);frame.setVisible(true);
}
- 创建一个
JFrame
窗口,设置窗口标题为 “Snake Game”。 - 创建
SnakeGame
类的实例,将其添加到窗口中。 - 调整窗口大小以适应游戏面板。
- 设置窗口关闭时退出程序。
- 禁止用户调整窗口大小。
- 将窗口居中显示。
- 显示窗口。
完整代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;// 主游戏类
public class SnakeGame extends JPanel implements ActionListener {// 定义游戏面板的大小static final int SCREEN_WIDTH = 600;static final int SCREEN_HEIGHT = 600;// 定义每个格子的大小static final int UNIT_SIZE = 25;// 定义游戏面板的格子数量static final int GAME_UNITS = (SCREEN_WIDTH * SCREEN_HEIGHT) / UNIT_SIZE;// 定义游戏的延迟时间,控制蛇的移动速度static final int DELAY = 75;// 存储蛇的身体坐标final int x[] = new int[GAME_UNITS];final int y[] = new int[GAME_UNITS];// 蛇的初始身体长度int bodyParts = 6;// 食物的数量int applesEaten;// 食物的 x 坐标int appleX;// 食物的 y 坐标int appleY;// 蛇的移动方向,'R' 表示向右char direction = 'R';// 游戏是否正在运行的标志boolean running = false;// 定时器,用于控制游戏的更新Timer timer;// 随机数生成器,用于随机生成食物的位置Random random;// 构造函数,初始化游戏SnakeGame() {random = new Random();this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT));this.setBackground(Color.black);this.setFocusable(true);this.addKeyListener(new MyKeyAdapter());startGame();}// 开始游戏的方法public void startGame() {// 生成新的食物newApple();running = true;// 创建定时器,每隔 DELAY 毫秒触发一次 actionPerformed 方法timer = new Timer(DELAY, this);timer.start();}// 绘制游戏组件的方法public void paintComponent(Graphics g) {super.paintComponent(g);draw(g);}// 绘制游戏元素的方法public void draw(Graphics g) {if (running) {// 绘制食物g.setColor(Color.red);g.fillOval(appleX, appleY, UNIT_SIZE, UNIT_SIZE);// 绘制蛇的身体for (int i = 0; i < bodyParts; i++) {if (i == 0) {g.setColor(Color.green);} else {g.setColor(new Color(45, 180, 0));}g.fillRect(x[i], y[i], UNIT_SIZE, UNIT_SIZE);}// 绘制当前得分g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 40));FontMetrics metrics = getFontMetrics(g.getFont());g.drawString("Score: " + applesEaten, (SCREEN_WIDTH - metrics.stringWidth("Score: " + applesEaten)) / 2, g.getFont().getSize());} else {gameOver(g);}}// 生成新食物的方法public void newApple() {appleX = random.nextInt((int) (SCREEN_WIDTH / UNIT_SIZE)) * UNIT_SIZE;appleY = random.nextInt((int) (SCREEN_HEIGHT / UNIT_SIZE)) * UNIT_SIZE;}// 移动蛇的方法public void move() {for (int i = bodyParts; i > 0; i--) {x[i] = x[i - 1];y[i] = y[i - 1];}switch (direction) {case 'U':y[0] = y[0] - UNIT_SIZE;break;case 'D':y[0] = y[0] + UNIT_SIZE;break;case 'L':x[0] = x[0] - UNIT_SIZE;break;case 'R':x[0] = x[0] + UNIT_SIZE;break;}}// 检查是否吃到食物的方法public void checkApple() {if ((x[0] == appleX) && (y[0] == appleY)) {bodyParts++;applesEaten++;newApple();}}// 检查碰撞的方法public void checkCollisions() {// 检查蛇头是否撞到自己的身体for (int i = bodyParts; i > 0; i--) {if ((x[0] == x[i]) && (y[0] == y[i])) {running = false;}}// 检查蛇头是否撞到边界if (x[0] < 0) {running = false;}if (x[0] > SCREEN_WIDTH) {running = false;}if (y[0] < 0) {running = false;}if (y[0] > SCREEN_HEIGHT) {running = false;}if (!running) {timer.stop();}}// 游戏结束的方法public void gameOver(Graphics g) {// 绘制得分g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 40));FontMetrics metrics1 = getFontMetrics(g.getFont());g.drawString("Score: " + applesEaten, (SCREEN_WIDTH - metrics1.stringWidth("Score: " + applesEaten)) / 2, g.getFont().getSize());// 绘制游戏结束信息g.setColor(Color.red);g.setFont(new Font("Ink Free", Font.BOLD, 75));FontMetrics metrics2 = getFontMetrics(g.getFont());g.drawString("Game Over", (SCREEN_WIDTH - metrics2.stringWidth("Game Over")) / 2, SCREEN_HEIGHT / 2);}// 定时器触发的方法,处理游戏逻辑@Overridepublic void actionPerformed(ActionEvent e) {if (running) {move();checkApple();checkCollisions();}repaint();}// 键盘事件监听器类public class MyKeyAdapter extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:if (direction != 'R') {direction = 'L';}break;case KeyEvent.VK_RIGHT:if (direction != 'L') {direction = 'R';}break;case KeyEvent.VK_UP:if (direction != 'D') {direction = 'U';}break;case KeyEvent.VK_DOWN:if (direction != 'U') {direction = 'D';}break;}}}// 主方法,启动游戏public static void main(String[] args) {JFrame frame = new JFrame("Snake Game");SnakeGame gamePanel = new SnakeGame();frame.add(gamePanel);frame.pack();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setResizable(false);frame.setLocationRelativeTo(null);frame.setVisible(true);}
}
相关文章:
Java 贪吃蛇游戏
这段 Java 代码实现了一个经典的贪吃蛇游戏。玩家可以使用键盘的上下左右箭头键控制蛇的移动方向,蛇会在游戏面板中移动并尝试吃掉随机生成的食物。每吃掉一个食物,蛇的身体会变长,玩家的得分也会增加。如果蛇撞到自己的身体或者撞到游戏面板…...
QT图片轮播器(QT实操学习2)
1.项目架构 1.UI界面 2.widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#define TIMEOUT 1 * 1000 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent n…...
mac m1/m2/m3 pyaudio的安装
google了很多方法,也尝试了 issue68的方法, 但是均失败了,但是问deepseek竟然成功了,下面是deepseek r1给出的方法。在M3 pro芯片上可以成功运行. 安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent…...
Appium中元素定位的注意点
应用场景 了解这些注意点可以以后在出错误的时候,更快速的定位问题原因。 示例 使用 find_element_by_xx 或 find_elements_by_xx 的方法,分别传入一个没有的“特征“会是什么结果呢? 核心代码 driver.find_element_by_id("xxx") drive…...
《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》
《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...
[GWCTF 2019]我有一个数据库1 [CVE phpMyAdmin漏洞]
扫出来一些东西 访问/phpmyadmin 发现界面 这里用到了CVE-2018-12613,光速学习 出现漏洞的代码是: $target_blacklist array (import.php, export.php );// If we have a valid target, lets load that script instead if (! empty($_REQUEST[targe…...
spring 常用注解区别及使用场景
1. 组件注册注解 Bean 作用:用于方法上,表示该方法返回的对象由Spring容器管理。通常用于配置类(Configuration)中,注册第三方库或自定义的Bean。 使用场合: 当你需要将非Spring管理的类(如第…...
【后端】【Django】信号使用详解
Django post_save 信号使用详解(循序渐进) 一、信号的基本概念 Django 的 信号(Signal) 允许不同部分的代码在发生某些事件时进行通信,而不需要直接调用。这种机制可以解耦代码,让不同的模块独立工作。 …...
ML算法数学概念
交叉熵损失(Cross-Entropy Loss) 是机器学习和深度学习中常用的一种损失函数,主要用于衡量两个概率分布之间的差异。它在分类问题中(尤其是多分类问题)被广泛使用,因为它能够有效地评估模型预测的概率分布与…...
wps 怎么显示隐藏文字
wps 怎么显示隐藏文字 》文件》选项》视图》勾选“隐藏文字” wps怎么设置隐藏文字 wps怎么设置隐藏文字...
Vue3 其它API Teleport 传送门
Vue3 其它API Teleport 传送门 在定义一个模态框时,父组件的filter属性会影响子组件的position属性,导致模态框定位错误使用Teleport解决这个问题把模态框代码传送到body标签下...
亚马逊玩具品类技术驱动型选品策略:从趋势洞察到合规基建
一、全球玩具电商技术演进趋势 (技术化重构原市场背景) 数据可视化分析:通过亚马逊SP-API抓取2023年玩具品类GMV分布热力图 监管技术升级: 美国CPSC启用AI质检系统(缺陷识别准确率92.7%) 欧盟EPR合规接口…...
SpringBoot3+EasyExcel通过WriteHandler动态实现表头重命名
方案简介 为了通过 EasyExcel 实现动态表头重命名,可以封装一个方法,传入动态的新表头名称列表(List<String>),并结合 WriteHandler 接口来重命名表头。同时,通过 EasyExcel 将数据直接写入到输出流…...
PHY——LAN8720A 寄存器读写 (二)
文章目录 PHY——LAN8720A 寄存器读写 (二)工程配置引脚初始化代码以太网初始化代码PHY 接口实现LAN8720 接口实现PHY 接口测试 PHY——LAN8720A 寄存器读写 (二) 工程配置 这里以野火电子的 F429 开发板为例,配置以太网外设 这里有一点需要注意原理图 RMII_TXD0…...
HTML5和CSS3的一些特性
HTML5 和 CSS3 是现代网页设计的基础技术,它们引入了许多新特性和功能,极大地丰富了网页的表现力和交互能力。 HTML5 的一些重要特性包括: 新的语义化标签: HTML5 引入了一些重要的语义化标签如 <header>, <footer>, <articl…...
sass报错,忽略 Sass 弃用警告,降级版本
最有效的方法是创建一个 .sassrc.json 文件来配置 Sass 编译器。告诉 Sass 编译器忽略来自依赖项的警告消息。 解决方案: 1. 在项目根目录创建 .sassrc.json 文件: {"quietDeps": true }这个配置会让 Sass 编译器忽略所有来自依赖项&#x…...
DeepSeek+Kimi:PPT制作的效率革命
摘要:传统PPT制作面临模板选择困难、内容逻辑混乱、设计排版能力有限以及反复修改等问题。DeepSeek和Kimi两款AI工具的组合为PPT制作提供了全新的解决方案。DeepSeek擅长内容生成与逻辑推理,能够快速生成高质量的PPT大纲和内容;Kimi则专注于长…...
transformers中学习率warmup策略具体如何设置
在使用 get_linear_schedule_with_warmup(如 Hugging Face Transformers 库中的学习率调度器)时,参数的合理设置需要结合 数据量(dataset size)、批次大小(batch size) 和 训练轮数(…...
linux实现rsync+sersync实时数据备份
1.概述 rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具 2.端口和运行模式 tcp/873 采用C/S模式(客户端/服务器模式) 3.特点 可以镜像保存整个目录和文件第一次全量备份(备份全部的文件),之后是增量备份(只备份变化的文件) 4. 数…...
CTF类题目复现总结-[MRCTF2020]ezmisc 1
一、题目地址 https://buuoj.cn/challenges#[MRCTF2020]ezmisc二、复现步骤 1、下载附件,得到一张图片; 2、利用010 Editor打开图片,提示CRC值校验错误,flag.png应该是宽和高被修改了,导致flag被隐藏掉;…...
『Linux』 第十一章 线程同步与互斥
1. 线程互斥 1.1 进程线程间的互斥相关背景概念 临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界…...
【数据结构】队列
目录 一、队列1、概念与结构2、队列的实现3、队列的初始化4、打印队列数据5、入队6、销毁队列7、队列判空8、出队9、取队头、队尾数据10、队列中有效元素个数 二、源码 个人主页,点击这里~ 数据结构专栏,点击这里~ 一、队列 1、概念与结构 概念&#x…...
【导航定位】GNSS数据协议-RINEX OBS
RINEX协议 RINEX(Receiver INdependent EXchange format,与接收机无关的交换格式)是一种在GPS测量应用中普遍采用的标准数据格式,该格式采用文本文件形式(ASCII码)存储数据数据记录格式与接收机的制造厂商和具体型号无关。目前RINEX版本已经发布到了4.x…...
Qt中的事件循环
Qt的事件循环是其核心机制之一,它是一种消息处理机制,负责处理各种事件(如用户输入、定时器、网络请求等)的分发和处理。Qt中的事件循环是一个持续运行的循环,负责接收事件并将它们分发给相应的对象进行处理。当没有事件需要处理时࿰…...
Android并发编程:线程池与协程的核心区别与最佳实践指南
1. 基本概念对比 特性 线程池 (ThreadPool) 协程 (Coroutine) 本质 Java线程管理机制 Kotlin轻量级并发框架 最小执行单元 线程(Thread) 协程(Coroutine) 创建开销 较高(需分配系统线程资源) 极低(用户态调度) 并发模型 基于线程的抢占式调度 基于协程的协作式调度 2. 核心差异…...
吴恩达深度学习复盘(2)神经网络的基本原理轮廓
笔者注 这两节课主要介绍了神经网络的大的轮廓。而神经网络基本上是在模拟人类大脑的工作模式,有些仿生学的意味。为了便于理解,搜集了一些脑神经的资料,这部分是课程中没有讲到的。 首先要了解一下大脑神经元之间结构。 细胞体࿱…...
【redis】集群 数据分片算法:哈希求余、一致性哈希、哈希槽分区算法
文章目录 什么是集群数据分片算法哈希求余分片搬运 一致性哈希扩容 哈希槽分区算法扩容相关问题 什么是集群 广义的集群,只要你是多个机器,构成了分布式系统,都可以称为是一个“集群” 前面的“主从结构”和“哨兵模式”可以称为是“广义的…...
计算机组成原理笔记(六)——2.2机器数的定点表示和浮点表示
计算机在进行算术运算时,需要指出小数点的位置,根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。 2.2.1定点表示法 一、基本概念 定点表示法是一种小数点的位置固定不变的数据表示方式,用于表示整数或…...
将树莓派5当做Ollama服务器,C#调用generate的API的示例
其实完全没这个必要,性能用脚后跟想都会很差。但基于上一篇文章的成果,来都来了就先简单试试吧。 先来看看这个拼夕夕上五百多块钱能达到的效果: 只要对速度没要求,那感觉就还行。 Ollama默认只在本地回环(127.0.0…...
MYSQL数据库(一)
一.数据库的操作 1.显示数据库 show databases; 2.创建数据库 create database 数据库名; 3.使用数据库 use 数据库名; 4.删除数据库 drop database 数据库名; drop database if exists 数据库名; 二.表的操作 1.显示所有表 show tables; 2.查看表结构 des…...
Python Cookbook-4.15 字典的一键多值
任务 需要一个字典,能够将每个键映射到多个值上。 解决方案 正常情况下,字典是一对一映射的,但要实现一对多映射也不难,换句话说,即一个键对应多个值。你有两个可选方案,但具体要看你怎么看待键的多个对…...
IDEA 终端 vs CMD:为什么 java -version 显示的 JDK 版本不一致?
前言:离谱的 JDK 版本问题 今天遇到了一个让人抓狂的现象:在 Windows 的 CMD 里输入 java -version 和在 IntelliJ IDEA 终端输入 java -version,居然显示了不同的 JDK 版本! 本以为是环境变量、缓存或者 IDEA 设置的问题&#x…...
Flask登录页面后点击按钮在远程CentOS上自动执行一条命令
templates文件夹和app.py在同一目录下。 templates文件夹下包括2个文件:index.html login.html app.py代码如下: import os import time from flask import Flask, render_template, request, redirect, session, make_response import mysql.con…...
深度解析:文件夹变白色文件的数据恢复之道
在数字化时代,数据的重要性不言而喻。然而,当我们在使用计算机时,偶尔会遇到一些棘手的问题,其中“文件夹变白色文件”便是一个令人困惑且亟待解决的难题。这一现象不仅影响了文件的正常访问,更可能隐藏着数据丢失的风…...
【Matlab】-- 基于MATLAB的飞蛾扑火算法与反向传播算法的混凝土强度预测
文章目录 文章目录 01 内容概要02 MFO-BP模型03 部分代码04 运行结果05 参考文献06 代码下载 01 内容概要 本资料介绍了一种基于飞蛾扑火算法(Moth Flame Optimization, MFO)与反向传播算法(Backpropagation, BP)的混凝土强度预…...
【Python实例学习笔记】图像相似度计算--哈希算法
【Python实例学习笔记】图像相似度计算--哈希算法 一、哈希算法的实现步骤:二、对每一步都进行注解的代码 一、哈希算法的实现步骤: 1、缩小尺寸: 将图像缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图像的细节,…...
2025DevSecOps标杆案例|智能制造国际领导厂商敏捷安全工具链实践
某智能制造国际领导厂商是涵盖智能家居、楼宇科技,工业技术、机器人与自动化和数字化创新业务五大业务板块为一体的全球化科技集团,连续入选《财富》世界500强,每年为全球超过4亿用户、各领域的重要客户与战略合作伙伴提供产品和服务。 数智化…...
【YOLOv11】目标检测任务-实操过程
目录 一、torch环境安装1.1 创建虚拟环境1.2 启动虚拟环境1.3 安装pytorch1.4 验证cuda是否可用 二、yolo模型推理2.1 下载yolo模型2.2 创建模型推理文件2.3 推理结果保存路径 三、labelimg数据标注3.1 安装labelimg3.2 解决浮点数报错3.3 labelimg UI界面介绍3.4 数据标注案例…...
第十七章:Python数据可视化工工具-Pyecharts库
一、Pyecharts简介 资源绑定附上完整资源供读者参考学习! Pyecharts是一个基于百度开源可视化库ECharts的Python数据可视化工具,支持生成交互式的HTML格式图表。相较于Matplotlib等静态图表库,Pyecharts具有以下优势: 丰富的图表…...
解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误
解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误 环境设置 操作系统: macOS硬件平台: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 项目时,我们尝试集成 vite-plugin-top-level-await 插件以支持顶层 await 语法。然而ÿ…...
《八大排序算法》
相关概念 排序:使一串记录,按照其中某个或某些关键字的大小,递增或递减的排列起来。稳定性:它描述了在排序过程中,相等元素的相对顺序是否保持不变。假设在待排序的序列中,有两个元素a和b,它们…...
六十天前端强化训练之第三十七天之Docker 容器化部署实战指南(大师级详解)
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、Docker 核心知识体系 1.1 容器革命:改变开发方式的技术 1.2 Docker 三剑客 1.3 Docker 生命周期管理 1.4 关键命令详解 二、前端容器化实战案例ÿ…...
RabbitMQ--延迟队列事务消息分发
目录 1.延迟队列 1.1应用场景 1.2利用TTL死信队列模拟延迟队列存在的问题 1.3延迟队列插件 1.4常见面试题 2.事务 2.1配置事务管理器 3.消息分发 3.1概念 3.2应用场景 3.2.1限流 3.2.2负载均衡 1.延迟队列 延迟队列(Delayed Queue),即消息被发送以后, 并…...
列表,元组,字典,集合,之间的嵌套关系
在 Python 中,列表、元组、字典和集合的嵌套关系需要遵循各自的特性(如可变性、可哈希性)。以下是它们之间的嵌套规则、示例和典型应用场景的详细梳理: 1. 列表(List)的嵌套 特性: 可变、有序…...
【行驶证识别】批量咕嘎OCR识别行驶证照片复印件图片里的文字信息保存表格或改名字,基于QT和腾讯云api_ocr的实现方式
项目背景 在许多业务场景中,如物流管理、车辆租赁、保险理赔等,常常需要处理大量的行驶证照片复印件。手动录入行驶证上的文字信息,像车主姓名、车辆型号、车牌号码等,不仅效率低下,还容易出现人为错误。借助 OCR(光学字符识别)技术,能够自动识别行驶证图片中的文字信…...
鸿蒙HarmonyOS NEXT设备升级应用数据迁移流程
数据迁移是什么 什么是数据迁移,对用户来讲就是本地数据的迁移,终端设备从HarmonyOS 3.1 Release API 9及之前版本(单框架)迁移到HarmonyOS NEXT(双框架)后保证本地数据不丢失。例如,我在某APP…...
MCP从零开始
MCP简介 MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于去年11月正式提出。MCP解决的最大痛点就是Agent开发中调用外部工具的技术门槛过高的问题。 能调用外部工具,是大模型进化为智能体Agent的关…...
Three.js 快速入门教程【十九】CSS2DRenderer(CSS2D渲染器)介绍,实现场景中物体或设备标注标签信息
系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...
横扫SQL面试——连续性登录问题
横扫SQL面试 📌 连续性登录问题 在互联网公司的SQL面试中,连续性问题堪称“必考之王”。💻🔍 用户连续登录7天送优惠券🌟,服务器连续报警3次触发熔断⚠️,图书馆连续3天人流破百开启限流⚡” …...
爱因斯坦求和 torch
目录 向量点积 矩阵乘法 矩阵转置 向量转换相机坐标系 在 Python 的科学计算库(如 NumPy)中,einsum 是一个强大的函数,它可以简洁地表示各种张量运算。下面是几个不同类型的使用示例: 向量点积 向量点积是两个向量…...