Java小游戏之飞翔的小鸟

news2025/1/16 11:17:43

创建三个包,存放代码。把图片放进文件中

APP包(运行)

GameApp类

package APP;
import mian.GameFrame;
 
public class GameApp {
	public static void main(String[] args) {
		new GameFrame();
		
	}
}

 mian包(主内容)

Barrier 类(障碍物)

package mian;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
 
import util.Constant;
import util.GameUtil;
 
/*
 * 障碍物类
 */
public class Barrier {
	
	
	
	
	private Rectangle rect;//小鸟矩形对象
	
	//
	private boolean mob=true;
	
	private int speed=3;//障碍物移动速度
	
	private static BufferedImage[] imgs;//障碍物需要的三个图片
	
	
	//障碍物的状态
	private boolean visible;
	
	static {
		final int COUNT=3;
		//类加载的时候将三个图片化
		imgs=new BufferedImage[COUNT];
		for(int i=0;i<COUNT;i++) {
			imgs[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_MOBLIE=6;
	
	//获得障碍物的宽带和高度
	public static final int BARRIRE_WIDTH=imgs[0].getWidth();
	public static final int BARRIRE_HEIGHT=imgs[0].getHeight();
	public static final int BARRIRE_HEAD_WIDTH=imgs[1].getWidth();
	public static final int BARRIRE_HEAD_HEIGHT=imgs[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:
			drawMormalTop(g);
			break;
		case TYPE_HOVER_NORMAL:
			drawHoverNormal(g);
			break;
		case TYPE_MOBLIE:
			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(imgs[0],x,y+i*BARRIRE_HEIGHT, null);
		}
		
	//绘制头
		int y=height-BARRIRE_HEAD_HEIGHT;
		g.drawImage(imgs[2],x-(BARRIRE_HEAD_WIDTH-BARRIRE_WIDTH)/2,y, null);
		x-=speed;
		if(x<-50) {
			visible=false;
		}
		 rect(g);
	}
	
	
	//绘制从下到上的障碍物
	private void drawMormalTop(Graphics g) {
	//求出所需要的障碍物的块数
		int count=height/BARRIRE_HEIGHT+1;
    //for循环绘制障碍物
		for(int i=0;i<count;i++) {
			g.drawImage(imgs[0],x,Constant.FRAM_HEIGHT-i*BARRIRE_HEIGHT, null);
			
		}	
		
	//绘制头
     int y=Constant.FRAM_HEIGHT-height;
     g.drawImage(imgs[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(imgs[1],x,y,null);
    //for循环绘制障碍物
		for(int i=0;i<count;i++) {
			g.drawImage(imgs[0],x,y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);
			
		}	
		 rect(g);
		
	//绘制下头
     int y11=y+height-BARRIRE_HEAD_HEIGHT;
     g.drawImage(imgs[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(imgs[1],x,y,null);
    //for循环绘制障碍物
		for(int i=0;i<count;i++) {
			g.drawImage(imgs[0],x,y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);
			
		}	
		 rect(g);
		
	//绘制下头
     int y11=y+height-BARRIRE_HEAD_HEIGHT;
     g.drawImage(imgs[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;
    	 }
     }
    
	}	
	
	
	/*
	 * 绘制障碍物矩形
	 */
	public void rect(Graphics g) {
		int x1=this.x;
		int y1=this.y;
		int w1=imgs[0].getWidth();
//		g.drawRect(x1, y1, w1,height);
		setRectyangle(x1,y1,w1,height);
		
	}
	
	/*
	 * 障碍物矩形参数
	 */
	public void setRectyangle(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;
	}
		
	}
 

Barrierpool类(管理池中所有的对象的容器)

package mian;
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 {
			//如果池中没有对象,只能new
			System.out.println("新的对象");
			return new Barrier();
		}
	}
	
	/*
	 * 将对象归还容器中
	 */
	public static void setPool(Barrier barrier) {
		if(pool.size()<maxCount) {
			pool.add(barrier);
			System.out.println("容器归还了");
		}
	}
	
	
	
}

Bird(鸟)

package mian;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import static util.Constant.*;
import util.GameUtil;
 
/*
 * 小鸟类
 */
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;
		
	}
 
}

Cloud(云彩)

package mian;
import java.awt.Graphics;
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;
	}
	
	
}

GameBackground(游戏背景)

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

GameBarrierLayer(游戏中障碍物层) 

package mian;



import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
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) throws NumberFormatException, IOException {
		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) throws NumberFormatException, IOException {
		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("D:\\飞翔的小鸟.txt");
	
	
	/*
	 * 用于得到文件中的数据
	 */
	public int getTxt() throws NumberFormatException, IOException {
		 BufferedReader in=new BufferedReader(new FileReader(file));
		 int read=Integer.parseInt(in.readLine());
		 in.close();
		 return read;
	}
	
	
	/*
	 * 用于储存数据
	 */
	public void setTxt(String str) throws IOException {
		FileWriter fileWriter=new FileWriter(file);
		fileWriter.write(str);
		fileWriter.close();
	}
	
	
	/*
	 * 用来从池中获取对象,并把参数封装成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();
	}
	
	
}

GameFrame  

package mian;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
 
import static util.Constant.*;
import util.Constant;
 
public class GameFrame extends Frame{
 
	//实例化GrameBackground类
	private GameBackground gameBackground;
	
	//实例化Bird类
	private Bird bird;
	
	//实例化GameBarrierLayer
	private GameBarrierLayer gameBarrierLayer;
	
	//实例化GameFrontground类
	private GameFrontground gameFrontground;
	
	//存放图片的图片
	private BufferedImage buffimg=new BufferedImage(FRAM_WIDTH,FRAM_HEIGHT,BufferedImage.TYPE_4BYTE_ABGR);
 
	//构造方法中初始化一些参数
	public GameFrame() {
		setVisible(true);//窗口是否可见
		setSize(FRAM_WIDTH,FRAM_HEIGHT);//窗体的大小
		setTitle(FRAM_Ttile);//窗体的标题
		setLocation(FRAM_x,FRAM_y);//窗体的初始位置
		setResizable(false);//窗体的大小不可改变
		
		//窗口的关闭事件
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);//结束程序
			}
		});
		
		//初始化游戏对象
		initGame();
		
		new run().start();
		
		//添加案件监听器
		addKeyListener(new KeyAdapter (){
			
			public void keyPressed(KeyEvent e) {
				//super.keyPressed(e);
				add(e);
			}
			
			public void keyReleased(KeyEvent e) {
				//super.keyReleased(e);
				minu(e);
			}
			
		});
		
		
	}
	
	//对游戏中的对象初始化
	public void initGame() {
		gameBackground=new GameBackground();
		bird=new Bird();
		gameFrontground=new GameFrontground();
		gameBarrierLayer=new GameBarrierLayer();
		
	}
	
	
	class run extends Thread{
		public void run() {
			while(true) {
			repaint();
			try {
				Thread.sleep(33);	
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
			}
		}
	}
	
	
	
	/*
	 * 所有的我们需要绘制的内容都在此方法中进行调用绘制
	 */
	@Override
	public void update(Graphics g) {
		if(bird.life) {
			//得到图片的画笔
			Graphics graphics=buffimg.getGraphics();
			
			gameBackground.draw(graphics);
			bird.draw(graphics);
			gameFrontground.draw(graphics);
			try {
				gameBarrierLayer.draw(graphics,bird);
			} catch (NumberFormatException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//一次性的将图片绘制到屏幕中
			g.drawImage(buffimg,0,0,null);
		}else {
			String over="游戏结束";
			g.setColor(Color.red);
			g.setFont(new Font("微软雅黑",1,60));
			g.drawString(over,300,250);
			
			String reset="Spce 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();
		
	}
	
	
}

GameTime(计时)

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

util(窗体)

Constant 

package util;



import java.awt.Color;
 
public class Constant {
	//窗口的大小
	public static final int FRAM_WIDTH=600;
	public static final int FRAM_HEIGHT=500;
	
	//窗口标题
	public static final String FRAM_Ttile="飞翔的小鸟";
	
	//窗口的初始化位置
	public static final int FRAM_x=200;
	public static final int FRAM_y=200;
	
	//图片路径
	public static final String BK_CATH_OATH="img/bird_bk.png";
	
	//背景颜色
	public static final Color BK_COLOR=new Color(0x4B4CF);
	
	//小鸟的图片资源
	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",
	};
	
}

GameUtil  

package util;



import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
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.coloradmin.cn/o/1239776.html

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

相关文章

03梯度下降

目录 lambda基础知识 代码 核心算法&#xff1a; lambda基础知识 lambda 是 Python 中的一个关键字&#xff0c;用于创建匿名函数。匿名函数是一种没有具体名称的小型、临时的函数&#xff0c;通常用于一次性的、简单的操作。lambda 函数的语法如下&#xff1a;python Copy c…

3d标签云实现过程(tagcloud.js)同步原生和 vue

写在前面 本来是没有准备写这个知识点&#xff0c;但是下载这个 js 的时候发现很多都是要钱或者是积分的&#xff0c;我就不明白了一个开源了这么久的 js 怎么还有人拿来挣钱的&#xff0c;同时还有一些只有原生 html 的例子&#xff0c;但是现在都是 框架主导的一些项目&#…

2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2017 级考研管理类联考数学真题解析一、问题求解&#xff08;本大题共 5 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。真题&#xff08;2017-…

Android : ListView + BaseAdapter-2简单应用

​​容器与适配器&#xff1a;​​​​​ http://t.csdnimg.cn/ZfAJ7 实体类 News.java package com.example.mylistviewadapter2.entity;public class News {private String title;private String content;private int img;public News(String title, String conte…

蓝桥杯物联网_STM32L071_2_继电器控制

CubeMX配置&#xff1a; Function.c及Function.h&#xff1a; #include "Function.h" #include "gpio.h" void Function_LD5_ON(void){HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET); }void Function_LD5_OFF(void){HAL_GPIO_WritePin(LD5_…

O2OA(翱途)开发平台 V8.2已发布,更安全、更高效、更开放

尊敬的 O2OA (翱途) 平台合作伙伴、用户以及亲爱的开发小伙伴们&#xff0c;V8.2 版本已正式发布&#xff0c;大家可以去官网上下载最新版本。 上次 8.1 的发布是在 9 月 1 日&#xff0c;又过去两个多月&#xff0c;O2OA 研发团队始终踏踏实实地做好产品的研发及优化工作&…

01背包与完全背包学习总结

背包问题分类见下图 参考学习点击&#xff1a;代码随想录01背包讲解 01背包问题&#xff1a; 核心思路&#xff1a; 1、先遍历物品个数&#xff0c;再遍历背包容量。因为容量最先是最大的&#xff0c;往背包里放物品&#xff0c;所以背包容量在慢慢减少&#xff0c;但背包容量…

【数据结构】动态顺序表详解

目录 1.顺序表的概念及结构 2.动态顺序表的实现 2.1创建新项目 2.2动态顺序表的创建 2.3接口的实现及测其功能 2.3.1初始化 2.3.2尾插 2.3.3头插 2.3.4尾删&头删 2.3.5打印&从任意位置插入 2.3.6删除任意位置的数据 2.3.7查找 2.3.8销毁顺序表 3.结语 He…

AIGC,ChatGPT AI绘画 Midjourney 注册流程详细步骤

AI 绘画,Midjourney完成高清图片绘制,轻松掌握AI工具。 前期准备: ① 一个能使用的谷歌账号 ② 可以访问外网 Midjourney注册 1.进入midjourney官网https://www.midjourney.com 点击左下角”Join the Beta”,就可以注册,第一次使用的小伙伴会弹出提示,只需要点击Acc…

Python开发运维:Celery连接Redis

目录 一、理论 1.Celery 二、实验 1.Windows11安装Redis 2.Python3.8环境中配置Celery 三、问题 1.Celery命令报错 2.执行Celery命令报错 3.Win11启动Celery报ValueErro错误 一、理论 1.Celery (1) 概念 Celery是一个基于python开发的分布式系统&#xff0c;它是简单…

Nevron Vision for .NET 2023.1 Crack

Nevron Vision for .NET 适用于桌面和 Web 应用程序的高级数据可视化 Nevron Vision for .NET提供最全面的组件&#xff0c;用于构建面向 Web 和桌面的企业级数据可视化应用程序。 该套件中的组件具有连贯的 2D 和 3D 数据可视化效果&#xff0c;对观众产生巨大的视觉冲击力。我…

Vue3常用操作

一、Vue3项目构建 1、安装最新版本vue npm create vuelatest 2、选择需要的配置 3、进入项目 cd 项目名称 4、下载依赖 npm install 5、启动项目 npm run dev

oracle面试相关的,Oracle基本操作的SQL命令

文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…

MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB

文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**&#xff0c;2、实数类型**&#xff0c;3、字符串类型**&#xff0c;4…

【西行纪年番】孙悟空对战阴界王,素衣奄奄一息,巨灵拳霸气一击

Hello,小伙伴们&#xff0c;我是拾荒君。 《西行纪年番》第20集已更新。为了救回素衣&#xff0c;孙悟空想尽办法&#xff0c;最后他拜托沙悟净帮忙&#xff0c;终于成功把自己传送到阴界。原来&#xff0c;素衣的魂魄被阴界王藏在了他制造的人偶之中。沙悟净提醒孙悟空必须在…

为UE和Unity开发者准备的Godot指南

为UE和Unity开发者准备的Godot指南 ——两位大哥打架&#xff0c;请带上我 这两天游戏行业又开始热闹了&#xff0c;昨天两条信息直接刷爆朋友圈&#xff0c;最大的两家游戏引擎公司怼起来了。 《为Unity开发者准备的虚幻引擎指南》&#xff1a; 为Unity开发者准备的虚幻引擎指…

不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>

报错信息 原因: 不存在类型变量 A, T 的实例&#xff0c;使 Collector<T, A, List<\T>> 符合 Supplier<\R> 来源 测试Stream流的map方法&#xff0c;做算法习惯基本类型定义数组。 map方法:Stream API的一部分。允许以一种声明式的方式处理数据&#xff0c…

Shell判断:模式匹配:case(三)

系统管理工具箱 1、需求&#xff1a;Linux提供的丰富的管理命令&#xff0c;用户管理&#xff0c;内存管理&#xff0c;磁盘管理&#xff0c;进程管理&#xff0c;日志管理&#xff0c;文件管理&#xff0c;软件管理&#xff0c;网络管理等等数十个工具包。如果你能通过shell编…

大二第五周总结

你知道的&#xff0c;向来如此&#xff0c;从来没人关心&#xff0c;世人从来只看重结果。对你了解越多的人&#xff0c;往你心里面捅刀子的时候也是最狠&#xff0c;不过跟之前不一样了&#xff0c;又不是曾经那个任人欺负的小孩儿了&#xff0c;所有的努力在别人眼里就是屁都…

【资深硬件工程师总结-千兆以太网设计指南】

文章目录 01通用PCB布线指南02标志焊盘中的接地过孔区示例03EMI注意事项04ESD注意事项 资深硬件工程师总结-千兆以太网设计指南 本应用笔记旨在帮助客户使用Microchip的10/100/1000 Mbps以太网器件系列设计PCB。本文档提供有关PCB布线的建 议&#xff0c; PCB 布线是保持信号完…