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();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27125.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode通过Roo Cline接入Deepseek

文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程&#xff0c;那如何在vscode编译器中使用deepseek&#xff0c;记录下来&#xff0c;方便备查。 第一步、安装插件 在…

计算机毕业设计SpringBoot+Vue.js智能无人仓库管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

DeepSeek如何快速开发PDF转Word软件

一、引言 如今&#xff0c;在线工具的普及让PDF转Word成为了一个常见需求&#xff0c;常见的PDF转Word工具有收费的WPS&#xff0c;免费的有PDFGear&#xff0c;以及在线工具SmallPDF、iLovePDF、24PDF等。然而&#xff0c;大多数免费在线转换工具存在严重隐私风险——文件需上…

【漫话机器学习系列】109.线性无关(Linearly Independent)

1. 什么是线性无关&#xff1f; 在线性代数中&#xff0c;线性无关是描述向量组的一个重要概念。如果一组向量中的任何一个向量不能由该组中其他向量的线性组合表示出来&#xff0c;那么这些向量就是线性无关的。具体而言&#xff0c;若向量 ​ 是线性无关的&#xff0c;那么不…

蓝桥杯 灯笼大乱斗【算法赛】

问题描述 元宵佳节&#xff0c;一场别开生面的灯笼大赛热闹非凡。NN 位技艺精湛的灯笼师依次落座&#xff0c;每位师傅都有相应的资历值&#xff0c;其中第 ii 位师傅的资历值为 AiAi​。从左到右&#xff0c;师傅们的资历值逐级递增&#xff08;即 A1<A2<⋯<ANA1​&l…

Android15 Camera HAL Android.bp中引用Android.mk编译的libB.so

背景描述 Android15 Camera HAL使用Android.bp脚本来构建系统。假设Camera HAL中引用了另外一个HAL实现的so &#xff08;例如VPU HAL&#xff09;&#xff0c; 恰巧被引用的这个VPU HAL so是用Android.mk构建的&#xff0c;那Camera HAL Android.bp在直接引用这个Android.mk编…

计算机视觉(opencv-python)入门之图像的读取,显示,与保存

在计算机视觉领域&#xff0c;Python的cv2库是一个不可或缺的工具&#xff0c;它提供了丰富的图像处理功能。作为OpenCV的Python接口&#xff0c;cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV 图像格式 BMP格式 …

鸿蒙5.0实战案例:基于原生能力获取视频缩略图

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候&#xff0c;通过命令行注册相应的服务&#xff08;比如cloudwego项目的demo_proto以及user服务&#xff09;失败。 解决办法 经过分析&#xff0c;是…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

数据集笔记:新加坡停车费

data.gov.sg 该数据集包含 新加坡各停车场的停车费&#xff0c;具体信息包括&#xff1a; 停车场名称&#xff08;Carpark&#xff09;&#xff1a;如 Toa Payoh Lorong 8、Ang Mo Kio Hub、Bras Basah Complex 等。停车区域类别&#xff08;Category&#xff09;&#xff1a…

netty如何处理粘包半包

文章目录 NIO中存在问题粘包半包滑动窗口MSS 限制Nagle 算法 解决方案 NIO中存在问题 粘包 现象&#xff0c;发送 abc def&#xff0c;接收 abcdef原因 应用层&#xff1a;接收方 ByteBuf 设置太大&#xff08;Netty 默认 1024&#xff09;滑动窗口&#xff1a;假设发送方 25…

设计模式之责任链模式

引言 在职场中&#xff0c;请假流程大家都再熟悉不过&#xff1a;申请 1 至 2 天的假期&#xff0c;只需直属主管审批即可&#xff1b;若要请假 3 至 5 天&#xff0c;就需部门负责人进行复核&#xff1b;而超过 5 天的假期申请&#xff0c;则必须由总经理最终定夺。要是遇到超…

【漫话机器学习系列】112.逻辑回归(Logistic Regression)

逻辑回归&#xff08;Logistic Regression&#xff09;详解 1. 逻辑回归简介 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛用于二分类任务的统计和机器学习方法&#xff0c;尽管它的名字中带有“回归”&#xff0c;但它实际上是一种分类算法。 在逻辑回归…

大模型function calling:让AI函数调用更智能、更高效

大模型function calling&#xff1a;让AI函数调用更智能、更高效 随着大语言模型&#xff08;LLM&#xff09;的快速发展&#xff0c;其在实际应用中的能力越来越受到关注。Function Calling 是一种新兴的技术&#xff0c;允许大模型与外部工具或API进行交互&#xff0c;从而扩…

通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句

问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时&#xff0c;遇到了 sqlite3.OperationalError 错误。错误信息如下&#xff1a; OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …

计算机毕业设计SpringBoot+Vue.js企业资产管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

前言 最近&#xff0c;我有幸在工作中接触到了DeepSeek R1 671B模型&#xff0c;这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型&#xff0c;以其惊人的6710亿参数量和出色的推理性能&#xff0c;引起了业界广泛关注。 作为一名AI基础…

Qt 文件操作+多线程+网络

文章目录 1. 文件操作1.1 API1.2 例子1&#xff0c;简单记事本1.3 例子2&#xff0c;输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1&#xff0c;自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …

计算机毕业设计SpringBoot+Vue.js公司日常考勤系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…