【玩儿】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…...
010Editor:十六进制编辑器
介绍 世界上最好的十六进制编辑器和出色的文本编辑器 010 Editor 是用于处理文本和二进制数据的终极工具包。 添加模板 模板库https://www.sweetscape.com/010editor/repository/templates/ 先下载一个ELF 模板 运行模板...
Vscode中Github Copilot无法使用
现象 Copilot侧边栏显示要登录,但是点击"github登录"没有反应与Copilot对话,报错如下: Unexpected token o, "[object Rea"... is not valid JSON解决方案 在网上怎么找都没找到类似的问题,最后发现是Vsco…...
<项目代码>YOLOv8表情识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
利用Msfvenom实现对Windows的远程控制
1.实验准备 kali安装 Apache2(如果尚未安装): sudo apt install apache2 启动 Apache2 服务: sudo systemctl start apache2确认 Apache2 的默认网页可以访问: 打开浏览器并访问 http://<你的Kali IP>ÿ…...
Java Iterator和for区别详解和常见问题及解决方式
在 Java 中,Iterator 是一个用于遍历集合元素的接口。它为访问集合中的元素提供了一种标准的方法,不管具体集合的实现如何。本文将详细讲解 Iterator 的使用、其与 for 循环的区别,以及在遍历集合时的删除操作可能带来的问题,并提…...
川渝地区软件工程考研择校分析
C哥专业提供——计软考研院校选择分析专业课备考指南规划 通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西…...
快捷键记忆
快捷键记忆 文章目录 快捷键记忆前言一、PotPlayer快捷键二、电脑快捷键总结 前言 提示:以下是本篇文章正文内容: 一些软件的快捷键经常忘记,写这篇文章的目的是帮助我忘记的时候来查看。 顺序实时更新: 一、PotPlayer快捷键 Po…...
Flutter鸿蒙next 状态管理高级使用:深入探讨 Provider
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
JMeter实战之——模拟登录
本篇介绍使用JMeter 如何对需要登录的站点进行压力测试。 基本Session验证的机制 使用session进行请求验证的机制是一种常见的Web应用认证方式。 该认证方式的主要内容如下: 一、登录过程 用户输入:用户在登录页面输入用户名和密码。发送请求&#x…...
智能台灯设计(一)原理图设计
1. 前言 作者最近突发奇想,想自己做一个小台灯,设想的功能有:带锂电池可充电、可以调节亮度,后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能,有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…...
平台做网站点击/想建立自己的网站怎么建立
转载请注明出处:点我 由于Docker自身的网络的原因,想要在多主机间的容器之间进行通信是比较麻烦的事情。可以利用Ambassador容器来实现这一功能。 基本原理: 利用Ambassador来实现主机间容器进行通信时,需要在两台需要通信的容器的…...
做电影网站哪个源码好/网站搭建平台都有哪些
在讲解肺炎双球菌转化实验的时候,师生往往面临着如下几个疑问,试解答如下: ①加热能杀死细菌,却为何“杀不死”DNA? 对S型细菌加热到一定程度(60度到100度),其蛋白质的分子结构受到破…...
常州网站制作公司排名/抖音搜索seo排名优化
初级 fun() 全局对象window obj.sayName扩展 1this是什么 任何函数本质上都是通过某个对象调用的,如果没有指定就是window 所有函数内部都有一个变量this 它的值是调用函数的当前对象 2如何确定this的值 test()…...
报社新闻网站建设方案/关键词搜索引擎
近日,无论是国内运营商还是国外运营商,都打出来一个名词——无限套餐流量。 据了解,目前美国的主要移动运营商都已经开始提供无限流量套餐,消费者将不再需要在蜂窝网络和WiFi之间来回切换,来避免高昂的流量费。 国内运…...
网站建设免费空间哪里有/南宁网络推广有限公司
文章目录在mathtype上写latex公式word自动设置公式编号没想到,学院这就开始组织开题报告了,所以不可避免地又要开始敲公式了,然而今时已不同往日,俺已经是个CSDN小博主啦,肯定不能继续用mathtype那种可视化方法打公式啦…...
做网站开发想转行做医药销售/列举网络推广的方式
1.肉鸡:所谓“肉鸡”是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以是大型的服务器,我们可以象自己的电脑那…...