Java小游戏飞翔的小鸟

游戏界面 

运行界面

  

开发准备

1、eclipse开发工具

二、创建游戏窗口

Mains类作为主类,在mian方法下定义一个m1()方法,设置窗口。

//定义一个初始化的游戏窗口方法 
	public static void m1() {
		//获取底层窗口界面的工具类
		JFrame jf =new JFrame();//创建了窗口对象
		jf.setSize(432, 644);//设置窗口大小
		jf.setTitle("出击吧小鸟");//设置窗口标题
		jf.setLocationRelativeTo(null);//默认坐标居中
		jf.setVisible(true);//设置窗口可见
		jf.setResizable(false);//设置窗口大小不可以调整 
		//设置窗口监听,关闭窗口时,程序结束运行
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}

 

三、背景对象

将图片资源都放在src下面,在BackGround类中,使用IO流读取背景图片,获取图片宽度高度等。

 
public class BackGround {//背景类
	//在这个类中描述背景图片的属性
 
	public int width;//图片的宽度属性
	public int height;//图片的高度属性
	//使用处理图片的工具类
	public BufferedImage  img=null;
	
	public BackGround() {
		//在构造器中初始化背景类的宽度、高度属性
		// 读取  ,写入 
		/*
		 * 异常处理机制、异常捕获机制
		 * try抛出异常 ,catch捕获异常
		 * 处理程序运行时出现的异常
		 * try{} 可能出现问题的代码
		 * catch{} 出现问题之后,跳过try中剩余的代码
		 * 执行catch{}中的代码
		 * catch( 准备捕获的异常类型 )
		 */
		try {
			img = ImageIO.read(getClass().getResource("/bg.png"));
			//图片资源 储存了背景图片的所有信息
			width = img.getWidth();//获取图片资源的宽度给类中的属性赋值
			height=img.getHeight();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
}

四、操作面板

面板类这里直接在Mians类下定义一个单独的类,上面用于实现背景,小鸟等对象。

面板类继承Jpanel类,重新paint方法,绘制背景对象。

 
  1.  
    //游戏的操作面板类
    //继承面板工具类 JPanel
    class Panel extends JPanel {
        BackGround  bg =null;	// 创建背景类的对象 
        
        public Panel() {//构造器
    		bg =new BackGround();//加载背景类的实例
        } 
    //绘制图片的方法  Jpanel工具类中的 paint()
    	@Override
    	public void paint(Graphics g) {
    		//在绘制图片的方法中 ,绘制背景图片,小鸟。柱子等等
    		//Graphics类  制图工具类   使用制图功能绘制图片,或者文字
    		g.drawImage(bg.img,0,0,null);
    		//参数1: 要绘制的图片
    		//参数2:图片的x坐标
    		//参数3: 图片的y坐标
    		//参数4: 默认出现的位置.
        }
    }

    然后在设置游戏窗口的m1方法中,将制作的游戏面板添加到窗口中。在设置窗口可见这行代码的下边添加即可。

    	Panel p =new Panel();//创建面板对象
    		jf.add(p);//在窗口中添加面板

    然后点击运行,窗口中就有背景图了。

    五、地面对象

    在窗口的左上角默认坐标点是x=0.y=0

    地面图片的y坐标 = 背景图片的高度 - 地面图片的高度。

    地面是根据背景的基础上实现移动的,在地面类中需要添加一个单独的移动方法。

    public class Ground {//地面类
    	BufferedImage img =null;
    	public int width;//图片的宽度属性
    	public int height;//图片的高度属性
    	public int x,y;//地面的x坐标 y坐标
    	//获取背景类对象的高度属性
    	BackGround bg=null;
    	public Ground() {
    		try {
    			bg=new BackGround();
    			img = ImageIO.read(getClass().getResource("/ground.png"));
    			//图片资源 储存了背景图片的所有信息
    			width = img.getWidth();//获取图片资源的宽度给类中的属性赋值
    			height=img.getHeight();
    			x=0;
    			y=bg.height-height;
    			//背景图片高度,减去地面图片高度,就是地面的初始y坐标
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	//让地面移动的方法
    	public void move(BackGround bg) {
    		// 横向前移  x 
    		x--;
    		//设计一个循环 ,能够一直移动
    		if(x==bg.width+10-width) {//修正值
    			x=0;//x坐标归零
    		}
    	}
     
    }

    然后在面板类Panel中创建地面类的对象,将地面对象在paint方法中绘制出来

    class Panel extends JPanel{
    	
    	BackGround  bg =null;	// 创建背景类的对象 
    	Ground ground=null;//创建地面类对象
    	public Panel() {
    		bg =new BackGround();//加载背景类的实例 
    		ground =new Ground();//加载地面类实例
    	}
    	
    	//绘制图片的方法  Jpanel工具类中的 paint()
    		@Override
    		public void paint(Graphics g) {
    			//在绘制图片的方法中 ,绘制背景图片,小鸟。柱子等等
    			//Graphics类  制图工具类   使用制图功能绘制图片,或者文字
    			g.drawImage(bg.img,0,0,null);
    			//参数1: 要绘制的图片
    			//参数2:图片的x坐标
    			//参数3: 图片的y坐标
    			//参数4: 默认出现的位置.
    			g.drawImage(ground.img,ground.x,ground.y,null);
    		}
    }

    现在点击运行,看起来和没绘制地面之前没有什么不同,因为地面图片与背景中的地面位置完美重合了,接下来要调用地面移动的方法。在面板类中定义一个方法action作为所有运行状态的启动开关,地面一直在移动,所以用一个死循环来实现,加上线程休眠时间,来控制游戏运行的速度。

    //调用游戏中动态效果的方法
    	public void action() {//执行这个方法,游戏开始运行
    //地面移动  一直在移动  是一个死循环
    		while(true) {
    			ground.move(bg);
    	//设置线程休眠 每隔一段时间,线程休眠一次,相当于清空内存重新执行
    			try {
    				Thread.sleep(1000/40);//控制速度的
    				this.repaint();//重新绘制
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//每隔这么长时间重新执行
            }
    }

    写完之后在Mains类中的m1方法最后一行调用,点击运行,地面开始移动起来。

    p.action();//开始运行

    六、加入游戏状态图片

    游戏开始前,加入start图片,游戏结束,加入gameover图片。由于状态不需要单独创建对象,图片资源直接在面板类中设计。通过鼠标点击来切换状态,所以这里需要加载鼠标点击松开事件。JPanle面板工具类中有定义好的鼠标工具对象,使用this来调用即可。

    //继承面板工具类 JPanel
    class Panel extends JPanel {
    //在 这里添加游戏状态属性  0 1 2 
    	public int state=0;//初始状态是0  准备开始 
    	BufferedImage imgStart=null;//0 准备开始的图片
    	BufferedImage gameover=null;//2 游戏结束的图片
     
        BackGround  bg =null;	// 创建背景类的对象 
    	Ground ground=null;//创建地面类对象
        public Panel() {//构造器
    		bg =new BackGround();//加载背景类的实例 
    		ground =new Ground();//加载地面类实例
        try {//加载图片资源
    			imgStart = ImageIO.read(getClass().getResource("/start.png"));
    			gameover = ImageIO.read(getClass().getResource("/gameover.png"));
    		} catch (IOException e) {
    			// TODO: handle exception
    		}
        }
     
    //绘制图片的方法  Jpanel工具类中的 paint()
    	@Override
    	public void paint(Graphics g) {
    		//在绘制图片的方法中 ,绘制背景图片,小鸟。柱子等等
    		//Graphics类  制图工具类   使用制图功能绘制图片,或者文字
    		g.drawImage(bg.img,0,0,null);
    		//参数1: 要绘制的图片
    		//参数2:图片的x坐标
    		//参数3: 图片的y坐标
    		//参数4: 默认出现的位置.
    		if(state==0) {
    			g.drawImage(imgStart,0,0,null);
    		}else if(state==1) {
    	
    		}else if(state==2) {
    			g.drawImage(gameover,0,0,null);
    		}
    		g.drawImage(ground.img,ground.x,ground.y,null);
    	}
    //调用游戏中动态效果的方法
    	public void action() {//执行这个方法,游戏开始运行
    		//通过鼠标点击,切换游戏状态
    		//获取鼠标权限 
    		this.addMouseListener(new MouseAdapter() {
    			//点击鼠标释放后的事件
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				//super.mouseReleased(e);
    				// 0准备   1开始    2 结束 
    				switch (state) {
    				case 0:	
    					state=1;
    					break;
    				case 1:
    					state=2;
    					break;
    				case 2:
    					state=0;
    					break;
    				default:
    					break;
    				}
    			}
    		});
    		
    		
    		//地面移动  一直在移动  是一个死循环
    		while(true) {
    			ground.move(bg);
    		//设置线程休眠 每隔一段时间,线程休眠一次,相当于清空内存重新执行
    			try {
    				Thread.sleep(1000/40);//控制速度的
    				this.repaint();//重新绘制
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//每隔这么长时间重新执行
    		}
    	}
    	
     
    }

    现在点击运行,在界面中点击鼠标可以切换状态了。

    七、小鸟对象
    小鸟一共有8张图片,所以这里使用图片工具类数组来储存,然后添加一个方法,由切换图片实现小鸟煽动翅膀的飞行动作。

    首先是游戏状态0时,在start图片中间有一处留白的位置准备放一个会动的小鸟,这里先创建小鸟类,然后在状态0时绘制,切换到状态1时,小鸟位置切换。
     

     
    public class Bird {//小鸟类
    	// x:190 y:220
    	public int width;//图片的宽度属性
    	public int height;//图片的高度属性
    	public int x,y;//地面的x坐标 y坐标
    	public BufferedImage[] imgs=new BufferedImage[8];
    	BufferedImage img=null;//准备一个图片,用来属性赋值
    	//这是一个图片数组,数组中储存8张图片
    	int index=0; //下标属性
    	
    	
    	
    	public Bird() {
    		try {
    			for (int i = 0; i < imgs.length; i++) {//i 0-7
    				imgs[i]=ImageIO.read(getClass().
    						getResource("/"+i+".png"));
    			}
    			img=imgs[0];
    			height=img.getHeight();
    			width=img.getWidth();
    			x=190;
    			y=220;
    			
    		} catch (Exception e) {
    		
    		}
    	}
    	
    	// 添加小鸟煽动翅膀飞行的动作
    	public void fly() {
    		//定义一个数组的下标 根据下标切换数组中的图片,实现轮播效果
    		index++;
    		img = imgs[index%8];//index自增得出下标  振动频率/6 
    		if(index==200) {//修正值,到100之后归0
    			index=0;
    		}
    	}
    }

    在面板类中绘制小鸟,在action方法中执行小鸟飞行动作

        while(true) {
    			ground.move(bg);
    			bird.fly();//小鸟一直在飞行
        }

    下一步,小鸟在状态1时,通过鼠标点击向上飞行,不点就按照重力加速度规则自动掉落,这里在小鸟类中添加一些速度变量,定义两个方法控制上升和掉落

        //关于重力加速度的变量
    	double g=9.8;
    	double v=0;//初始下降速度
    	double t=0.18;//小鸟自动下降的时长
    	double h;//小鸟下降的距离 
    	double up=25;//小鸟上升的速度	
     
     
    	//小鸟向上飞行的动作
    	public void up() {
    		v = up;
    	}
    	
    	//如果不点鼠标小鸟会根据重力自动向下掉
    	public void down() {
    		v=v-g*t;
    		h=v*t-g*t*t/2;
    		y=y-(int)h;
    		//根据物理公式,得出小鸟下降的距离,给y坐标重新赋值
    	}

    掉落的方法是一直都在执行的,所以写在死循环中,当状态是1时,小鸟自行掉落。

    while(true) {
    			ground.move(bg);
    			bird.fly();//小鸟一直在飞行
    			if(state==0) {
    				
    			}else if(state==1) {
    				bird.down();//如果是开始状态,小鸟会自动下降
    			}

    上升的方法是点击鼠标的时候执行的,所以要写在点击鼠标事件的状态1中

    this.addMouseListener(new MouseAdapter() {
    			//点击鼠标释放后的事件
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				//super.mouseReleased(e);
    				// 0准备   1开始    2 结束 
    				switch (state) {
    				case 0:	
    					state=1;
    					break;
    				case 1:
    					bird.up();//状态是运行时,点击鼠标小鸟向上飞
    					break;
    				case 2:
    					state=0;
    					break;
    				default:
    					break;
    				}
    			}
    		});

    八、柱子对象

     
    public class Column {//柱子类
    	public int width;//图片的宽度属性
    	public int height;//图片的高度属性
    	public int x,y;//x坐标 y坐标
    	BufferedImage img =null;
    	
     
    /*
     * 小鸟闯关的柱子,每隔244间距,就要再产生一根新柱子
     * 柱子的高度通过随机数产生,所以要先计算出柱子的高度
     * 柱子的最大高度:柱子的图片高度-柱子通道距离144,然后除2 
     * 柱子的最小高度:柱子的最大高度 - 背景高度 -地面高度 -通道距离
     * 柱子的y坐标: 最大柱子高度和最小高度之间的随机数
     */
    	Random ran =new Random();//获取随机数权限
    	int max=0 , min=0;
    public Column(BackGround bg,Ground ground) {
    	// 柱子的x坐标需要参考背景和地面的x坐标
    	try {
    		img = ImageIO.read(getClass().getResource("/column.png"));
    		width=img.getWidth();
    		height=img.getHeight();
    		x=bg.width;
    		// 柱子高度的最大值和最小值 
    		max= (height -144)/2;
    		min =(height -144)/2 - (bg.height-144 -ground.height);
    		
    		y= -(ran.nextInt(max-min)+ min);
    		
    	} catch (Exception e) {
    		// TODO: handle exception
    	}
    }	
    	
    //柱子不断向前移动的动作
    public void move (BackGround bg) {
    	x--;
    	if(x== - width) {
    		x=bg.width;
    		y=-(ran.nextInt(max-min)+ min);
    		//如果柱子移动出界,将x 坐标和y坐标 初始化
    	}
    }
    	
    }

    在面板类中创建两根柱子对象,然后在paint方法中绘制。在action方法中调用柱子移动的方法。

        Column c1=null;
    	Column c2=null;//创建两根柱子对象 
    	public Panel() {
    		bg =new BackGround();//加载背景类的实例 
    		ground =new Ground();//加载地面类实例
    		bird=new Bird();//加载小鸟类实例
    		c1=new Column(bg, ground);
    		c2=new Column(bg, ground);//加载柱子类实例 
    		c2.x = bg.width+244;//两根柱子的间距
        }
        if(state==0) {
    			g.drawImage(imgStart,0,0,null);
    			g.drawImage(bird.img,bird.x,bird.y,null);
    		}else if(state==1) {
    			//准备绘制小鸟和柱子 以及分数等
    			g.drawImage(bird.img,bird.x-80,bird.y,null);
    			g.drawImage(c1.img,c1.x,c1.y,null);
    			g.drawImage(c2.img,c2.x,c2.y,null);
    		}else if(state==2) {
    			g.drawImage(gameover,0,0,null);
    		}

    现在点击运行,柱子也出现了。现在需要定义小鸟与柱子、天空、地面等对象碰撞死亡,和穿过柱子计分的方法。

    //给小鸟添加死亡方法 
    	//碰撞地面 死亡
    	public boolean  hitGround(BackGround bg ,Ground ground) {
    		if(y+height >= (bg.height-ground.height)) {
    			//小鸟当前y坐标+小鸟自身的高度 》>= 背景高度-地面高度 
    			return true; //说明碰撞到了地面
    		}else {
    			return false;//说明没有碰到 
    		}
    	}
    	//碰撞天空 死亡
    	public boolean hitSky() {
    		if(y<=0) {//小鸟当前的y坐标<=0 说明碰到了天空边缘
    			return true;//是,死亡
    		}
    			return false;
    		
    	}
    	//碰到柱子 死亡
    	public boolean hitColumn(Column c) {
    		// 检测x 坐标 和 y坐标
    		if( x-width>= c.x  && x<= (c.x+c.width)) {
    			//如果碰撞了当前柱子的x坐标
    			if(y<= c.y+(c.height-144)/2 || y>= c.y+(c.height+144)/2-height) {
    				//如果碰撞到上半部柱子或者下半部柱子
    				return true;//死亡
    			}
    		}
    			
    		return false;
    		
    	}
    	
    	//如果没有碰到柱子得分的方法 
    	public boolean addScore(Column c) {
    		if(x==c.x+c.width) {
    			return true;
    		}
    		return false;
    	}
    //绘制图片的方法  Jpanel工具类中的 paint()
    	@Override
    	public void paint(Graphics g) {
    		//在绘制图片的方法中 ,绘制背景图片,小鸟。柱子等等
    		//Graphics类  制图工具类   使用制图功能绘制图片,或者文字
    		g.drawImage(bg.img,0,0,null);
    		//参数1: 要绘制的图片
    		//参数2:图片的x坐标
    		//参数3: 图片的y坐标
    		//参数4: 默认出现的位置.
    		Font f =new Font(Font.SANS_SERIF,Font.ITALIC,20);
    		g.setFont(f);
    		g.setColor(Color.ORANGE);//设置橙色字体
    		g.drawString("得分:"+score, 20, 40);
    		if(state==0) {
    			g.drawImage(imgStart,0,0,null);
    			g.drawImage(bird.img,bird.x,bird.y,null);
    		}else if(state==1) {
    			//准备绘制小鸟和柱子 以及分数等
    			g.drawImage(bird.img,bird.x-80,bird.y,null);
    			g.drawImage(c1.img,c1.x,c1.y,null);
    			g.drawImage(c2.img,c2.x,c2.y,null);
    		}else if(state==2) {
    			g.drawImage(gameover,0,0,null);
    		}
    			
    		g.drawImage(ground.img,ground.x,ground.y,null);
    	}
    	
    	//调用游戏中动态效果的方法
    	public void action() {//执行这个方法,游戏开始运行
    		//通过鼠标点击,切换游戏状态
    		//获取鼠标权限 
    		this.addMouseListener(new MouseAdapter() {
    			//点击鼠标释放后的事件
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				//super.mouseReleased(e);
    				// 0准备   1开始    2 结束 
    				switch (state) {
    				case 0:	
    					state=1;
    					bird.x=110;
    					break;
    				case 1:
    					bird.up();//状态是运行时,点击鼠标小鸟向上飞
    					break;
    				case 2:
    					state=0;
    					score=0;
    					bird.x=190;
    					bird.y=220;
    					bird.v=0;
    					c1.x=bg.width;
    					c2.x=bg.width+244;
    					break;
    				default:
    					break;
    				}
    			}
    		});
    		
    		
     
    		//地面移动  一直在移动  是一个死循环
    		while(true) {
    			ground.move(bg);
    			bird.fly();//小鸟一直在飞行
    			if(state==0) {
    				
    			}else if(state==1) {
    				bird.down();//如果是开始状态,小鸟会自动下降
    				c1.move(bg);
    				c2.move(bg);
    				if(bird.hitColumn(c1)||bird.hitColumn(c2)||
    						bird.hitSky()||bird.hitGround(bg, ground)) {
    					//如果小鸟飞行的过程中碰到了柱子1,2 或者天空,地面,切换到游戏结束状态
    					state=2;
    				}else {
    					// 没碰到时调用是否穿过通道
    					if(bird.addScore(c1)||bird.addScore(c2)) {
    						score++;//分数自增
    						System.out.println("恭喜你的小鸟穿过了通道加一分");
    					}
    				}
    			}
    			
    			//设置线程休眠 每隔一段时间,线程休眠一次,相当于清空内存重新执行
    			try {
    				Thread.sleep(1000/40);//控制速度的
    				this.repaint();//重新绘制
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//每隔这么长时间重新执行
    		}
    	}
    	
    	
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

The module to import is incompatible with the current project【鸿蒙开发-BUG已解决】

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模块…

【挑战业余一周拿证】一、亚马逊云科技简介 - 第 1 节 - 模块 1 简介

CSDN 官方中文视频&#xff08;免费&#xff09;&#xff1a;点击进入 一、亚马逊云科技简介 第 1 节 - 模块 1 简介 1、讲师&#xff1a;李锦鸿 部门&#xff1a;亚马逊云科技培训与认证部门 方向&#xff1a;从事数据中心及云计算相关产品与解决方案工作 课程&#xff…

Java 设计模式之命令模式

命令模式 介绍 命令模式是一种行为类设计模式&#xff0c;核心是将每种请求或操作封装为一个独立的对象&#xff0c;从而可以集中管理这些请求或操作&#xff0c;比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者&#xff08;客户端&#x…

【批量修改文件名,并去掉括号】

操作 一、 批量修改文件名操作二、去除括号 一、 批量修改文件名操作 在浏览器等下载很多图片后&#xff0c;命名顺序乱七八糟&#xff0c;想要将图片进行重新命名&#xff0c;从数字1开始 首先&#xff0c;全选文件夹中的图片 右键&#xff0c;重明明&#xff0c;选择一张图…

计算机图形学-变换基础

坐标系转换历程模型坐标系 -> 世界坐标系 -> 摄像机坐标系 -> 视口&#xff08;屏幕&#xff09;坐标系 变换 仿射变换和线性变换线性&#xff1a;旋转 缩放 镜像 切变放射&#xff1a; 平移 平移 2D变换矩阵 3D变换矩阵 旋转 2D旋转矩阵 //2D 旋转private (float,…

sql语句在字段中使用select

有两个表如下&#xff1b;产品表&#xff0c;产品评论表&#xff1b; 查询全部产品信息和每种产品的评论数量&#xff1b; 这也是子查询的一种&#xff1b; select * from product1; select * from comment; SELECT product1.*,(select count(id) from comment where product1…

【docker系列】docker命令篇

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

RabbitMQ之消费者可靠性

文章目录 前言一、消费者确认机制二、失败重试机制三、失败处理策略四、业务幂等性唯一消息ID业务判断 五、兜底方案总结 前言 当RabbitMQ向消费者投递消息以后&#xff0c;需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定被正确消费了&#xff0c;可能出现…

【Linux】bash 终端指令

进程 $ ps aux | grep pwd work 63317 0.0 0.0 51192 612 pts/9 S 14:22 0:00 grep /home/work/search/1000000.dyenv-user-diaoyan-baiseCliPlus-baisePlus-195522.diaoyan.yq/ala-ac/output_root端口 查看本机端口开放情况 netstat -tln | grep :31 tcp …

122.买卖股票的最佳时机II(不限次数)

题目 题解 labuladong的状态图解 class Solution:def maxProfit(self, prices: List[int]) -> int:N len(prices)# 定义状态&#xff1a;dp[i][j]表示在第i天持有或卖出时的最大利润&#xff0c;j1代表持有&#xff0c;j0代表卖出dp [[0 for j in range(2)] for i in ra…

软件测试面试必杀篇:【2023软件测试面试八股文宝典】

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、App测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

P16 C++构造函数

目录 前言 01 什么是构造函数呢&#xff1f; 02 非构造函数初始化变量 03 构造函数初始化变量 04 带参数的构造函数。 最后的话 前言 我们继续学习 C 的面向对象编程&#xff0c;本章主要是讲其中的 构造函数。 01 什么是构造函数呢&#xff1f; 构造函数基本上是一种特…

pytorch导出rot90算子至onnx

如何导出rot90算子至onnx 1 背景描述2 等价替换2.1 rot90替换(NCHW)2.2 rot180替换(NCHW)2.3 rot270替换(NCHW) 3 rot导出ONNX 1 背景描述 在部署模型时&#xff0c;如果某些模型中或者前后处理中含有rot90算子&#xff0c;但又希望一起和模型导出onnx时&#xff0c;可能会遇到…

基于51单片机直流电机PWM控制设计

直流电机驱动 &#x1f3b6;基于51单片机的PWM控制直流电机设计( proteus仿真程序报告讲解视频&#xff09;&#x1f3b6;主要功能&#xff1a;&#x1f3b6;仿真&#x1f3b6;程序设计&#xff1a; &#x1f3b6;设计报告&#x1f3b6;资料清单&#xff1a;资料网盘下载链接&a…

hivesql 将json格式字符串转为数组

hivesql 将json格式字符串转为数组 完整过程SQL在文末 json 格式字符串 本案例 json 字符串参考格式&#xff0c;请勿使用本数据 {"data": [{"province": 11,"id_card": "110182198903224674","name": "闾丘饱乾"…

gitee仓库使用教程

下载安装git&#xff1b;在本地项目文件夹右击鼠标点击Git Bash Here;输入git init&#xff0c;这个目录变成git可以管理的仓库&#xff0c;会出现一个.git文件夹&#xff0c;如果没出现的话需要选择“显示隐藏文件”&#xff08;不会的同学自行百度一下&#xff09; 4.绑定本地…

MySQL数据库如何实现跨服务器访问数据

点击上方蓝字关注我 在使用MySQL数据库时&#xff0c;很多同学经常会问&#xff0c;我能跨服务器访问另一库的数据么&#xff1f;得到的答案很多时候是让人失望的。那么如果真的需要访问&#xff0c;又不想使用拷贝表及数据的方式&#xff0c;可以实现么&#xff0c;又该如何实…

3.数据结构

3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图&#xff0c;它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 3.1.1逻辑结构&#xff1a;线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中&#xff0c;数据按照…

056-第三代软件开发-软件打包

第三代软件开发-软件打包 文章目录 第三代软件开发-软件打包项目介绍软件打包1 下载 linuxdepoyqt 工具2 安装 linuxdepoyqt3 qmake配置4 打包程序 总结 关键字&#xff1a; Qt、 Qml、 linuxdeployqt、 Ubuntu、 AppImage 项目介绍 欢迎来到我们的 QML & C 项目&…

常见树种(贵州省):021冬青、连香树、白辛树、香合欢、云贵鹅耳枥、肥牛树、杜英、格木、黄连木、圆果化香树、南天竹

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、冬青 …