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()@Overridepublic 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()@Overridepublic 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 blocke.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()@Overridepublic 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() {//点击鼠标释放后的事件@Overridepublic 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 blocke.printStackTrace();}//每隔这么长时间重新执行}}}

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

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

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

     
    public class Bird {//小鸟类// x:190 y:220public 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-7imgs[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之后归0index=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() {//点击鼠标释放后的事件@Overridepublic 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()@Overridepublic 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() {//点击鼠标释放后的事件@Overridepublic 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 blocke.printStackTrace();}//每隔这么长时间重新执行}}}

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

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

相关文章

「Verilog学习笔记」非整数倍数据位宽转换24to128

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现24bit数据至128bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。24bit数据至128bit数据&#xff0c;相当于5个输入数据第6个输入数据的拼接成一…

Nacos 2.X核心架构源码剖析

概述 注册中心并发处理&#xff0c;1.4.x 写时复制&#xff0c;2.1.0 读写分离&#xff1b;nacos 一般使用 AP 架构&#xff0c;即临时实例&#xff0c;1.4.x 为 http 请求&#xff0c;2.1.0 优化为 gRPC 协议&#xff1b;源码中使用了大量的事件通知机制和异步定时线程池&…

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…

初识Spring (Spring 核心与设计思想)

文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…

C++类与对象(6)—初始化列表、explicit关键字、static成员

目录 一、初始化列表 1、定义 2、注意事项 3、尽量使用初始化列表初始化 4、初始化顺序 二、 explicit关键字 1、定义 2、特点 三、static成员 1、定义 2、特性 3、例题 一、初始化列表 下面这段代码可以正常编译&#xff1a; class A { private:int _a1;//成员…

CGAN原理讲解与源码

1.CGAN原理 生成器&#xff0c;输入的是c和z&#xff0c;z是随机噪声&#xff0c;c是条件&#xff0c;对应MNIST数据集&#xff0c;要求规定生成数字是几。 输出是生成的虚假图片。 判别器的输入是 1.生成器输出的虚假图片x; 2.对应图片的标签c 来自真实数据集&#xff0c;且…

【深度学习】概率图模型(一)概率图模型理论简介

文章目录 一、概率图模型1. 联合概率表2. 条件独立性假设3. 三个基本问题 二、模型表示1. 有向图模型&#xff08;贝叶斯网络&#xff09;2. 无向图模型&#xff08;马尔可夫网络&#xff09; 三、学习四、推断 概率图模型&#xff08;Probabilistic Graphical Model&#xff0…

ROS知识:卡尔曼滤波

https://en.wikipedia.org/wiki/Kalman_filter 一、提要 在卡尔曼滤波的相关技术文献中,其数学表达看起来都非常晦涩和不透明。这很糟糕,如果您以正确的方式看待卡尔曼滤波器,它实际上非常简单易懂。这里的叙述简单,先决条件也很简单;您所需要的只是对概率和矩阵的基本了解…

【C++】友元

1. 友元的概念 友元的目的就是让一个函数或者类 访问另一个类中私有成员。 友元的三种实现&#xff1a; 全局函数做友元类做友元成员函数做友元 2. 友元的实现方式 2.1 全局函数做友元 #include <iostream> using namespace std; class Building {// 告诉编译器 go…

【Android Gradle】之一小时 Gradle及 wrapper 入门

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

PC删除数据,并提示删除成功

<template<el-button size"mini" type"text">分配权限</el-button><el-button size"mini" type"text" click"btnEditRow(row)">编辑</el-button ><el-popconfirmtitle"这是一段内容确定…

计算机毕业设计springboot+vue高校田径运动会报名管理系统61s38

高校田径运动会管理采用java技术&#xff0c;基于springboot框架&#xff0c;mysql数据库进行开发&#xff0c;实现了首页、个人中心、运动员管理、裁判员管理、场地信息管理、项目类型管理、比赛项目管理、比赛报名管理、比赛成绩管理、通知公告管理、留言板管理、交流论坛、系…

微软发布了Orca 2,一对小型语言模型,它们的性能超越了体积更大的同类产品

尽管全球目睹了OpenAI的权力斗争和大规模辞职&#xff0c;但作为AI领域的长期支持者&#xff0c;微软并没有放慢自己的人工智能努力。今天&#xff0c;由萨提亚纳德拉领导的公司研究部门发布了Orca 2&#xff0c;这是一对小型语言模型&#xff0c;它们在零样本设置下对复杂推理…

数据结构---顺序表

文章目录 线性表线性表的定义线性表分类 顺序表顺次表的存储结构实现顺序表的主要接口函数初始化顺序表顺序表尾插顺序表尾删顺序表头插顺序表头删在指定位置插入数据在指定的位置删除数据头插&#xff0c;头删&#xff0c;尾插&#xff0c;尾删新写法打印顺序表销毁顺序表 线性…

基于halo框架采用docker-compose快速部署个人博客

halo快速部署个人博客 技术方案 dockerdocker-composenginxmysql halo简介 Halo是一款现代化的开源博客/CMS系统&#xff0c;所有代码开源在GitHub上且处于积极维护状态。它是基于 Java Spring Boot 构建的&#xff0c;易于部署&#xff0c;支持REST API、模板系统、附件系…

关于微服务的思考

目录 什么是微服务 定义 特点 利弊 引入时机 需要哪些治理环节 从单体架构到微服务架构的演进 单体架构 集群和垂直化 SOA 微服务架构 如何实现微服务架构 服务拆分 主流微服务解决方案 基础设施 下一代微服务架构Service Mesh 什么是Service Mesh&#xff1f…

python实现自动刷平台学时

背景 前一阵子有个朋友让我帮给小忙&#xff0c;因为他每学期都要看视频刷学时&#xff0c;一门平均需要刷500分钟&#xff0c;一学期有3-4门需要刷的。 如果是手动刷的话&#xff0c;比较麻烦&#xff0c;能否帮他做成自动化的。搞成功的话请我吃饭。为了这顿饭&#xff0c;咱…

京东秒杀之商品展示

1 在gitee上添加.yml文件 1.1 添加good-server.yml文件 server:port: 8084 spring:datasource:url: jdbc:mysql://localhost:3306/shop_goods?serverTimezoneGMT%2B8driverClassName: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceusername: rootpa…

多功能音乐沙漏的设计与实现

【摘要】随着当今社会快节奏生活的发展&#xff0c;当代大学生越来忽视时间管理的重要性&#xff0c;在原本计划只看几个视频只玩几个游戏的碎片化娱乐中耗费了大量的时光&#xff0c;对于自己原本的学习生活产生了巨大的影响。为更加有效的反映时间的流逝&#xff0c;特设计该…

第十七章 解读PyTorch断点训练(工具)

主要有以下几方面的内容&#xff1a; 对于多步长训练需要保存lr_schedule初始化随机数种子保存每一代最好的结果 简单详细介绍 最近在尝试用CIFAR10训练分类问题的时候&#xff0c;由于数据集体量比较大&#xff0c;训练的过程中时间比较长&#xff0c;有时候想给停下来&…