当前位置: 首页 > news >正文

java后端开发day25--阶段项目(二)

在这里插入图片描述
(以下内容全部来自上述课程)
在这里插入图片描述

1.美化界面

请添加图片描述

private void initImage() {//路径分两种://1.绝对路径:从盘符开始写的路径   D:\\aaa\\bbb\\ccc.jpg//2.相对路径:从当前项目开始写的路径  aaa\\bbb\\ccc.jpg//添加图片的时候,就需要按照二维数组中管理的数据添加图片//外循环----把内循环的代码重复执行4次for (int i = 0; i < 4; i++) {//内循环----表示在一行中放4个图片for (int j = 0; j < 4; j++) {//获取二维数组中每个索引对应的数字int number = arr[i][j];//创建一个图片ImageIcon对象     参数:图片的路径(没加图片,意思一下得了)//这里的图片最好命名为数字ImageIcon icon = new ImageIcon("image\\background\\"+number+".jpg");//创建一个JLabel对象(管理容器)JLabel jLabel = new JLabel(icon);//设置图片的位置jLabel.setBounds(105*j+83,105*i+134,105,105);//给图片添加边框jLabel.setBorder(new BevelBorder(1));//把JLabel对象添加到界面中this.getContentPane().add(jLabel);//添加一次后number自增1,表示下一次加载后面一张图片}}//细节://先加载的图片在上方,后加载的图片在下方//添加背景图片ImageIcon background = new ImageIcon("image\\background\\background.jpg");JLabel backgroundJLabel = new JLabel(background);backgroundJLabel.setBounds(40,40,508,560);//把背景图片添加到界面中this.getContentPane().add(backgroundJLabel);}

2.上下移动

上移动:
向上移动实际上就是把空白方块下方的图片上移。
请添加图片描述
(新加代码,非完整)


public class GameJFrame extends javax.swing.JFrame implements KeyListener {//记录空白方块的位置int x = 0;int y = 0;private void initImage() {//清空原本已经出现的图片this.getContentPane().removeAll();}private void initJFrame() {//给整个界面添加键盘监听this.addKeyListener(this);}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {//对应键盘上的上下左右键//获取键盘上的键码int keyCode = e.getKeyCode();System.out.println(keyCode);if (keyCode == 38) {System.out.println("上");if (x == 3) {//已经到底了,什么都不做return;}//逻辑://把空白方块下方的数字往上移动//x,y  表示空白方块//x+1,y  表示空白方块上的位置//把x+1,y位置上的数字赋值给x,y位置arr[x][y] = arr[x+1][y];arr[x+1][y] = 0;//空白方块的位置发生了改变x++;//重新初始化图片initImage();} else if (keyCode == 40) {if (x == 0) {//已经到底了,什么都不做return;}System.out.println("下");arr[x][y] = arr[x-1][y];arr[x-1][y] = 0;//空白方块的位置发生了改变x--;//重新初始化图片initImage();} else if (keyCode == 37) {if (y == 3) {//已经到底了,什么都不做return;}System.out.println("左");arr[x][y] = arr[x][y+1];arr[x][y+1] = 0;//空白方块的位置发生了改变y++;//重新初始化图片initImage();} else if (keyCode == 39) {if (y == 0) {//已经到底了,什么都不做return;}System.out.println("右");arr[x][y] = arr[x][y-1];arr[x][y-1] = 0;//空白方块的位置发生了改变y--;//重新初始化图片initImage();} else {System.out.println("其他");}}
}

3.查看完整图片的功能

按住A不松开,显示完整图片
松开A显示随机打乱的图片
(新加代码,非完整)

    //定义一个变量,记录当前展示图片的路径String path = "";private void initImage() {//清空原本已经出现的图片this.getContentPane().removeAll();//..........//刷新界面this.getContentPane().repaint();}//监听上一步添加过了,直接用,修改方法即可//按下不松,一直触发@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();if (code == 65) {//把界面中的所有图片全部删除this.getContentPane().removeAll();//加载第一张完整的图片JLabel allJLabel = new JLabel(new ImageIcon(path+"all.jpg"));//设置图片的位置allJLabel.setBounds(83,134,420,420);//把图片添加到界面中this.getContentPane().add(allJLabel);//加载背景图片ImageIcon background = new ImageIcon("image\\background\\background.jpg");JLabel backgroundJLabel = new JLabel(background);backgroundJLabel.setBounds(40,40,508,560);//把背景图片添加到界面中this.getContentPane().add(backgroundJLabel);//刷新界面this.getContentPane().repaint();}}@Overridepublic void keyReleased(KeyEvent e) {//...........} else if( keyCode == 65){initImage();}}
}

4.作弊码

按一下W,直接胜利
keyReleased方法体中添加:
(新加代码,非完整)

else if (keyCode == 87) {arr = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};initImage();

5.判断胜利

其实就是判断二维数组中的数字是否按照顺序进行排列
如果按照顺序进行排列的,那么显示胜利的图片

实现步骤:

  1. 定义一个正确的二维数组win
  2. 在加载图片之前,先判断一下二维数组中的数字跟win数组中是否相同
  3. 如果相同展示正确图标
  4. 如果不同则不展示正确图标

(新加代码,非完整)

//定义一个二维数组,存储正确的数据int[][] win = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};private void initImage() {
//....//判断游戏是否结束if (isWin()) {//显示胜利的图片ImageIcon winIcon = new ImageIcon("image\\win.jpg");JLabel winJLabel = new JLabel(winIcon);winJLabel.setBounds(203,283,197,73);this.getContentPane().add(winJLabel);}//........
}public void keyReleased(KeyEvent e) {//判断游戏是否胜利,如果胜利,此方法直接结束if (isWin()) {//1.返回结果//2.结束方法return;
//........}
}//判断游戏是否胜利public boolean isWin(){for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {if (arr[i][j] != win[i][j]){return false;}}}return true;}

6.计步功能

//定义变量,记录步数int step = 0;private void initImage() {
//........
JLabel stepCount = new JLabel("步数:"+step);stepCount.setBounds(50,30,100,20);this.getContentPane().add(stepCount);//........
}// keyReleased  截止到现在的完整代码@Overridepublic void keyReleased(KeyEvent e) {//判断游戏是否胜利,如果胜利,此方法直接结束if (isWin()) {//1.返回结果//2.结束方法return;}//对应键盘上的上下左右键//获取键盘上的键码int keyCode = e.getKeyCode();System.out.println(keyCode);if (keyCode == 38) {System.out.println("上");if (x == 3) {//已经到底了,什么都不做return;}//逻辑://把空白方块下方的数字往上移动//x,y  表示空白方块//x+1,y  表示空白方块上的位置//把x+1,y位置上的数字赋值给x,y位置arr[x][y] = arr[x+1][y];arr[x+1][y] = 0;//空白方块的位置发生了改变x++;step++;//重新初始化图片initImage();} else if (keyCode == 40) {if (x == 0) {//已经到底了,什么都不做return;}System.out.println("下");arr[x][y] = arr[x-1][y];arr[x-1][y] = 0;//空白方块的位置发生了改变x--;step++;//重新初始化图片initImage();} else if (keyCode == 37) {if (y == 3) {//已经到底了,什么都不做return;}System.out.println("左");arr[x][y] = arr[x][y+1];arr[x][y+1] = 0;//空白方块的位置发生了改变y++;step++;//重新初始化图片initImage();} else if (keyCode == 39) {if (y == 0) {//已经到底了,什么都不做return;}System.out.println("右");arr[x][y] = arr[x][y-1];arr[x][y-1] = 0;//空白方块的位置发生了改变y--;step++;//重新初始化图片initImage();} else if( keyCode == 65){initImage();} else if (keyCode == 87) {arr = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};initImage();}}

7.菜单功能

1.重新开始

  1. 给重新游戏绑定点击事件---------->ActionListener
  2. 重新打乱二维数组中的数字
  3. 加载图片
  4. 计步器清零

2.关闭游戏

  1. 给关闭游戏绑定事件
  2. 结束虚拟机,关闭所有

3.关于我们

请添加图片描述

4.代码

(新加代码,非完整)

public class GameJFrame extends javax.swing.JFrame implements KeyListener , ActionListener {//把条目添加到选项中  -----   移到成员位置functionJMenu.add(replayJMenuItem);functionJMenu.add(reLoginJMenuItem);functionJMenu.add(closeJMenuItem);aboutJMenu.add(accountItem);}private void initJMenuBar() {//.........//给条目绑定事件replayJMenuItem.addActionListener(this);reLoginJMenuItem.addActionListener(this);closeJMenuItem.addActionListener(this);accountItem.addActionListener(this);
}
//initData  截止到现在的完整代码private void initData() {//1.定义一个一维数组int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.随机打乱一维数组中的数据for (int i = 0; i < tempArr.length; i++) {//获取随机索引int randomIndex = (int)(Math.random()*tempArr.length);//拿着随机索引对应的值和i索引对应的值进行交换int temp = tempArr[i];tempArr[i] = tempArr[randomIndex];tempArr[randomIndex] = temp;}//3.遍历一维数组for (int i = 0; i < tempArr.length; i++) {if (tempArr[i] == 0) {x = i / 4;y = i % 4;} arr[i / 4][i % 4] = tempArr[i];}System.out.println();}@Overridepublic void actionPerformed(ActionEvent e) {//获取被点击的条目对象Object obj = e.getSource();if (obj == replayJMenuItem) {System.out.println("重新游戏");//步数清零step = 0;//重新打乱数据initData();//重新初始化图片initImage();} else if (obj == reLoginJMenuItem) {System.out.println("重新登录");//关闭当前登录的界面this.setVisible(false);//打开登录界面new LoginJFrame();} else if (obj == closeJMenuItem) {System.out.println("关闭游戏");System.exit(0);} else if (obj == accountItem) {System.out.println("公众号");//创建一个弹窗对象JDialog jDialog = new JDialog();//创建一个管理图片的容器JLabel jLabel = new JLabel(new ImageIcon("image\\account.jpg"));//设置位置和宽高jLabel.setBounds(0,0,258,258);//把图片添加到弹窗中jDialog.getContentPane().add(jLabel);//设置弹窗的宽高jDialog.setSize(280,316);//设置弹窗置顶jDialog.setAlwaysOnTop(true);//设置弹窗居中jDialog.setLocationRelativeTo(null);//弹框不关闭无法操作下面的界面jDialog.setModal(true);//让弹窗显示出来jDialog.setVisible(true);}}

8.游戏打包exe(概括)

  1. 一定要包含图形化界面
  2. 代码要打包起来
  3. 游戏用到的图片也要打包起来
  4. JDK也要打包起来

步骤:

  1. 把所有代码打包成一个压缩包,jar后缀的压缩包
  2. 把jar包转换成exe安装包
  3. 把第二步的exe,图片,JDK整合在一起,变成最终的exe安装包

9.所有完整代码

1.GameJFrame

package com.woziji.ui;import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;public class GameJFrame extends javax.swing.JFrame implements KeyListener , ActionListener {//JFrame 界面,窗体//子类呢? 也表示界面,窗体//规定:GameJFrame 表示游戏的主界面//以后和游戏相关的所有逻辑都写在这个类中//用来管理数据int[][] arr = new int[4][4];//记录空白方块的位置int x = 0;int y = 0;//定义一个变量,记录当前展示图片的路径String path = "";//定义一个二维数组,存储正确的数据int[][] win = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};//定义变量,记录步数int step = 0;//创建选项下面的条目对象JMenuItem replayJMenuItem = new JMenuItem("重新游戏");JMenuItem reLoginJMenuItem = new JMenuItem("重新登录");JMenuItem closeJMenuItem = new JMenuItem("关闭游戏");JMenuItem accountItem = new JMenuItem("公众号");public GameJFrame() {//初始化界面initJFrame();//初始化菜单initJMenuBar();//初始化数据(打乱)initData();//初始化图片initImage();//让界面显示出来,建议写在最后this.setVisible(true);}private void initData() {//1.定义一个一维数组int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.随机打乱一维数组中的数据for (int i = 0; i < tempArr.length; i++) {//获取随机索引int randomIndex = (int)(Math.random()*tempArr.length);//拿着随机索引对应的值和i索引对应的值进行交换int temp = tempArr[i];tempArr[i] = tempArr[randomIndex];tempArr[randomIndex] = temp;}//3.遍历一维数组for (int i = 0; i < tempArr.length; i++) {if (tempArr[i] == 0) {x = i / 4;y = i % 4;}arr[i / 4][i % 4] = tempArr[i];}System.out.println();}private void initImage() {//清空原本已经出现的图片this.getContentPane().removeAll();//判断游戏是否结束if (isWin()) {//显示胜利的图片ImageIcon winIcon = new ImageIcon("image\\win.jpg");JLabel winJLabel = new JLabel(winIcon);winJLabel.setBounds(203,283,197,73);this.getContentPane().add(winJLabel);}JLabel stepCount = new JLabel("步数:"+step);stepCount.setBounds(50,30,100,20);this.getContentPane().add(stepCount);//路径分两种://1.绝对路径:从盘符开始写的路径   D:\\aaa\\bbb\\ccc.jpg//2.相对路径:从当前项目开始写的路径  aaa\\bbb\\ccc.jpg//添加图片的时候,就需要按照二维数组中管理的数据添加图片//外循环----把内循环的代码重复执行4次for (int i = 0; i < 4; i++) {//内循环----表示在一行中放4个图片for (int j = 0; j < 4; j++) {//获取二维数组中每个索引对应的数字int number = arr[i][j];//创建一个图片ImageIcon对象     参数:图片的路径(没加图片,意思一下得了)//这里的图片最好命名为数字ImageIcon icon = new ImageIcon("image\\background\\"+number+".jpg");//创建一个JLabel对象(管理容器)JLabel jLabel = new JLabel(icon);//设置图片的位置jLabel.setBounds(105*j+83,105*i+134,105,105);//给图片添加边框jLabel.setBorder(new BevelBorder(1));//把JLabel对象添加到界面中this.getContentPane().add(jLabel);//添加一次后number自增1,表示下一次加载后面一张图片}}//细节://先加载的图片在上方,后加载的图片在下方//添加背景图片ImageIcon background = new ImageIcon("image\\background\\background.jpg");JLabel backgroundJLabel = new JLabel(background);backgroundJLabel.setBounds(40,40,508,560);//把背景图片添加到界面中this.getContentPane().add(backgroundJLabel);//刷新界面this.getContentPane().repaint();}private void initJMenuBar() {//创建整个的菜单对象JMenuBar JMenuBar = new JMenuBar();//创建菜单上面的两个选项的对象  (功能  关于我们)JMenu functionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("关于我们");//把条目添加到选项中functionJMenu.add(replayJMenuItem);functionJMenu.add(reLoginJMenuItem);functionJMenu.add(closeJMenuItem);aboutJMenu.add(accountItem);//把选项添加到菜单中JMenuBar.add(functionJMenu);JMenuBar.add(aboutJMenu);//把菜单设置到界面中this.setJMenuBar(JMenuBar);//给条目绑定事件replayJMenuItem.addActionListener(this);reLoginJMenuItem.addActionListener(this);closeJMenuItem.addActionListener(this);accountItem.addActionListener(this);}private void initJFrame() {//设置界面的宽高this.setSize(603,680);//设置界面的标题this.setTitle("拼图单机版 v1.0");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置界面的关闭方式this.setDefaultCloseOperation(3);//取消默认的居中放置,只有取消了才可以设置坐标this.setLayout(null);//给整个界面添加键盘监听this.addKeyListener(this);}@Overridepublic void keyTyped(KeyEvent e) {}//按下不松,一直触发@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();if (code == 65) {//把界面中的所有图片全部删除this.getContentPane().removeAll();//加载第一张完整的图片JLabel allJLabel = new JLabel(new ImageIcon(path+"all.jpg"));//设置图片的位置allJLabel.setBounds(83,134,420,420);//把图片添加到界面中this.getContentPane().add(allJLabel);//加载背景图片ImageIcon background = new ImageIcon("image\\background\\background.jpg");JLabel backgroundJLabel = new JLabel(background);backgroundJLabel.setBounds(40,40,508,560);//把背景图片添加到界面中this.getContentPane().add(backgroundJLabel);//刷新界面this.getContentPane().repaint();}}@Overridepublic void keyReleased(KeyEvent e) {//判断游戏是否胜利,如果胜利,此方法直接结束if (isWin()) {//1.返回结果//2.结束方法return;}//对应键盘上的上下左右键//获取键盘上的键码int keyCode = e.getKeyCode();System.out.println(keyCode);if (keyCode == 38) {System.out.println("上");if (x == 3) {//已经到底了,什么都不做return;}//逻辑://把空白方块下方的数字往上移动//x,y  表示空白方块//x+1,y  表示空白方块上的位置//把x+1,y位置上的数字赋值给x,y位置arr[x][y] = arr[x+1][y];arr[x+1][y] = 0;//空白方块的位置发生了改变x++;step++;//重新初始化图片initImage();} else if (keyCode == 40) {if (x == 0) {//已经到底了,什么都不做return;}System.out.println("下");arr[x][y] = arr[x-1][y];arr[x-1][y] = 0;//空白方块的位置发生了改变x--;step++;//重新初始化图片initImage();} else if (keyCode == 37) {if (y == 3) {//已经到底了,什么都不做return;}System.out.println("左");arr[x][y] = arr[x][y+1];arr[x][y+1] = 0;//空白方块的位置发生了改变y++;step++;//重新初始化图片initImage();} else if (keyCode == 39) {if (y == 0) {//已经到底了,什么都不做return;}System.out.println("右");arr[x][y] = arr[x][y-1];arr[x][y-1] = 0;//空白方块的位置发生了改变y--;step++;//重新初始化图片initImage();} else if( keyCode == 65){initImage();} else if (keyCode == 87) {arr = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};initImage();}}//判断游戏是否胜利public boolean isWin(){for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {if (arr[i][j] != win[i][j]){return false;}}}return true;}@Overridepublic void actionPerformed(ActionEvent e) {//获取被点击的条目对象Object obj = e.getSource();if (obj == replayJMenuItem) {System.out.println("重新游戏");//步数清零step = 0;//重新打乱数据initData();//重新初始化图片initImage();} else if (obj == reLoginJMenuItem) {System.out.println("重新登录");//关闭当前登录的界面this.setVisible(false);//打开登录界面new LoginJFrame();} else if (obj == closeJMenuItem) {System.out.println("关闭游戏");System.exit(0);} else if (obj == accountItem) {System.out.println("公众号");//创建一个弹窗对象JDialog jDialog = new JDialog();//创建一个管理图片的容器JLabel jLabel = new JLabel(new ImageIcon("image\\account.jpg"));//设置位置和宽高jLabel.setBounds(0,0,258,258);//把图片添加到弹窗中jDialog.getContentPane().add(jLabel);//设置弹窗的宽高jDialog.setSize(280,316);//设置弹窗置顶jDialog.setAlwaysOnTop(true);//设置弹窗居中jDialog.setLocationRelativeTo(null);//弹框不关闭无法操作下面的界面jDialog.setModal(true);//让弹窗显示出来jDialog.setVisible(true);}}
}

2.LoginJFrame

package com.woziji.ui;import javax.swing.*;public class LoginJFrame extends javax.swing.JFrame{//登录界面//以后和登录相关的所有逻辑都写在这个类中public LoginJFrame(){//在创建登陆界面的时候,同时给这个界面去设置一些信息//比如:宽高,直接展示出来this.setSize(488,430);this.setVisible(true);//设置界面的标题this.setTitle("拼图 登录");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置界面的关闭方式this.setDefaultCloseOperation(3);}
}

3.RegisterJFrame

package com.woziji.ui;public class RegisterJFrame extends javax.swing.JFrame{//注册界面//以后和注册相关的所有逻辑都写在这个类中public RegisterJFrame(){this.setSize(488,500);this.setVisible(true);//设置界面的标题this.setTitle("拼图 注册");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置界面的关闭方式this.setDefaultCloseOperation(3);}
}

4.主入口

import com.woziji.ui.GameJFrame;
import com.woziji.ui.LoginJFrame;
import com.woziji.ui.RegisterJFrame;public class App {public static void main(String[] args) {//表示程序的入口//如果我们想开启一个界面,就创建谁的对象//new LoginJFrame();//new RegisterJFrame();new GameJFrame();}
}

相关文章:

java后端开发day25--阶段项目(二)

&#xff08;以下内容全部来自上述课程&#xff09; 1.美化界面 private void initImage() {//路径分两种&#xff1a;//1.绝对路径&#xff1a;从盘符开始写的路径 D:\\aaa\\bbb\\ccc.jpg//2.相对路径&#xff1a;从当前项目开始写的路径 aaa\\bbb\\ccc.jpg//添加图片的时…...

岚图汽车2月销售8013辆,岚图知音硬核引领智能出行

据官方消息&#xff0c;岚图汽车2月销售8013辆&#xff0c;同比增长152%&#xff0c;品牌势能持续提升。其中&#xff0c;岚图知音依靠强大的产品力&#xff0c;且在OTA 2.0之后&#xff0c;其AI大模型逍遥座舱为用户带来全新的出行体验。 业内专业人士表示&#xff0c;“汽车…...

【CSS—前端快速入门】CSS 常用样式

CSS 常用 CSS 样式 1. 前端样式查询网站&#xff1a; MDN Web Docs (mozilla.org) w3school 2. border 2.1 借助 MDN 了解 border 我们借助 MDN 网站来学习 border 样式的使用&#xff1a; 2.2 border 常见属性 保存代码&#xff0c;打开页面&#xff1a; 对于标签不同样式的…...

【软考-架构】1.3、磁盘-输入输出技术-总线

GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 资料&文章更新 文章目录 存储系统&#x1f4af;考试真题输入输出技术&#x1f4af;考试真题第一题第二题 存储系统 寻道时间是指磁头移动到磁道所需的时间&#xff1b; 等待时间为等待读写的扇区转到…...

Linux软连接与时区日期

软连接 使用ln命令创建软连接。 在系统中创建软连接&#xff0c;可以将文件&#xff0c;文件夹连接到其他为止。 类似于Windows系统的快捷方式。 语法&#xff1a;ln -s 参数1 参数2 -s选项&#xff0c;创建软连接。 参数1&#xff0c;被链接的文件或文件夹。 参数2&#xff0…...

(十)Mapbox GL JS 中点击 Marker 时获取与该 Marker 相关的自定义数据的解决办法

在 Mapbox GL JS 中,如果你想在点击 Marker 时获取与该 Marker 相关的自定义数据,可以通过几种方式将数据绑定到 Marker 上,并在点击时获取这些数据。以下是详细的实现方法,包含代码示例和说明。 方法一:使用 JavaScript 对象属性绑定数据 你可以直接将自定义数据绑定到 …...

PyCharm怎么集成DeepSeek

PyCharm怎么集成DeepSeek 在PyCharm中集成DeepSeek等大语言模型(LLM)可以借助一些插件或通过代码调用API的方式实现,以下为你详细介绍两种方法: 方法一:使用JetBrains AI插件(若支持DeepSeek) JetBrains推出了AI插件来集成大语言模型,不过截至2024年7月,官方插件主要…...

(七)消息队列-Kafka 序列化avro(传递)

&#xff08;七&#xff09;消息队列-Kafka 序列化avro&#xff08;传递&#xff09; 客从远方来&#xff0c;遗我双鲤鱼。呼儿烹鲤鱼&#xff0c;中有尺素书。 ——佚名《饮马长城窟行》 本文已同步CSDN、掘金平台、知乎等多个平台&#xff0c;图片依然保持最初发布的水印&…...

js基础二

JavaScript基础下 1 事件处理 JS 事件&#xff08;event&#xff09;是当用户与网页进行交互时发生的事情&#xff0c;例如单机某个链接或按钮、在文本框中输入文本、按下键盘上的某个按键、移动鼠标等等。当事件发生时&#xff0c;您可以使用 JavaScript 中的事件处理程序&a…...

WSBDF レクチア 定义2 引理3 wsbdf的乘子

定义2 引理3 wsbdf的乘子 ここまで 寝みます❓...

Qt之QStateMachine等待

在项目中经常需要等待&#xff0c;我们模拟0-30的数&#xff0c;假如我们其中5&#xff0c; 25的数需要进行等待&#xff0c;等待用户处理完自己事情后&#xff0c;按下按钮继续&#xff0c;找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…...

Wireshark 插件开发实战指南

Wireshark 插件开发实战指南 环境搭建流程图 #mermaid-svg-XpNibno7BIyfzNn5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XpNibno7BIyfzNn5 .error-icon{fill:#552222;}#mermaid-svg-XpNibno7BIyfzNn5 .error-t…...

基于SpringBoot的“青少年心理健康教育网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“青少年心理健康教育网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 实体属性图 系统首页界…...

23-整数转罗马数字

代码 测试用例 测试结果 测试结果 12. 整数转罗马数字 中等 相关标签 相关企业 七个不同的符号代表罗马数字&#xff0c;其值如下&#xff1a; 符号值I1V5X10L50C100D500M1000 罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以…...

SpringBoot+Redis+Mybatis-plus黑马点评

短信登录 基于Session实现登录 流程&#xff1a; 发送短信验证码-->短信验证码注册登录-->校验登录状态&#xff08;保存用户到ThreadLocal&#xff0c;方便后续使用&#xff09; 不能每次请求服务都要进行登录状态校验&#xff0c;解决办法&#xff1a;拦截器 在Sp…...

深入剖析 OpenCV:全面掌握基础操作、图像处理算法与特征匹配

深入剖析 OpenCV&#xff1a;全面掌握基础操作、图像处理算法与特征匹配 一、引言二、OpenCV 的安装&#xff08;一&#xff09;使用 pip 安装&#xff08;二&#xff09;使用 Anaconda 安装 三、OpenCV 基础操作&#xff08;一&#xff09;图像的读取、显示与保存&#xff08;…...

【C语言显示Linux系统参数】

在C语言中&#xff0c;可以通过调用Linux系统提供的API来获取和显示系统参数。以下是一些常见的系统参数及其获取方法&#xff1a; 1. 获取系统名称和版本 可以使用uname函数来获取系统名称、版本等信息。 #include <stdio.h> #include <sys/utsname.h>int main…...

突破Ajax跨域困境,解锁前端通信新姿势

一、引言 在当今的 Web 开发领域&#xff0c;前后端分离的架构模式已经成为主流&#xff0c;它极大地提升了开发效率和项目的可维护性。在这种开发模式下&#xff0c;前端通过 Ajax 技术与后端进行数据交互&#xff0c;然而&#xff0c;跨域问题却如影随形&#xff0c;成为了开…...

Kotlin协变与逆变区别

在Kotlin中&#xff0c;协变和逆变是泛型编程中的两个重要概念&#xff0c;它们允许我们在类型系统中更加灵活地处理类型关系。 1.协变&#xff1a;协变允许我们使用比原始类型更具体的类型。在kotlin中&#xff0c;通过在类型参数上加out关键字来表示协变,生产者&#xff0c;例…...

driver中为什么要使用非阻塞赋值

1. 模拟硬件时序行为 实际硬件行为&#xff1a;DUT的输入信号通常在时钟边沿被采样。Driver需要确保信号的更新与时钟同步&#xff0c;而非阻塞赋值的延迟更新特性&#xff08;在时间步结束时统一生效&#xff09;能够准确模拟寄存器的行为。 示例&#xff1a; always (posedg…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...