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.判断胜利
其实就是判断二维数组中的数字是否按照顺序进行排列
如果按照顺序进行排列的,那么显示胜利的图片
实现步骤:
- 定义一个正确的二维数组win
- 在加载图片之前,先判断一下二维数组中的数字跟win数组中是否相同
- 如果相同展示正确图标
- 如果不同则不展示正确图标
(新加代码,非完整)
//定义一个二维数组,存储正确的数据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.重新开始
- 给重新游戏绑定点击事件---------->ActionListener
- 重新打乱二维数组中的数字
- 加载图片
- 计步器清零
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(概括)
- 一定要包含图形化界面
- 代码要打包起来
- 游戏用到的图片也要打包起来
- JDK也要打包起来
步骤:
- 把所有代码打包成一个压缩包,jar后缀的压缩包
- 把jar包转换成exe安装包
- 把第二步的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--阶段项目(二)
(以下内容全部来自上述课程) 1.美化界面 private void initImage() {//路径分两种://1.绝对路径:从盘符开始写的路径 D:\\aaa\\bbb\\ccc.jpg//2.相对路径:从当前项目开始写的路径 aaa\\bbb\\ccc.jpg//添加图片的时…...
Python接口自动化中操作Excel文件的技术方法
在Python接口自动化测试中,操作Excel文件是一项常见且关键的技术需求。Excel作为数据存储和数据分析的重要工具,在自动化测试中通常用于存储测试用例、测试数据以及测试结果。通过Python操作Excel,可以大大提高测试的效率和灵活性。以下是一些…...
几道考研数学题求解
函数性质问题 【题目】 已知函数 f ( x , y ) x 3 y 3 − ( x y ) 2 3 f(x, y) x^3 y^3 - (xy)^2 3 f(x,y)x3y3−(xy)23。设 T T T 为曲面 z f ( x , y ) z f(x, y) zf(x,y) 在点 ( 1 , 1 , 1 ) (1,1,1) (1,1,1) 处的切平面, D D D 为 T T T 与坐标…...
如何在Spring Boot项目中集成JWT实现安全认证?
在Spring Boot项目中集成JWT实现安全认证是常见的需求。本文将详细介绍如何在Spring Boot项目中集成JWT,并通过一个完整的示例演示如何实现安全认证。 一、环境准备 首先,确保你的Spring Boot项目已经创建。然后,添加以下依赖到pom.xml文件…...
【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random
文章目录 一、随机数生成器 是什么 ?二、为什么 需要 随机数生成器 ?三、随机数生成器 基本原理四、随机数生成器 三个输出接口五、随机生成器 应用1、简单应用2、项目应用一、随机数生成器 是什么 ? /dev/random 和 /dev/urandom 是 Linux 上的字符设备文件,它们是随机数…...
Python可视化大框架的研究与应用
## 摘要 随着数据科学和人工智能的快速发展,数据可视化成为了数据分析中不可或缺的一部分。Python作为一种功能强大且易于学习的编程语言,提供了多种可视化工具和库。本文旨在探讨Python可视化的主要框架,分析其特点、应用场景以及未来发展趋…...
Django ORM 的常用字段类型、外键关联的跨表引用技巧,以及 `_` 和 `__` 的使用场景
一、Django ORM 常用字段类型 1. 基础字段类型 字段类型说明示例CharField字符串字段,必须指定 max_lengthname models.CharField(max_length50)IntegerField整数字段age models.IntegerField()BooleanField布尔值字段is_active models.BooleanField()DateFiel…...
(动态规划 最长递增的子序列)leetcode 300
这道题我第一眼反应就是暴力,但是暴力的话就是n*n-1*n-2*...n-(n-1) 也就是O(n^n)dfs做绝对超时 贪心也不行,这里是子序列,要考虑在ni的范围内考虑多种路线取最优,所以用动态规划 如何用动态规划呢? 答:…...
小皮网站搭建
前提:小皮的安装下载 1、在www目录下创建一个新的文件夹,用来存放网站源码; 2、安装数据库管理工具phpMyadmin 3、新建数据表 添加字段 4、创建网站 5、前端的登录代码 注册 后端php 网页展示 登录成功跳转welcome.php...
3.16 AI Agent 技术全景解析:从核心能力到企业级应用实践
AI Agent 技术全景解析:从核心能力到企业级应用实践 关键词:AI Agent 技术架构, 大模型智能体开发, 自主决策系统设计, 模块化 Agent 设计, 企业级 Agent 应用 1. AI Agent 的本质定义与核心能力 AI Agent 是具备环境感知、自主决策和持续进化能力的智能系统,其核心特征可…...
【CSS—前端快速入门】CSS 常用样式
CSS 常用 CSS 样式 1. 前端样式查询网站: MDN Web Docs (mozilla.org) w3school 2. border 2.1 借助 MDN 了解 border 我们借助 MDN 网站来学习 border 样式的使用: 2.2 border 常见属性 保存代码,打开页面: 对于标签不同样式的…...
(七)消息队列-Kafka 序列化avro(传递)
(七)消息队列-Kafka 序列化avro(传递) 客从远方来,遗我双鲤鱼。呼儿烹鲤鱼,中有尺素书。 ——佚名《饮马长城窟行》 本文已同步CSDN、掘金平台、知乎等多个平台,图片依然保持最初发布的水印&…...
springboot使用redis
springboot使用redis redis-service.exe : 服务端,启动后不要关闭 redis-cli.exe : 客户端,访问redis中的数据 redisclient-win32.x86_64.2.0.jar : redis的图形界面客户端,执行方式是在这个文件的目录执行 java -jar redisclient-win32.x86_64.2.0.jar或者在这个jar包的目录…...
【原创】Open WebUI 本地部署
使用官网的默认部署,遇到不少的问题。比如白屏问题,其实需要修改几个参数即可。 其实在部署的时候有不少参数 WEBUI_AUTH False ENABLE_OPENAI_API 0 PATH /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LANG C.UTF-8…...
【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】
一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…...
SpringBoot高校运动会管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.报名赛事代码2.用户登录代码3.保存成绩代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot框架开发的高校运动会管理系统项目。首先,这…...
【Linux网络-HTTP协议】HTTP基础概念+构建HTTP
代码定位:南毅c/Linux - Gitee.com HTTP协议 介绍 虽然我们说,应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。 在互联网世界中,…...
web3.0简介
Web3.0(或简称 Web3)是近年来广泛讨论的一个新型互联网概念,其核心思想在于利用区块链及相关分布式技术,打造一个更加开放、去中心化、透明且以用户为主导的网络生态系统。这意味着在 Web3.0 时代,用户不再只是信息的消…...
高频 SQL 50 题(基础版)_626. 换座位
高频 SQL 50 题(基础版)_626. 换座位 select(case when mod(id,2)!0 AND counts ! id then id1when mod(id,2)!0 AND counts id then idelse id -1end) as id,student fromseat,(selectcount(*) as countsfrom seat) as seat_counts order by id asc;...
hive 面试题
Hive基础概念 1.1 Hive是什么? 基于Hadoop的数据仓库工具,支持类SQL(HiveQL)查询,底层转换为MapReduce/Tez/Spark任务。 核心功能:数据ETL、查询、分析;定位:OLAP(分析…...
【Jenkins】个人向-Jenkinsfile如何写
官方参考:https://www.jenkins.io/doc/book/pipeline/syntax/ Pipeline Utility Steps 插件:https://birdbook.com.cn/ops/ci/jenkins/plugins/pipeline%20utility%20steps.html 常用环境变量 含义表达式备注params,传入参数传入参数params…...
python第十一课:并发编程 | 多任务交响乐团
🎯 本节目标 理解多线程/多进程/协程的应用场景掌握threading与multiprocessing核心用法学会使用asyncio进行异步编程开发实战项目:高并发爬虫引擎破解GIL锁的性能迷思 1️⃣ 并发编程三剑客 🎻 生活化比喻: 多线程 → 餐厅多个…...
Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析
一、功能实现全景视图 目标场景:在Android 14系统级ROM定制中,为SystemUI下拉状态栏的QuickQSPanel区域新增响铃模式切换开关,实现静音/响铃快速切换功能。该功能需通过三层关键改造实现: 二、核心实现三部曲 1. 配置注入&…...
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程的演示都将在 Flink CDC CLI 中进行,无需一行 Java/Scala 代码,也无需安装 IDE。 这篇教程将展示如何基于 Flink CDC YAML 快速构建 MySQL 到 Kafka 的 Streaming ELT 作业,包含整库同步、表结构变更同步演示和关键参数介绍。 准备阶段…...
ubuntu下r8125网卡重启丢失修复案例一则
刚装的一台服务器,ubuntu24.04,主板网卡是r8125,安装服务后会莫名其妙丢失驱动 按照官网的方法下载最新8125驱动包: Realtek 然后卸载驱动 rmmod r8125 然后在驱动包里安装(幸好我之前装了build-essential&#x…...
解决 ERROR 1130 (HY000): Host is not allowed to connect to this MySQL server
当使用 MySQL 时,您可能会遇到错误信息“ERROR 1130 (HY000): Host ‘hostname’is not allowed to connect to this MySQL server”这是 MySQL 用于防止未经授权的访问的标准安全特性。实际上,服务器还没有配置为接受来自相关主机的连接。 Common Caus…...
科普|无人机专业术语
文章目录 前言一、飞控二、电调三、通道四、2S、3S、4S电池五、电池后面C是什么意思?六、电机的型号七、什么是电机的KV值?八、螺旋桨的型号九、电机与螺旋桨的搭配 前言 无人机飞控系统控制飞行姿态,电调控制电机转速,遥控器通道控制飞行动作。电池C…...
Qt:窗口
目录 菜单栏 QMenuBar 菜单添加快捷键 添加子菜单 添加分割线和添加图标 QMenuBar创建方式 工具栏 QToolBar 和菜单栏搭配 创建多个工具栏 状态栏 QStatusBar 状态栏中添加其他控件 浮动窗口 QDockWidget 对话框 对话框的内存释放问题 自定义对话框界面 模态对话…...
深入浅出 Go 语言:协程(Goroutine)详解
深入浅出 Go 语言:协程(Goroutine)详解 引言 Go 语言的协程(goroutine)是其并发模型的核心特性之一。协程允许你轻松地编写并发代码,而不需要复杂的线程管理和锁机制。通过协程,你可以同时执行多个任务,并…...
Python从0到100(八十九):Resnet、LSTM、Shufflenet、CNN四种网络分析及对比
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...
