【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版)+ IO 数据存储
- 数字炸弹小游戏概述
- 功能实现
- 实体类
- User.java 玩家信息实体类
- GameRecode.java 游戏记录实体类
- 自定义异常
- AccountLockedException.java 账号锁定异常
- PasswordErrorException.java 密码错误异常
- UnknowAccountException 账号不存在异常
- 游戏主类
- Game.java 游戏主类
数字炸弹小游戏概述

数字炸弹控制台版小游戏是Java 集合、流程控制、IO、异常、常用类等技术的综合练习。核心需求如下:
实现数字炸弹游戏,要求如下:1、创建游戏菜单:1)注册2)登录3)开始游戏4)游戏记录5)游戏排行6)退出游戏2、菜单含义:1)注册:注册游戏玩家,要求玩家名字不能重复2)登录:使用玩家名字和密码进行登陆3)开始游戏:进入游戏,只有登录的玩家才可以开始游戏4)游戏记录:展示当前玩家的游戏记录,序号、炸弹、猜测次数、游戏开始时间、游戏结束时间、积分5)游戏排行:展示所有用户的昵称、游戏次数、总积分(倒序)6)退出游戏:结束游戏3、游戏规则a、生成100以内的随机值作为炸弹b、从控制台输入猜测的数值c、每次输入猜测值之后缩小猜测范围直到猜中为止d、本轮游戏结束之后反馈菜单(继续游戏、返回菜单)e、本轮游戏结束之后根据猜测次数和游戏时间换算积分4、游戏积分a、1-3次内猜中(含3次),时间在20秒以内,积分+10b、4-6次内猜中(含6次),时间在21-60秒,积分+5c、7-10次内猜中(含10次),时间在60秒以上,积分+2d、10次以上猜中不得分5、拓展功能:a、给游戏排行榜新加菜单选项,支持升序、降序的展示菜单。b、新增玩家管理功能,锁定玩家和解锁玩家。c、给登录功能增加异常处理,自定义:账号不存在异常、认证失败异常、锁定异常d、基于 IO 存储玩家信息和记录信息到文件。
功能实现
实体类
User.java 玩家信息实体类
package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Objects;/*** 玩家类,玩家的相关信息*/
public class User implements Comparable<User>, Serializable {// 账号private String name;// 密码private String password;// 总的猜测数量、游戏的次数private Integer totalCount;// 总的积分private Integer totalPoints;// 玩家锁定、解锁的标记:false(解锁状态)true(锁定状态)private boolean isLock = false;public User() {}public User(String name, String password, Integer totalCount, Integer totalPoints) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;}public User(String name, String password, Integer totalCount, Integer totalPoints, boolean isLock) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;this.isLock = isLock;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getTotalCount() {return totalCount;}public void setTotalCount(Integer totalCount) {this.totalCount = totalCount;}public Integer getTotalPoints() {return totalPoints;}public void setTotalPoints(Integer totalPoints) {this.totalPoints = totalPoints;}public boolean isLock() {return isLock;}public void setLock(boolean lock) {isLock = lock;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +", totalCount=" + totalCount +", totalPoints=" + totalPoints +", isLock=" + isLock +'}';}/*** equals 和 hashCode 可以帮助我们判断对象的唯一性* 当前类的唯一性的条件是:用户名字,玩家在注册时候可以保证唯一性* @param o* @return*/@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(name, user.name);}@Overridepublic int hashCode() {return Objects.hash(name);}@Overridepublic int compareTo(User o) {return this.getName().compareTo(o.name);}
}
GameRecode.java 游戏记录实体类
package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Date;/*** 每次游戏的记录信息*/
public class GameRecode implements Serializable {// 炸弹private Integer boom;// 猜测次数private Integer count;// 游戏开始时间private Date startTime;// 游戏结束时间private Date endTime;// 积分private Integer points;public Integer getBoom() {return boom;}public void setBoom(Integer boom) {this.boom = boom;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}public Date getEndTime() {return endTime;}public void setEndTime(Date endTime) {this.endTime = endTime;}public Integer getPoints() {return points;}public void setPoints(Integer points) {this.points = points;}@Overridepublic String toString() {return "GameRecode{" +"boom=" + boom +", count=" + count +", startTime=" + startTime +", endTime=" + endTime +", points=" + points +'}';}
}
自定义异常
AccountLockedException.java 账号锁定异常
package com.riu.collect.game2.exception;/*** 玩家账号锁定异常*/
public class AccountLockedException extends Exception {public AccountLockedException() {super();}public AccountLockedException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
PasswordErrorException.java 密码错误异常
package com.riu.collect.game2.exception;/*** 玩家密码错误,认证失败*/
public class PasswordErrorException extends Exception {public PasswordErrorException() {super();}public PasswordErrorException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
UnknowAccountException 账号不存在异常
package com.riu.collect.game2.exception;/*** 玩家账号不存在异常*/
public class UnknowAccountException extends Exception {public UnknowAccountException() {super();}public UnknowAccountException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
游戏主类
Game.java 游戏主类
package com.riu.collect.game2;import com.riu.collect.game2.entity.GameRecode;
import com.riu.collect.game2.entity.User;
import com.riu.collect.game2.exception.AccountLockedException;
import com.riu.collect.game2.exception.PasswordErrorException;
import com.riu.collect.game2.exception.UnknowAccountException;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Stream;public class Game {// 创建一个用户的集合private List<User> userList = new ArrayList<>();// 玩家和记录的对应关系private Map<String, List<GameRecode>> recodeMap = new HashMap<>();// 当前登录的玩家名字private String loginName;// 判断玩家是登录的标记,默认 false 表示没有登录。// 等成功之后可以进行一些菜单操作boolean isLogin = false;// 两个文件路径private String userInfoPath = "src/com/riu/collect/game2/userInfo.txt";private String recodeInfoPath = "src/com/riu/collect/game2/recodeInfo.txt";// 定义公共的输入对象private Scanner scanner = new Scanner(System.in);public static void main(String[] args) {Game game = new Game();game.init();while (true){game.menu();}}/*** 初始化系统,从文件中将数据读取到 List*/private void init(){try {/* 用户玩家信息读取 */File userInfoFile = new File(userInfoPath);if(userInfoFile.exists()){ObjectInputStream oisUserInfoStream = new ObjectInputStream(new FileInputStream(userInfoPath));Object userInfoObject = oisUserInfoStream.readObject();if(userInfoObject != null){userList = (List<User>) userInfoObject;}oisUserInfoStream.close();}/* 用户玩家游戏记录读取 */File recodeInfoFile = new File(recodeInfoPath);if(recodeInfoFile.exists()) {ObjectInputStream oisRecodeInfoStream = new ObjectInputStream(new FileInputStream(recodeInfoPath));Object recodeObject = oisRecodeInfoStream.readObject();if (recodeObject != null) {recodeMap = (Map<String, List<GameRecode>>) recodeObject;}oisRecodeInfoStream.close();}} catch (Exception e) {throw new RuntimeException(e);}}public void menu(){System.out.println("===================================");System.out.println("\t\t\t1)注册");System.out.println("\t\t\t2)登录");if(isLogin){System.out.println("\t\t\t3)开始游戏");System.out.println("\t\t\t4)游戏记录");}System.out.println("\t\t\t5)游戏排行");System.out.println("\t\t\t6)退出游戏");System.out.println("\t\t\t7)玩家管理");System.out.println("===================================");System.out.print("请输入菜单编号:");int menuNum = scanner.nextInt();switch (menuNum) {case 1:// 注册reg();break;case 2:// 登录try {login();} catch (UnknowAccountException | PasswordErrorException | AccountLockedException e) {System.out.println(e.getMessage());}break;case 3:// 开始游戏startGame();break;case 4:// 展示游戏记录gameRecode();break;case 5:// 展示游戏排行榜gameTop();break;case 6:// 退出游戏exit();break;case 7:// 退出游戏userControl();break;}}/*** 注册*/private void reg() {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 把输入的信息封装到对象中User user = new User();user.setName(name);user.setPassword(password);// 判断集合中是否已经存在玩家信息// 这里使用 contains 对比,要求 user 类必须重写 equals 和 hashcode 方法if(userList.contains(user)){System.out.println("玩家已经存在,快去开始游戏吧...");} else {// 把对象添加到集合userList.add(user);System.out.println("注册成功,快去开始游戏吧...");}}/*** 登录* 1、账号是否存在* 2、账号密码是否匹配* 3、账号是否被锁定** 账号是用户输入的,根据用户输入的信息,递进验证账号是否可以使用。* 1、账号是否存在:拿着用户输入的信息,从集合中获取用户的信息对象。可以把用户对象临时存储一下。* 2、账号密码是否匹配:拿着用户输入的密码,和获取到的用户对象的密码对比。* 3、账号是否被锁定:根据获取到的用户的对象信息中的锁定状态判断。*/private void login() throws UnknowAccountException, PasswordErrorException, AccountLockedException {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 用于临时存储用户信息的对象User tempUser = null;// 循环遍历,找账号信息for (User item : userList) {String tempName = item.getName();// 用户输入的账号,和集合中获取的用户的账号对比// 找到用户了。if (name.equals(tempName)) {tempUser = item;break;}}// 基于账号信息(tempUser)做3种别判断// 1、账号是否存在if(tempUser == null){// System.out.println("账号不存在!");throw new UnknowAccountException("该玩家不存在!");} else {// System.out.println("账号存在!");// 2、账号密码是否匹配// 玩家输入的密码和 tempUser 的密码匹配if(password.equals(tempUser.getPassword())){// System.out.println("密码正确!");// 3、账号是否被锁定if(tempUser.isLock()){// System.out.println("账号被锁定");throw new AccountLockedException("账号被锁定!");} else {System.out.println("账号可用,登录成功!");// 玩家存在的标记修改为 trueisLogin = true;// 登录成功之后把当前玩家的名字赋值给全局的变量loginName = name;// 登录成功了,给当前用户创建一个用于存储游戏记录的list结果recodeMap.put(name, new ArrayList<>());}} else {// System.out.println("密码不正确,认证失败!");throw new PasswordErrorException("密码错误!");}}}/*** 开始游戏*/private void startGame() {// 可以给循环做一个标记:lab 就是这个循环的标记名字,名字可以任意。lab:while (true){/* 游戏本身需要的相关变量 */// 区间开始和结束int start = 0;int end = 100;/* 游戏本身需要的相关变量 *//* 游戏记录数据需要的相关变量 */// 每一轮游戏的过程// 随机炸弹int boom = new Random().nextInt(100);// 开始和结束时间Date startTime = new Date();Date endTime = null;// 每一轮游戏猜的次数int count = 0;// 每一轮游戏的积分变量int points = 0;/* 游戏记录数据需要的相关变量 */while (true){// 猜测次数的累加count++;System.out.print("请猜:");int num = scanner.nextInt();if(num > boom){end = num;} else if(num < boom){start = num;} else {System.out.println("💣游戏结束💣");/* 游戏结束才开始收集游戏信息:开始 */// 结束时间endTime = new Date();// 计算时间间隔long l = (endTime.getTime() - startTime.getTime()) / 1000;// 计算次数if (count >= 1 && count <= 3) {points = 10;} else if (count >= 4 && count <= 6) {points = 5;} else if (count >= 7 && count <= 10) {points = 2;} else {points = 0;}// 创建记录对象,封装游戏过程中的记录信息GameRecode gameRecode = new GameRecode();gameRecode.setBoom(boom);gameRecode.setCount(count);gameRecode.setStartTime(startTime);gameRecode.setEndTime(endTime);gameRecode.setPoints(points);// 这些记录是哪个玩家的。把记录和玩家挂钩。List<GameRecode> gameRecodeList = recodeMap.get(loginName);gameRecodeList.add(gameRecode);/* 游戏结束才开始收集游戏信息:结束 */// 跳出猜测的循环break;}System.out.println("游戏继续,区间是:[" + start + ", " + end + "]");}System.out.println("****************************************");System.out.println("\t\t\t1)继续游戏");System.out.println("\t\t\t2)返回菜单");System.out.println("****************************************");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum) {case "1":// 结束的是 switchbreak;case "2":// 结束标记是 lab 的循环break lab;}}}/*** 展示当前用户的游戏记录*/private void gameRecode() {// 通过玩家和记录的Map集合,获取登录玩家的记录集合List<GameRecode> gameRecodeList = recodeMap.get(loginName);// 遍历当前玩家的记录集合System.out.println("序号\t炸弹\t次数\t开始时间\t\t\t\t结束时间\t\t\t\t积分");int i = 1;for (GameRecode gameRecode : gameRecodeList) {System.out.println(i++ + "\t" +gameRecode.getBoom()+ "\t" +gameRecode.getCount()+ "\t" +formatTime(gameRecode.getStartTime())+ "\t" +formatTime(gameRecode.getEndTime())+ "\t" +gameRecode.getPoints()+ "\t");}}/*** 格式化时间的方法* @param date* @return*/private String formatTime(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}/*** 按照积分的降序展示每个用户的信息* 用户的昵称、游戏次数、总积分(倒序)*/private void gameTop() {// 遍历用户结果集,汇总玩家的记录数据,循环走完之后,userList 中的每个玩家的游戏次数和总积分都会有值了for (User user : userList) {// 获取当前用户游戏记录的结果集List<GameRecode> gameRecodeList = recodeMap.get(user.getName());// 遍历游戏记录结果集,统计所有积分的和int sumPoints = 0;for (GameRecode gameRecode : gameRecodeList) {Integer points = gameRecode.getPoints();sumPoints += points;}// 将统计好的结果在赋值给用户对象user.setTotalCount(gameRecodeList.size());user.setTotalPoints(sumPoints);}System.out.println("-----------------------------------");System.out.println("\t\t\t1)升序展示");System.out.println("\t\t\t2)降序展示");System.out.println("-----------------------------------");System.out.print("请输入菜单编号:");String menuNum = scanner.next();System.out.println("昵称\t游戏次数\t总积分");// 默认升序排序,调用 sorted 之后返回一个可以继续操作的流Stream<User> newStream = userList.stream();switch (menuNum) {case "1":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints));break;case "2":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints).reversed());break;}// 输出放到最后newStream.forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});// 根据积分倒叙排序// 1、List 转化为 Stream 流对象// 2、调用 Stream 的 sorted 方法进行排序// 3、sorted 需要传递一个排序的规则,这个规则是 Comparator 类型。这里思考:如何获取 Comparator 类型// 4、Comparator.comparing 方法可以返回一个 Comparator 类型,也就是排序的规则对象。其中还要知道排序的数据是哪个?是积分// 解析:Comparator.comparing 构建一个规则对象。方法传递要排序的关键字(数据属性)。reversed() 就是降序/*userList.stream().sorted(Comparator.comparing(User::getTotalPoints).reversed()).forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});*/}/*** 结束游戏*/private void exit() {// 添加 IO 的操作,把玩家的信息写入到文件。try {/* 用户信息的存储 */// 也就是把 userList 的数据写入到文件File userInfoFile = new File(userInfoPath);if(!userInfoFile.exists()){userInfoFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosUserInfoSteam = new ObjectOutputStream(new FileOutputStream(userInfoFile));oosUserInfoSteam.writeObject(userList);oosUserInfoSteam.close();/* 用户游戏记录的存储 */// 也就是把 userList 的数据写入到文件File recodeFile = new File(recodeInfoPath);if(!recodeFile.exists()){recodeFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosRecodeInfoSteam = new ObjectOutputStream(new FileOutputStream(recodeInfoPath));oosRecodeInfoSteam.writeObject(recodeMap);oosRecodeInfoSteam.close();} catch (Exception e) {e.printStackTrace();System.out.println("文件操作异常!");}System.exit(0);}/*** 玩家管理:对玩家进行锁定和解锁*/private void userControl(){System.out.print("请输入要管理的玩家昵称:");// 要匹配的玩家名字String userName = scanner.next();User lockUser = null;boolean isLock = false;for (User user : userList) {String name = user.getName();if(userName.equals(name)){lockUser = user;break;}}if(lockUser != null){// 找到玩家之后,再进行业务处理System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.println("\t\t\t1)锁定玩家");System.out.println("\t\t\t2)解锁玩家");System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum){case "1":isLock = true;break;case "2":isLock = false;break;}lockUser.setLock(isLock);System.out.println("^^^^^操作成功^^^^^");} else {System.out.println("该玩家不存在!");}}
}
相关文章:
【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版) IO 数据存储 数字炸弹小游戏概述功能实现实体类User.java 玩家信息实体类GameRecode.java 游戏记录实体类 自定义异常AccountLockedException.java 账号锁定异常PasswordErrorException.java 密码错误异常UnknowAccountEx…...
今日头条躺赚流量:自动化新闻爬取和改写脚本
构建一个自动化的新闻爬取和改写系统,实现热点新闻的自动整理和发布,需要分为以下几个模块:新闻爬取、信息解析与抽取、内容改写、自动发布。以下是每个模块的详细实现步骤和代码示例: 1. 新闻爬取模块 目标:从新闻网…...
日常实习与暑期实习详解
日常实习与暑期实习详解 问了下正在实习的同学,发现天要塌了–才知道日常实习是没有笔试的 1. 实习的定义 1.1 日常实习 日常实习是企业长期招聘的实习岗位,通常没有时间限制。企业会在需要时进行招聘,招聘对象包括在校大学生和大一、大二的…...
Git的原理和使用(六)
本文主要讲解企业级开发模型 1. 引入 交付软件的流程:开发->测试->发布上线 上面三个过程可以详细划分为一下过程:规划、编码、构建、测试、发 布、部署和维护 最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完…...
Elasticsearch 中的高效按位匹配
作者:来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法,包括术语编码(我喜欢的方法)、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…...
LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
关于lstm超参数设置,每个参数都有合适的范围,超过这个范围则lstm训练不再有效,loss不变,acc也不变 LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络&am…...
导出问题处理
问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…...
通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
用 手机自动化脚本,从自媒体上获取视频,一个商品对应几百个视频,我们把这几百个视频下载下来,进行分镜 视频切片,从自媒体上下载视频,通过cv库用直方图识别每个镜头进行切片。 下载多个图片进行视频的伪原…...
【机器学习】——numpy教程
文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…...
多线程——线程的状态
线程状态的意义 线程状态的意义在于描述线程在执行过程中的不同阶段和条件,帮助开发者更好地管理和调度线程资源。 线程的多种状态 线程的状态是一个枚举类型(Thread.State),可以通过线程名.getState()…...
开源数据库 - mysql - 组织结构(与oracle的区别)
组织形式区别 mysql(Schema -> Table -> Column -> Row) Schema(方案): Scheme是关于数据库和表的布局及特性的信息。它可以用来描述数据库中特定的表以及整个数据库和其中表的信息,如表的一些特…...
vue3+vite 部署npm 包
公司需要所以研究了一下怎么部署安装,比较简单 先下载个vue项目 不用安准路由,pinna 啥的,只需要一个最简单的模版 删掉App.vue 中的其它组件 npm create vuelatest 开始写自定义组件 新建一个el-text 组件, name是重点,vue3中…...
华为鸿蒙HarmonyOS应用开发者高级认证视频及题库答案
华为鸿蒙开发者高级认证的学习资料 1、课程内容涵盖HarmonyOS系统介绍、DevEco Studio工具使用、UI设计与开发、Ability设计与开发、分布式特性、原子化服务卡片以及应用发布等。每个实验都与课程相匹配,帮助加深理解并掌握技能 2、学习视频资料 华为HarmonyOS开发…...
【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构
从零开始认识IP协议 1 网络层协议1.1 初步认识IP协议1.2 初步理解IP地址 2 IP协议报头3 初步理解网段划分 1 网络层协议 1.1 初步认识IP协议 我们已经熟悉了传输层中的UDP和TCP协议,接下来我们来接触网络层的协议: 网络层在计算机网络中的意义主要体现…...
大一物联网要不要转专业,转不了该怎么办?
有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…...
LeetCode题练习与总结:4的幂--342
一、题目描述 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n 4^x 示例 1: 输入:n 16 输出&am…...
ubuntu GLEW could not be initialized : Unknown error
原因 某些ubuntu版本默认使用wayland协议,glew不支持 解决方法 1、编辑GDM3配置文件 sudo nano /etc/gdm3/custom.conf 2、修改配置文件 去掉#WaylandEnablefalse前的# 3、重启GDM3服务 sudo systemctl restart gdm3 修改后默认使用X11协议。...
51c~目标检测~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12371248 #目标检测x1 又一个发现 都不知道是第几了 是一个高效的目标检测 动态候选较大程度提升检测精度 目标检测是一项基本的计算机视觉任务,用于对给定图像中的目标进行定位和分类。 论文地址:…...
前端工程化面试题
说一下模块化方案 模块化是为了解决代码的复用和组织问题,可以说有了模块化才让前端有了工程的概念,模块化要解决两大问题 代码隔离和依赖管理,从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范,再到现…...
【Visual Studio】下载安装 Visual Studio Community 并配置 C++ 桌面开发环境的图文教程
引言 Visual Studio 是一个面向 .NET 和 C 开发人员的综合性 Windows 版 IDE,可用于构建 Web、云、桌面、移动应用、服务和游戏。 安装步骤 访问 Visual Studio 的官方下载页面: https://visualstudio.microsoft.com/zh-hans/downloads/运行已下载的 V…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
