当前位置: 首页 > news >正文

用Java写一个俄罗斯方块

目录

游戏规则

小方块类:Cell

 七种图形类:I、J、L、O、S、T、Z

 J

 L

 O

 S

 T

Z

 俄罗斯方块游戏主类:Tetris

效果展示


游戏规则

由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

整体代码分为三个模块:方格模块,七种图形模块,俄罗斯方块主模块。
 

小方块类:Cell

package com.zhao.demo.block;import java.awt.image.BufferedImage;
import java.util.Objects;/*** @author xiaoZhao* @date 2022/5/7* @describe*  小方块类*   方法: 左移、右移、下落*/
public class Cell {// 行private int row;// 列private int col;private BufferedImage image;public Cell() {}public Cell(int row, int col, BufferedImage image) {this.row = row;this.col = col;this.image = image;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}public BufferedImage getImage() {return image;}public void setImage(BufferedImage image) {this.image = image;}@Overridepublic String toString() {return "Cell{" +"row=" + row +", col=" + col +", image=" + image +'}';}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (!(o instanceof Cell)) {return false;}Cell cell = (Cell) o;return getRow() == cell.getRow() &&getCol() == cell.getCol() &&Objects.equals(getImage(), cell.getImage());}@Overridepublic int hashCode() {return Objects.hash(getRow(), getCol(), getImage());}//左移动一格public void left(){col--;}//右移动一格public void right(){col++;}//下移动一格public void down(){row++;}
}

 七种图形类:I、J、L、O、S、T、Z

I

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class I extends Tetromino {public I() {cells[0] = new Cell(0,4, Tetris.I);cells[1] = new Cell(0,3, Tetris.I);cells[2] = new Cell(0,5, Tetris.I);cells[3] = new Cell(0,6, Tetris.I);//共有两种旋转状态states =new State[2];//初始化两种状态的相对坐标states[0]=new State(0,0,0,-1,0,1,0,2);states[1]=new State(0,0,-1,0,1,0,2,0);}}

 J

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class J extends Tetromino {public J() {cells[0] = new Cell(0,4, Tetris.J);cells[1] = new Cell(0,3, Tetris.J);cells[2] = new Cell(0,5, Tetris.J);cells[3] = new Cell(1,5, Tetris.J);states=new State[4];states[0]=new State(0,0,0,-1,0,1,1,1);states[1]=new State(0,0,-1,0,1,0,1,-1);states[2]=new State(0,0,0,1,0,-1,-1,-1);states[3]=new State(0,0,1,0,-1,0,-1,1);}
}

 L

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class L extends Tetromino {public L() {cells[0] = new Cell(0,4, Tetris.L);cells[1] = new Cell(0,3, Tetris.L);cells[2] = new Cell(0,5, Tetris.L);cells[3] = new Cell(1,3, Tetris.L);states=new State[4];states[0]=new State(0,0,0,-1,0,1,1,-1);states[1]=new State(0,0,-1,0,1,0,-1,-1);states[2]=new State(0,0,0,1,0,-1,-1,1);states[3]=new State(0,0,1,0,-1,0,1,1);}
}

 O

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class O extends Tetromino {public O() {cells[0] = new Cell(0, 4, Tetris.O);cells[1] = new Cell(0, 5, Tetris.O);cells[2] = new Cell(1, 4, Tetris.O);cells[3] = new Cell(1, 5, Tetris.O);//无旋转状态states = new State[0];}
}

 S

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class S extends Tetromino {public S() {cells[0] = new Cell(0,4, Tetris.S);cells[1] = new Cell(0,5, Tetris.S);cells[2] = new Cell(1,3, Tetris.S);cells[3] = new Cell(1,4, Tetris.S);//共有两种旋转状态states =new State[2];//初始化两种状态的相对坐标states[0]=new State(0,0,0,1,1,-1,1,0);states[1]=new State(0,0,1,0,-1,-1,0,-1);}
}

 T

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class T extends Tetromino {public T() {cells[0] = new Cell(0,4, Tetris.T);cells[1] = new Cell(0,3, Tetris.T);cells[2] = new Cell(0,5, Tetris.T);cells[3] = new Cell(1,4, Tetris.T);states=new State[4];states[0]=new State(0,0,0,-1,0,1,1,0);states[1]=new State(0,0,-1,0,1,0,0,-1);states[2]=new State(0,0,0,1,0,-1,-1,0);states[3]=new State(0,0,1,0,-1,0,0,1);}
}

Z

package com.zhao.demo.shape;import com.zhao.demo.App.Tetris;
import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;/*** @author xiaoZhao* @date 2022/5/11* @describe*/
public class Z extends Tetromino {public Z() {cells[0] = new Cell(1,4, Tetris.Z);cells[1] = new Cell(0,3, Tetris.Z);cells[2] = new Cell(0,4, Tetris.Z);cells[3] = new Cell(1,5, Tetris.Z);//共有两种旋转状态states =new State[2];//初始化两种状态的相对坐标states[0]=new State(0,0,-1,-1,-1,0,0,1);states[1]=new State(0,0,-1,1,0,1,1,0);}
}

 俄罗斯方块游戏主类:Tetris

package com.zhao.demo.App;import com.zhao.demo.block.Cell;
import com.zhao.demo.block.Tetromino;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.security.cert.Certificate;/*** @author xiaoZhao* @date 2022/5/11* @describe 俄罗斯方块游戏主类*/
public class Tetris extends JPanel {//正在下落的方块private Tetromino currentOne = Tetromino.randomOne();//将要下落的方块private Tetromino nextOne = Tetromino.randomOne();//游戏主区域private Cell[][] wall = new Cell[18][9];//声明单元格的值private static final int CELL_SIZE = 48;//游戏分数池int[] scores_pool = {0, 1, 2, 5, 10};//当前游戏的分数private int totalScore = 0;//当前消除的行数private int totalLine = 0;//游戏三种状态 游戏中、暂停、结束public static final int PLING = 0;public static final int STOP = 1;public static final int OVER = 2;//当前游戏状态值private int game_state;//显示游戏状态String[] show_state = {"P[pause]", "C[continue]", "S[replay]"};//载入方块图片public static BufferedImage I;public static BufferedImage J;public static BufferedImage L;public static BufferedImage O;public static BufferedImage S;public static BufferedImage T;public static BufferedImage Z;public static BufferedImage background;static {try {I = ImageIO.read(new File("images/I.png"));J = ImageIO.read(new File("images/J.png"));L = ImageIO.read(new File("images/L.png"));O = ImageIO.read(new File("images/O.png"));S = ImageIO.read(new File("images/S.png"));T = ImageIO.read(new File("images/T.png"));Z = ImageIO.read(new File("images/Z.png"));background = ImageIO.read(new File("images/background.png"));} catch (IOException e) {e.printStackTrace();}}@Overridepublic void paint(Graphics g) {g.drawImage(background, 0, 0, null);//平移坐标轴g.translate(22, 15);//绘制游戏主区域paintWall(g);//绘制正在下落的四方格paintCurrentOne(g);//绘制下一个将要下落的四方格paintNextOne(g);//绘制游戏得分paintSource(g);//绘制当前游戏状态paintState(g);}public void start() {game_state = PLING;KeyListener l = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();switch (code) {case KeyEvent.VK_DOWN:sortDropActive();break;case KeyEvent.VK_LEFT:moveleftActive();break;case KeyEvent.VK_RIGHT:moveRightActive();break;case KeyEvent.VK_UP:rotateRightActive();break;case KeyEvent.VK_SPACE:hadnDropActive();break;case KeyEvent.VK_P://判断当前游戏状态if (game_state == PLING) {game_state = STOP;}break;case KeyEvent.VK_C:if (game_state == STOP) {game_state = PLING;}break;case KeyEvent.VK_S://重新开始game_state = PLING;wall = new Cell[18][9];currentOne = Tetromino.randomOne();nextOne = Tetromino.randomOne();totalScore = 0;totalLine = 0;break;}}};//将窗口设置为焦点this.addKeyListener(l);this.requestFocus();while (true) {if (game_state == PLING) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}if (camDrop()) {currentOne.moveDrop();} else {landToWall();destroyLine();if (isGameOver()) {game_state = OVER;} else {//游戏没有结束currentOne = nextOne;nextOne = Tetromino.randomOne();}}}repaint();}}//创建顺时针旋转public void rotateRightActive() {currentOne.rotateRight();if (outOFBounds() || coincide()) {currentOne.rotateLeft();}}//瞬间下落public void hadnDropActive() {while (true) {//判断能否下落if (camDrop()) {currentOne.moveDrop();} else {break;}}//嵌入到墙中landToWall();destroyLine();if (isGameOver()) {game_state = OVER;} else {//游戏没有结束currentOne = nextOne;nextOne = Tetromino.randomOne();}}//按键一次,下落一格public void sortDropActive() {if (camDrop()) {//当前四方格下落一格currentOne.moveDrop();} else {landToWall();destroyLine();if (isGameOver()) {game_state = OVER;} else {//游戏没有结束currentOne = nextOne;nextOne = Tetromino.randomOne();}}}//单元格嵌入墙中private void landToWall() {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();wall[row][col] = cell;}}//判断四方格能否下落public boolean camDrop() {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();//判断是否到达底部if (row == wall.length - 1) {return false;} else if (wall[row + 1][col] != null) {return false;}}return true;}//消除行public void destroyLine() {int line = 0;Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();if (isFullLine(row)) {line++;for (int i = row; i > 0; i--) {System.arraycopy(wall[i - 1], 0, wall[i], 0, wall[0].length);}wall[0] = new Cell[9];}}//分数池获取分数,累加到总分totalScore += scores_pool[line];//总行数totalLine += line;}//判断当前行是否已经满了public boolean isFullLine(int row) {Cell[] cells = wall[row];for (Cell cell : cells) {if (cell == null) {return false;}}return true;}//判断游戏是否结束public boolean isGameOver() {Cell[] cells = nextOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();if (wall[row][col] != null) {return true;}}return false;}private void paintState(Graphics g) {if (game_state == PLING) {g.drawString(show_state[PLING], 500, 660);} else if (game_state == STOP) {g.drawString(show_state[STOP], 500, 660);} else {g.drawString(show_state[OVER], 500, 660);g.setColor(Color.RED);g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 60));g.drawString("GAME OVER!", 30, 400);}}private void paintSource(Graphics g) {g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 30));g.drawString("分数: " + totalScore, 500, 250);g.drawString("行数: " + totalLine, 500, 430);}private void paintNextOne(Graphics g) {Cell[] cells = nextOne.cells;for (Cell cell : cells) {int x = cell.getCol() * CELL_SIZE + 370;int y = cell.getRow() * CELL_SIZE + 25;g.drawImage(cell.getImage(), x, y, null);}}private void paintCurrentOne(Graphics g) {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int x = cell.getCol() * CELL_SIZE;int y = cell.getRow() * CELL_SIZE;g.drawImage(cell.getImage(), x, y, null);}}private void paintWall(Graphics g) {for (int i = 0; i < wall.length; i++) {for (int j = 0; j < wall[i].length; j++) {int x = j * CELL_SIZE;int y = i * CELL_SIZE;Cell cell = wall[i][j];//判断是否有小方块if (cell == null) {g.drawRect(x, y, CELL_SIZE, CELL_SIZE);} else {g.drawImage(cell.getImage(), x, y, null);}}}}//判断是否出界public boolean outOFBounds() {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int col = cell.getCol();int row = cell.getRow();if (row < 0 || row > wall.length - 1 || col < 0 || col > wall[0].length-1) {return true;}}return false;}//按键一次,左移一次public void moveleftActive() {currentOne.moveLeft();//判断是否越界或重合if (outOFBounds() || coincide()) {currentOne.moveRight();}}//按键一次,右移一次public void moveRightActive() {currentOne.moveRight();//判断是否越界或重合if (outOFBounds() || coincide()) {currentOne.moveLeft();}}//判断是否重合public boolean coincide() {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();if (wall[row][col] != null) {return true;}}return false;}public static void main(String[] args) {JFrame jFrame = new JFrame("俄罗斯方块");//创建游戏界面Tetris panel = new Tetris();jFrame.add(panel);//设置可见jFrame.setVisible(true);//设置窗口大小jFrame.setSize(810, 940);//设置剧中jFrame.setLocationRelativeTo(null);//设置窗口关闭时停止jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//游戏主要开始逻辑panel.start();}
}

效果展示

游戏开始,方快下落,右边区域展示即将下落的方块图、分数、消除的行数以及游戏切换的状态。

按下空格键,方块瞬间下落, 按下P键游戏暂停,消除一行分数为1(此处由分数池进行控制)

按下C键游戏继续 

相关文章:

用Java写一个俄罗斯方块

目录 游戏规则 小方块类&#xff1a;Cell 七种图形类&#xff1a;I、J、L、O、S、T、Z J L O S T Z 俄罗斯方块游戏主类&#xff1a;Tetris 效果展示 游戏规则 由小方块组成的不同形状的板块陆续从屏幕上方落下来&#xff0c;玩家通过调整板块的位置和方向&#xff0c;使它…...

应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案

传统金融营业厅存在运营管理模式落后、资源投放不平衡、从业人员培训效果不达预期、客户体验割裂等普遍现象&#xff1b; 部署英码数字金融解决方案&#xff0c;将助力企业从传统金融模式快速向数字金融模式转变&#xff0c;可针对每一个客户定制个性化“一对一”服务&#xff…...

目标检测——Faster R-CNN算法解读

论文&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者&#xff1a;Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接&#xff1a;https://arxiv.org/abs/1506.01497 代码&#xff1a;https://github.com/rbgirsh…...

Wireshark (一)安装入门 —— 软件介绍

文章目录 Wireshark是什么&#xff1f;为什么要使用Wireshark&#xff1f;相关网络分析工具软件对比 Wireshark是什么&#xff1f; Wireshark是一种开源网络协议分析器&#xff0c;它可以捕获和分析网络中传输的数据包。 用户可以使用Wireshark来诊断网络问题、了解网络协议的…...

Web框架与Django路由层

Web框架 一 web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&…...

什么是CAS, 什么是AQS

文章目录 什么是CAS, 什么是AQSCASAQS 什么是CAS, 什么是AQS CAS AQS AQS 全称是AbstractQueuedSynchronizer&#xff0c; 是juc 下一个核心的抽象类&#xff0c;用于构建各种同步器和锁 比如我们熟悉的 ReentrantLock、ReadWriteLock、CountDownLatch等等是基于AQS. 首先在…...

蓝桥杯每日一题2023.12.1

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目而言思路较为重要&#xff0c;实际可以转化为求两个数字对应的操作&#xff0c;输出最前面的数字即可 #include<bits/stdc.h> using namespace std; int main() {for(int i 1…...

正则表达式从放弃到入门(1):“正则表达式”是什么?

正则表达式从放弃到入门&#xff08;1&#xff09;&#xff1a;“正则表达式”是什么&#xff1f; 本博文转载自 这是一篇”正则表达式”扫盲贴&#xff0c;如果你还不理解什么是正则表达式&#xff0c;看这篇文章就对了。 如果你已经掌握了”正则表达式”&#xff0c;就不用再…...

SQL解惑 - 谜题2

文章目录 一、谜题描述二、分析三、答案四、总结 一、谜题描述 创建一个记录雇员缺勤率的数据库。使用的表结构如下&#xff1a;Absenteeism 主键&#xff1a;PRIMARY KEY (emp_id, absent_date) 字段名字段类型字段中文名字段描述emp_idINTERGER雇员id-absent_dateSTRING缺勤…...

FWT+高维前缀和:Gym - 103202M

https://vj.imken.moe/contest/597216#problem/F 考虑两个人的集合分别为 i , j i,j i,j&#xff0c;那么我们令 f ( i ⊗ j ) f(i\otimes j) f(i⊗j)&#xff0c;其中 f ( s ) f(s) f(s) 表示两个人不同集合恰好为 s s s&#xff0c;显然 f ( s ) f(s) f(s) 可以FWT求…...

【C++】string类的接口综合运用

目录​​​​​​​ 介绍&#xff1a; 一&#xff0c;string对象的构建 二&#xff0c;string类对象的容量操作 介绍&#xff1a; string容器我们之前已经粗略了解了基本增添、修改、删除、插入等基本功能&#xff0c;这里就不再做过多说明&#xff0c;接下来我们全面并详细…...

分布式ID生成框架Leaf升级踩坑

背景&#xff1a; 在项目中需要一个统一的拿单号等唯一ID的服务&#xff0c;就想起了之前用到的leaf&#xff0c;但是因为项目要求&#xff0c;leaf的版本不符合&#xff0c;需要做一些升级 项目地址&#xff1a;https://github.com/Meituan-Dianping/Leaf 升级点&#xff1…...

常用的设计模式

文章目录 常用的设计模式&#xff1a;一、单例模式3、懒汉式 - 懒汉式非线程安全4、饿汉式 - 线程安全5、懒汉式和饿汉式区别6、双重检查锁定7、应用场景 二、工厂模式1、简单工厂模式2、工厂模式3、抽象工厂4、总结 三、代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cgl…...

git的相关实用命令

参看文章&#xff1a;https://blog.csdn.net/qq_21688871/article/details/130158888 http://www.mobiletrain.org/about/BBS/159885.html 1、git commit后&#xff0c;但发现文件有误&#xff0c;不想push(提交到本地库&#xff0c;回退到暂存区&#xff09; git reset --sof…...

【使用`model.status`来获取gurobi求解过程中的模型状态】

在Gurobi中&#xff0c;你可以使用model.status来获取求解过程中的模型状态。可以使用了model.status来检查模型是否找到最优解。模型状态是一个Gurobi的常量&#xff0c;表示了求解过程中的不同状态。 以下是一些常见的模型状态&#xff1a; GRB.OPTIMAL: 最优解被找到。GRB…...

【UGUI】Unity教程:实现物品的拖拽功能

大家好&#xff0c;今天&#xff0c;我们将一起学习如何在Unity中实现物品的拖拽功能。这是一个非常实用的技能&#xff0c;无论你是在制作RPG游戏的背包系统&#xff0c;还是在制作策略游戏的建筑放置功能&#xff0c;都会用到这个技能。那么&#xff0c;让我们开始吧&#xf…...

【奇淫技巧】两数交换

【奇淫技巧】两数交换 临时变量法&#xff1a;借助中间变量加减法&#xff1a;不使用中间变量异或法&#xff1a;不使用中间变量语法糖&#xff1a;某些编程语言支持交换语法糖借助函数&#xff0c;不交换 前提&#xff1a;待交换的两个元素&#xff0c;分别用a,b表示&#xf…...

Java核心知识点整理大全26-笔记

目录 27. Storm 7.1.1. 概念 27.1.1. 集群架构 27.1.1.1. Nimbus&#xff08;master-代码分发给 Supervisor&#xff09; 27.1.1.2. Supervisor&#xff08;slave-管理 Worker 进程的启动和终止&#xff09; 27.1.1.3. Worker&#xff08;具体处理组件逻辑的进程&#xff…...

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日&#xff0c;X&#xff08;原Twitter&#xff09;工程技术发布帖子称&#xff0c;在过去的一年里&#xff0c;技术团队优化了 X 的云服务使用方式&#xff0c;着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…...

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…...

告别手动撮合!这款插件让量化回测全程智能省心

当你的策略信号发出买入指令&#xff0c;资金是否足够&#xff1f;保证金怎么算&#xff1f;扣完手续费和印花税&#xff0c;账户还剩多少&#xff1f; 这些“交易后处理”逻辑&#xff0c;听起来不难&#xff0c;亲手写过就知道有多绕。不同券商的计费规则各异&#xff0c;昨仓…...

使用电脑快速测试 CANopen 设备通讯

Anybus CANopen主站仿真工具介绍日常对客户进行技术支持的时候&#xff0c;我们发现工厂自动化领域的不同部门不同职能的人员对于工业通讯设备都面临着一些使用的困难&#xff0c;例如设备研发人员&#xff0c;尤其是嵌入式研发部门&#xff0c;对于工厂自动化使用的工业通讯协…...

2026毕业季硕士论文AIGC检测率合格标准全汇总(20%还是15%)

2026年硕士论文答辩前&#xff0c;AIGC检测已经和查重一样成了必过流程。但各校对硕士论文AIGC检测率的合格标准并不统一——有的学校要求20%以下&#xff0c;有的15%以下&#xff0c;个别学校甚至要求10%以下。 你的学校硕士论文AIGC检测率多少算合格&#xff1f;超标了怎么快…...

Windows 11系统优化终极指南:用Win11Debloat一键清理系统垃圾,提升电脑性能

Windows 11系统优化终极指南&#xff1a;用Win11Debloat一键清理系统垃圾&#xff0c;提升电脑性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various ot…...

Miniconda虚拟环境配置踩坑实录:从‘CondaHTTPError’到完美隔离环境

Miniconda虚拟环境配置踩坑实录&#xff1a;从‘CondaHTTPError’到完美隔离环境 第一次在终端输入conda create -n myenv python3.8时&#xff0c;满心期待能快速搭建起一个干净的Python工作环境。然而几秒钟后&#xff0c;屏幕上突然跳出的红色报错信息让整个流程戛然而止&a…...

SeekStorm PDF文档搜索指南:从文件解析到全文索引的完整流程

SeekStorm PDF文档搜索指南&#xff1a;从文件解析到全文索引的完整流程 【免费下载链接】SeekStorm SeekStorm: vector & lexical search - in-process library & multi-tenancy server, in Rust. 项目地址: https://gitcode.com/gh_mirrors/se/SeekStorm Seek…...

CANN/asc-devkit bfloat16精度转换函数

__float22bfloat162_rd 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://…...

蓝牙、Wi-Fi、5G、NB-IoT四大无线技术核心差异与选型指南

1. 无线通信技术全景概览&#xff1a;从身边到万物每天一睁眼&#xff0c;我们就被各种看不见的“波”包围着。手机自动连上家里的Wi-Fi&#xff0c;耳机里传来蓝牙音箱的音乐&#xff0c;出门后手机信号满格&#xff0c;甚至街边的智能路灯、家里的智能电表&#xff0c;都在悄…...

Windows进程注入技术深度解析:从DLL注入到反射式加载

1. 项目概述与核心价值在Windows安全研究、恶意软件分析乃至一些高级的软件开发场景中&#xff0c;“进程注入”是一个绕不开的核心技术点。简单来说&#xff0c;它指的是将一个代码模块&#xff08;通常是DLL&#xff09;或一段代码&#xff08;Shellcode&#xff09;加载到另…...

基于STM32的智能空调控制器设计:从环境感知到PID控制

1. 项目概述&#xff1a;从传统遥控到智能感知的跨越几年前&#xff0c;我还在为一个老旧的壁挂式空调发愁。每次回家&#xff0c;都得在闷热的房间里摸索遥控器&#xff0c;或者忍受着固定风向的直吹。后来接触了智能家居&#xff0c;发现市面上的智能空调要么价格昂贵&#x…...