飞翔的小鸟——Java

一、创建文件、包、类、插入图片文件

二、app包 

1、Gameapp类(运行游戏)

package app;import main.GameFrame;public class Gameapp {public static void main(String[] args) {//游戏的入口new GameFrame();}
}

三、main包

1、Barrier(障碍物类)

package main;import util.Constant;
import util.GameUtil;import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;/*** 障碍物类*/
public class Barrier {//矩形参数private Rectangle rect;private boolean mob = true;//障碍物移动速度private int speed = 3;//障碍物需要的三个图片private static BufferedImage[] img;//障碍物的状态private boolean visible;static {final int COUNT = 3;//类加载的时候将三个图片初始化img = new BufferedImage[COUNT];for (int i = 0; i < COUNT; i++) {img[i] = GameUtil.loadBufferedImage(Constant.BARRIER_IMG_PATH[i]);}}//位置private int x, y;//宽度和高度private int width, height;//障碍物的类型private int type;public static final int TYPE_TOP_NORMAL = 0;public static final int TYPE_BOTTOM_NORMAL = 2;public static final int TYPE_HOVER_NORMAL = 4;public static final int TYPE_MOBILE = 6;//获得障碍物的宽度和高度public static final int BARRIRE_WIDTH = img[0].getWidth();public static final int BARRIRE_HEIGHT = img[0].getHeight();public static final int BARRIRE_HEAD_WIDTH = img[1].getWidth();public static final int BARRIRE_HEAD_HEIGHT = img[1].getHeight();public Barrier() {rect = new Rectangle();}public Barrier(int x, int y, int height, int type) {this.x = x;this.y = y;this.height = height;this.type = type;this.width = BARRIRE_WIDTH;}//根据不同的类型绘制障碍物public void draw(Graphics g) {switch (type) {case TYPE_TOP_NORMAL:drawTopMormal(g);break;case TYPE_BOTTOM_NORMAL:drawNomalTop(g);break;case TYPE_HOVER_NORMAL:drawHoverNormal(g);break;case TYPE_MOBILE:drawMobile(g);break;}}//绘制从上向下的障碍物private void drawTopMormal(Graphics g) {//求出所需要的障碍物的块数int count = (height - BARRIRE_HEAD_HEIGHT) / BARRIRE_HEIGHT + 1;//for循坏绘制障碍物for (int i = 0; i < count; i++) {g.drawImage(img[0], x, y + i * BARRIRE_HEIGHT, null);}//绘制头int y = height - BARRIRE_HEAD_HEIGHT;g.drawImage(img[2], x - (BARRIRE_HEAD_WIDTH - BARRIRE_WIDTH) / 2, y, null);x -= speed;if (x < 50) {visible = false;}rect(g);}//绘制从下向上的障碍物private void drawNomalTop(Graphics g) {//求出所需要的障碍物的块数int count = height / BARRIRE_HEIGHT + 1;//for循环绘制障碍物for (int i = 0; i < count; i++) {g.drawImage(img[0], x, Constant.FRAM_HEIGNT - i * BARRIRE_HEIGHT, null);}//绘制头int y = Constant.FRAM_HEIGNT - height;g.drawImage(img[1], x - (BARRIRE_HEAD_WIDTH - BARRIRE_WIDTH) / 2, y, null);x -= speed;if (x < -50) {visible = false;}rect(g);}//绘制中间的障碍物private void drawHoverNormal(Graphics g) {//求出所需要的障碍物的块数int count = (height-BARRIRE_HEAD_HEIGHT)/BARRIRE_HEIGHT;//绘制上头g.drawImage(img[1],x,y,null);//for循环绘制障碍物for (int i = 0; i < count; i++) {g.drawImage(img[0], x, y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);}rect(g);//绘制下头int y11 = y+height-BARRIRE_HEAD_HEIGHT;g.drawImage(img[2],x,y11,null);x -= speed;if (x < -50) {visible = false;}}//绘制移动的障碍物private void drawMobile(Graphics g) {//求出所需要的障碍物的块数int count = (height-BARRIRE_HEAD_HEIGHT)/BARRIRE_HEIGHT;//绘制上头g.drawImage(img[1],x,y,null);//for循环绘制障碍物for (int i = 0; i < count; i++) {g.drawImage(img[0], x, y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);}rect(g);//绘制下头int y11 = y+height-BARRIRE_HEAD_HEIGHT;g.drawImage(img[2],x,y11,null);x -= speed;if (x < -50) {visible = false;}if (mob) {y+=5;if (y >= 250) {mob=false;}}else if (!mob){y-=5;if (y <= 100) {mob=true;}}}/*** 绘制障碍物碰撞矩形** @return*/public void rect(Graphics g) {int x1 = this.x;int y1 = this.y;int w1 = img[0].getWidth();
//        g.setColor(Color.blue);
//        g.drawRect(x1, y1, w1, height);setRecyangle(x1, y1, w1, height);}/*** 障碍物的碰撞矩形参数** @return*/public void setRecyangle(int x, int y, int width, int height) {rect.x = x;rect.y = y;rect.width = width;rect.height = height;}//判断什么时候绘制下一组障碍物public boolean isInFrame() {return 600 - x > 150;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getType() {return type;}public void setType(int type) {this.type = type;}public boolean isVisible() {return visible;}public void setVisible(boolean visible) {this.visible = visible;}public Rectangle getRect() {return rect;}
}

2、Barrierpool(管理障碍物数量) 

package main;import java.util.ArrayList;
import java.util.List;/*** 为了避免反复的创建和销毁对象,使用对象池来提前创建好一些对象。* 使用的时候从池中获得,使用完毕后,归还*/
public class Barrierpool {//用于管理池中所有对象的容器private static List<Barrier> pool = new ArrayList<>();//池中初始的对象个数public static final int initCount = 16;//对象池中最大个数public static final int maxCOunt = 20;static {//初始化池中的对象for (int i = 0; i < initCount; i++) {pool.add(new Barrier());}}/*** 从池中获取一个对象*/public static Barrier getPool(){int size = pool.size();//如果池中有对象才可以拿if (size > 0) {//移除并返回对象System.out.println("拿走一个");return pool.remove(size-1);}else {//池中没有对象了 只能newSystem.out.println("新的对象");return new Barrier();}}/*** 将对象归还容器中*/public static void setPool(Barrier barrier){if (pool.size() < maxCOunt) {pool.add(barrier);System.out.println("容器归还了");}}}

3、Bird(小鸟类)

package main;import static util.Constant.*;
import util.GameUtil;
import java.awt.*;
import java.awt.image.BufferedImage;/*** 小鸟类*/
public class Bird {//小鸟矩形对象private Rectangle rect;//小鸟加速度private int acceleration;//小鸟的生命public boolean life = true;//存放小鸟图片private BufferedImage[] images;public static final int BIRD_IMG_COUNT = 3;//鸟的状态private int state;public static final int STATE_NORMAR = 0;//平着飞public static final int STATE_UP = 1;//向上飞public static final int STATE_DOWN = 2;//向下飞//小鸟的位置private int x=200,y=200;//小鸟移动方向 上下private boolean up=false,down=false;//小鸟移动速度private int speed=4;//构造方法中对资源初始化public Bird() {images = new BufferedImage[BIRD_IMG_COUNT];for (int i = 0; i < BIRD_IMG_COUNT; i++) {images[i] = GameUtil.loadBufferedImage(BIRD_IMG[i]);}int w = images[0].getWidth();int h = images[0].getHeight();rect = new Rectangle(w,h);}//绘制小鸟public void draw(Graphics g) {flyLogic();g.drawImage(images [state], x, y, null);//绘制小鸟的矩形g.drawRect(x,y,(int)rect.getWidth(), rect.height);rect.x=this.x;rect.y=this.y;}//控制小鸟移动方向public void flyLogic(){if (up){acceleration--;y+=acceleration;if (acceleration < -10) {acceleration=-10;}if (y<20){y=20;acceleration=0;}}if (!up){acceleration++;y+=acceleration;if (acceleration > 10) {acceleration=10;}if (y>475){y=475;acceleration=0;}}}public void fly(int fly){switch (fly){case 1:state=1;up=true;break;case 5:state=2;up=false;break;}}public Rectangle getRect() {return rect;}/*** 重新绘制小鸟的位置*/
public void  restartDraw(){life=true;x=200;y=200;
}}

4、Cloud(云彩类)

package main;import java.awt.*;
import java.awt.image.BufferedImage;/*** 云彩类*/
public class Cloud {//云彩图片private BufferedImage img;//云彩速度private  int speed;//云彩的位置private  int x,y;public Cloud(){}public Cloud(BufferedImage img, int speed, int x, int y) {this.img = img;this.speed = speed;this.x = x;this.y = y;}public void draw(Graphics g){x-=speed;g.drawImage(img,x,y,null);}/*** 用于判断云彩是否飞出屏幕以外*/public boolean isOutFrame(){if (x < -100) {return true;}return false;}}

5、GameBackGround(游戏背景类)

package main;import static util.Constant.*;import util.Constant;
import util.GameUtil;import java.awt.*;
import java.awt.image.BufferedImage;/*** 游戏背景类*/
public class GameBackGround {//背景需要的资源图片private BufferedImage bkimg;//构造器初始化资源public GameBackGround(){bkimg = GameUtil.loadBufferedImage(Constant.BK_IMG_OATH);}//绘制图片public void draw(Graphics g){//填充背景色g.setColor(BK_COLOR);g.fillRect(0,0,FRAM_WIDTH,FRAM_HEIGNT);g.setColor(Color.black);//得到图片的高度和宽度int height = bkimg.getHeight();int weight = bkimg.getWidth();//循环的次数int count = Constant.FRAM_WIDTH/weight+1;for (int i = 0; i < count; i++) {g.drawImage(bkimg,weight*i,Constant.FRAM_HEIGNT-height,null);}}
}

6、GameBarrierLayer(游戏中障碍物层)

在第87行中需要在电脑盘中创建一个txt文件,用来储存游戏数据,并在该文件中随意输入一位数字

package main;import util.Constant;import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 游戏中障碍物层*/
public class GameBarrierLayer {private GameTime gameTime;private int txt;private Random random = new Random();private List<Barrier> barriers;public GameBarrierLayer() {barriers = new ArrayList<>();gameTime = new GameTime();}//绘制障碍物public void draw(Graphics g, Bird bird) {for (int i = 0; i < barriers.size(); i++) {Barrier barrier = barriers.get(i);if (barrier.isVisible()) {barrier.draw(g);} else {Barrier remove = barriers.remove(i);Barrierpool.setPool(remove);i--;}}collideBird(bird);logic(g);}public void logic(Graphics g) {if (barriers.size() == 0) {ran();gameTime.begin();insert(600, 0, numberTop, 0);insert(600, 500 - numberDown, numberDown, 2);} else {long differ = gameTime.differ();g.setColor(Color.white);g.setFont(new Font("微软雅黑", 1, 20));g.drawString("坚持了:" + differ + "秒", 30, 50);//显示最高成绩txt = getTxt();if (differ <= txt){g.drawString("最高成绩:" + txt , 200, 50);}else {setTxt(String.valueOf(differ));g.drawString("最高成绩:" + getTxt() , 200, 50);}//判断最后一个障碍物是否完全进入屏幕内Barrier last = barriers.get(barriers.size() - 1);if (last.isInFrame()) {ran();if (number < 50){insert(600,32,440,4);}else if (number>450){insert(600,125,200,6);}else {insert(600, 0, numberTop, 0);insert(600, 500 - numberDown, numberDown, 2);}}}}//用于储存游戏数据File file = new File("E:\\小鸟.txt");/*** 从文件获取数据* @return*/public int getTxt()   {BufferedReader in = null;try {in = new BufferedReader(new FileReader(file));} catch (FileNotFoundException e) {e.printStackTrace();}int read = 0;try {read = Integer.parseInt(in.readLine());} catch (IOException e) {e.printStackTrace();}try {in.close();} catch (IOException e) {e.printStackTrace();}return read;}/*** 写入数据到文件* @param str*/public void setTxt(String str)   {FileWriter out = null;try {out = new FileWriter(file);} catch (IOException e) {e.printStackTrace();}try {out.write(str);} catch (IOException e) {e.printStackTrace();}try {out.close();} catch (IOException e) {e.printStackTrace();}}/*** 用于从池中获取对象,并吧参数封装成barrier 存入barriers数组中*/public void insert(int x, int y, int num, int type) {Barrier top = Barrierpool.getPool();top.setX(x);top.setY(y);top.setHeight(num);top.setType(type);top.setVisible(true);barriers.add(top);}//上方障碍物高度private int numberTop;//下方障碍物高度private int numberDown;private int number;//产生两个100-500之间的随机高度public void ran() {numberTop = random.nextInt(400) + 100;numberDown = random.nextInt(400) + 100;number = random.nextInt(500);//如果管道重合,则重新随机if (numberTop + numberDown > 450) {ran();}}/*** 判断障碍物和小鸟发生碰撞*/public boolean collideBird(Bird bird) {for (int i = 0; i < barriers.size(); i++) {Barrier barrier = barriers.get(i);//判断矩形是否相交if (barrier.getRect().intersects(bird.getRect())) {System.out.println("装上啦");bird.life = false;}}return false;}/*** 用于清空障碍物的池子*/public void restant(){barriers.clear();}}

7、 GameFrame(游戏的主窗口类)

package main;import static util.Constant.*;import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;/*** 游戏的主窗口类,所有的关于游戏中绘制的内容都在此类中完成。*/
public class GameFrame extends Frame {//实例化gamebackGround类private GameBackGround gameBackGround;//实例化Bird类private Bird bird;//实例化GameBarrierLayer类private GameBarrierLayer gameBarrierLayer;//实例化GameFrontGround类private GameFrontGround gameFrontGround;//存放图片的图片private BufferedImage buffimg = new BufferedImage(FRAM_WIDTH,FRAM_HEIGNT,BufferedImage.TYPE_4BYTE_ABGR);//构造方法中初始化一些参数public GameFrame(){//窗口是否可见setVisible(true);//窗口的大小setSize(FRAM_WIDTH,FRAM_HEIGNT);//窗口的标题setTitle(FRAM_TITLE);//窗口的初始化位置setLocation(FRAM_X,FRAM_Y);//窗口的大小不可改变setResizable(false);//窗口的关闭事件addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);//结束程序}});//初始化游戏对象initGamg();new run().start();//添加按键监听addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {add(e);}@Overridepublic void keyReleased(KeyEvent e) {minu(e);}});}//对游戏中的对象初始化public void initGamg(){gameBackGround = new GameBackGround();bird = new Bird();gameFrontGround = new GameFrontGround();gameBarrierLayer = new GameBarrierLayer();}class run extends Thread{@Overridepublic void run() {while (true) {repaint();try {Thread.sleep(33);} catch (InterruptedException e) {e.printStackTrace();}}}}/*** 所有的我们需要绘制的内容都在此方法中进行调用绘制*/@Overridepublic void update(Graphics g) {if(bird.life){//得到图片的画笔Graphics graphics = buffimg.getGraphics();gameBackGround.draw(graphics);bird.draw(graphics);gameFrontGround.draw(graphics);gameBarrierLayer.draw(graphics,bird);//一次性的将图片绘制到屏幕中g.drawImage(buffimg,0,0,null);}else {String over = "游戏结束";g.setColor(Color.red);g.setFont(new Font("微软雅黑",1,60));g.drawString(over,180,250);String reset = "Space Reset Game";g.drawString(reset,25,350);}}//按键public void add(KeyEvent e){switch (e.getKeyCode()){case KeyEvent.VK_UP:bird.fly(1);break;case KeyEvent.VK_SPACE:if (bird.life == false) {restart();}break;}}//抬键public void minu(KeyEvent e){switch (e.getKeyCode()){case KeyEvent.VK_UP:bird.fly(5);break;}}/*** 重置游戏*/public void restart(){gameBarrierLayer.restant();bird.restartDraw();}}

8、GameFrontGround(游戏的前景类)

package main;import util.Constant;
import util.GameUtil;import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 游戏的前景类*/
public class GameFrontGround {//云彩的个数private static final int CLOUND_COUNT = 2;//存放云彩的容器private List<Cloud> clouds;//云彩的飞行速度private static final int CLOUNG_SPEED = 1;//使用到图片资源private BufferedImage[] img;//用于产生随机数private Random random;// 构造器初始化数据public GameFrontGround() {clouds = new ArrayList<>();img = new BufferedImage[CLOUND_COUNT];//容器中添加云彩的图片for (int i = 0; i < CLOUND_COUNT; i++) {img[i] = GameUtil.loadBufferedImage("飞翔的小鸟/img/cloud0" + i + ".png");}random = new Random();}//绘制云彩public void draw(Graphics g) {logic();for (int i = 0; i < clouds.size(); i++) {clouds.get(i).draw(g);}}/*** 用于云彩的个数控制*/private void logic() {if ((int) (500 * Math.random()) < 5) {Cloud cloud = new Cloud(img[random.nextInt(CLOUND_COUNT)], CLOUNG_SPEED, 600, random.nextInt(150));clouds.add(cloud);}for (int i = 0; i < clouds.size(); i++) {Cloud cloud = clouds.get(i);if (cloud.isOutFrame()){clouds.remove(i);i--;System.out.println("移除了"+cloud);}}}
}

9、GameTime(游戏计时器)

package main;/*** 游戏计时器*/
public class GameTime {//开始private long beginTime;//结束private long endTime;//时间差private long differ;public GameTime(){}public void  begin(){beginTime = System.currentTimeMillis();}public long differ(){endTime = System.currentTimeMillis();return differ=(endTime-beginTime)/1000;}}

四、util包

1、Constant(设置窗口资源)

package util;import java.awt.*;/*** @author* @create*/
public class Constant {//窗口的大小public static final int FRAM_WIDTH= 600;public static final int FRAM_HEIGNT= 500;//窗口标题public static final String FRAM_TITLE= "飞翔的小鸟";//窗口的初始化位置public static final int FRAM_X= 200;public static final int FRAM_Y= 200;//背景图片public static final String BK_IMG_OATH = "飞翔的小鸟/img/bird_bk.png";//背景色public static final Color BK_COLOR = new Color(0x4BC4CF);//小鸟图片资源public static final String[] BIRD_IMG={"飞翔的小鸟/img/bird_normal.png","飞翔的小鸟/img/bird_up.png","飞翔的小鸟/img/bird_down.png"};//障碍物图片资源public static final String[] BARRIER_IMG_PATH ={"飞翔的小鸟/img/barrier.png","飞翔的小鸟/img/barrier_up.png","飞翔的小鸟/img/Barrier_down.png"};
}

2、GameUtil(游戏工具类)

package util;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;/*** 游戏工具类*/
public class GameUtil {/***该方法传入一个图片路径 读取图片*/public static BufferedImage loadBufferedImage(String ImgPath){try {return ImageIO.read(new FileInputStream(ImgPath));} catch (IOException e) {e.printStackTrace();}return null;}
}

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

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

相关文章

无需外接显示器,直接使用windows安装树莓派系统并可远程桌面登录

准备工作: 1.安装树莓派官方烧录工具 raspberry pi imager 2.下载树莓派系统镜像(也可选择在线下载安装) 打开imager工具&#xff0c;选择需要安装包树莓派版本 点击"NEXT"&#xff0c;在弹出的选项中选择编辑设置。 设置登录名和密码&#xff0c;已经所连接的wif…

统一用户桌面壁纸怎么设置

统一用户桌面壁纸的设置方法有多种&#xff0c;以下列举两种&#xff1a; 方法一&#xff1a;个人更换壁纸 1、右键桌面&#xff0c;鼠标选择“个性化”。 2、进入个性化之后&#xff0c;单击下面的“桌面背景”图标。 3、点击“浏览”选择自己备好的桌面壁纸&#xff0c;点击…

昇腾Atlas 200I DK A2实现安全帽识别

文章目录 环境依赖编译测试总结 环境依赖 软件版本说明获取方式mxVision5.0.RC2mxVision软件包获取方式Ascend-CANN-toolkit6.2.RC2Ascend-cann-toolkit开发套件包获取方式Ubuntu22.04 代码仓库地址&#xff1a; https://gitee.com/ascend/ascend_community_projects/tree/31…

01_原理-事件循环

01_原理-事件循环 文章目录 01_原理-事件循环一、浏览器的进程模型①&#xff1a;何为进程&#xff1f;②&#xff1a;何为线程&#xff1f;③&#xff1a;浏览器有哪些进程和线程&#xff1f; 二、渲染主线程是如何工作的&#xff1f;三、若干解释①&#xff1a;何为异步&…

量子计算突破云渲染资源调度!真机测试完整报告公开!

​摘要&#xff1a;在影视领域中&#xff0c;经常会涉及大量的视频图像渲染工作&#xff0c;而往往在这种大规模、动态渲染场景下&#xff0c;普遍存在着冗余渲染现象。究其原因在于大规模的图像渲染通常要求在短时间内做出渲染任务的算力分配决策&#xff0c;而经典计算机无法…

【周报2023-11-24】

周报2023-11-24 本周主要工作下周工作计划 本周主要工作 本周的话一个主要工作有&#xff1a; 前后端进行联调接口&#xff1a; 那么目前为止的话&#xff0c;已经调通的接口 可以使用的是个人中心 历史生成的接口 选择新模板 新模板详情 ps: 下周工作计划 主要的话就是将…

金风玉露一相逢|实在智能联手浪潮信息合力致新生成式AI产业生态

近日&#xff0c;实在智能正式加入浪潮信息元脑生态AIStore。 实在智能是一家基于AGI大模型超自动化技术&#xff0c;领跑人机协同时代的人工智能科技公司&#xff0c;以其自研垂直的“TARS&#xff08;塔斯&#xff09;大语言模型”技术、实在RPA Agent智能体数字员工产品和超…

PSP - 蛋白质真实长序列查找 PDB 结构短序列的算法

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134599076 在蛋白质结构预测的过程中&#xff0c;输入一般是蛋白质序列(长序列)&#xff0c;预测出 PDB 三维结构&#xff0c;再和 Ground Truth …

2024深圳电子展,加快粤港澳电子信息发展,重点打造“湾区经济”

在“十四五”期间&#xff0c;中国电子信息产业面临着新形势和新特点。随着国家对5G、人工智能、工业互联网、物联网等“新基建”的加速推进&#xff0c;以及形成“双循环”新格局的形势&#xff0c;新型显示、集成电路等产业正在加速向国内转移。这一过程不仅带来了新的应用前…

2023年亚太地区数学建模大赛 C 题

我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源&#xff08;非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结合的汽车。新能源汽车主要包括四种类型&#xff1a;…

MobaXterm连接节点一段时间后超时Session stopped

1、MobaXterm &#xff08;1&#xff09;设置ssh 超时时间 &#xff08;2&#xff09;设置保持连接 如果服务器端设置了超时时间&#xff0c;会以服务器为准&#xff0c;具体设置&#xff1a; 2、服务端 cat /etc/ssh/sshd_config | grep "ClientAlive" 可以把设置…

一穿一戴一世界 | 紫光展锐2023智能穿戴沙龙成功举办

11月23日&#xff0c;紫光展锐在深圳成功举办了以“一穿一戴一世界”为主题的2023智能穿戴沙龙。展锐智能穿戴沙龙已举办四届&#xff0c;旨在为行业提供启发性的观点和前瞻性的创新理念。本届沙龙吸引了终端厂商、行业翘楚、生态伙伴等行业各领域超过500人汇聚一堂&#xff0c…

HCIA-RS基础-静态路由协议

摘要&#xff1a;静态路由是一种在网络中广泛应用的路由选择方案&#xff0c;它以其简单的配置和低开销而备受青睐。本文将介绍静态路由的配置方法、默认路由的设置、路由的负载分担和备份策略。通过学习本文&#xff0c;希望可以你能够掌握静态路由的基本概念和在华为模拟器中…

U-Boot 之九 详解 Pinctrl 子系统、命令、初始化流程、使用方法

嵌入式芯片中,引脚复用是一个非常常见的功能,U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统来处理引脚复用功能。正好最近用到了这部分功能,需要移植 Pinctrl 驱动,特此记录一下学习过程。 架构 U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统,用来统一各芯…

视频服务网关的三大部署(三)

视频网关是软硬一体的一款产品&#xff0c;可提供多协议&#xff08;RTSP/ONVIF/GB28181/海康ISUP/EHOME/大华、海康SDK等&#xff09;的设备视频接入、采集、处理、存储和分发等服务&#xff0c; 配合视频网关云管理平台&#xff0c;可广泛应用于安防监控、智能检测、智慧园区…

RK WiFi部分信道在部分地区无法使用的原因

不同国家支持的WiFi信道不一样&#xff0c;需要正确设置wificountrycode 修改路径&#xff1a; device\rockchip\common\BoardConfig.mk 修改内容&#xff1a;androidboot.wificountrycodeXX 该属性会被解析为 ro.boot.wificountrycode framework层会在&#xff1a; framewor…

用好语言模型:temperature、top-p等核心参数解析

编者按&#xff1a;我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数&#xff0c;帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数&#xff0c;以优化语言模型的生成效果。 文章详细解释了这些参数的作用…

leetcode 343.整数拆分 198.打家劫舍(动态规划)

OJ链接 &#xff1a;leetcode 343.整数拆分 代码&#xff1a; class Solution {public int integerBreak(int n) {int[] dp new int[n1];//每个n&#xff0c;拆分多个整数乘积的最大值dp [0] 0;dp [1] 1; for(int i 2 ; i<n; i){for(int j 0 ; j < i; j){dp[i] Ma…

小程序中的大道理--综述

前言 以下将用一个小程序来探讨一些大道理, 这些大道理包括可扩展性, 抽象与封装, 可维护性, 健壮性, 团队合作, 工具的利用, 可测试性, 自顶向下, 分而治之, 分层, 可读性, 模块化, 松耦合, MVC, 领域模型, 甚至对称性, 香农的信息论等等. 为什么不用大程序来说大道理呢? …

CMS指纹识别方式

一、手工识别 1.robots.txt文件 robots.txt文件我们写过爬虫的就知道,这个文件是告诉我们哪些目录是禁止爬取的。但是大部分的时候我们都能通过robots.txt文件来判断出cms的类型 如: 从wp路径可以看出这个是WordPress的cms 这个就比较明显了直接告诉我们是PageAdmin cms 也…