Python - 游戏:飞机大战;数字华容道

Pygame是一个利用SDL库的写的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的 SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库

具体教程可参考官网:https://www.pygame.org/docs/

1、pygame安装

安装命令:pip install pygame  

提示:如果有多个版本,同时装有python 2.7 和 python3.6时

可以使用 pip3 install pygame

查看已安装的第三方库:pip list 或 pip3 list

(1)本地安装

(2) PyCharm安装

FAQ:PyCharm中安装遇到版本兼容问题: 

在安装pygame模块的时候尤其要注意一下:

如果在pychram中安装不成功  如下错误:
   EOFError: EOF when reading a line
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Administrator\AppData\Local\Temp\pip-install-392v1at0\pygame\

此时我们就可以换种思路:

1:确保在系统层面的python环境里面 已经安装了pygame[pip install pygame] 一般都可以安装成功
2: 我们就可以把 已经安装好的 pygame 模块的 文件夹拷贝到 pycharm 所创建项目中的venv虚拟环境里面【D:\SoftTools\Python313\Lib\site-packages】

soure path:C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Lib\site-packages
dst path: 你的项目路径/venv\Lib\site-packages

1、查找本地安装路径

pip show pygame 命令查看安装路径;本地和PyCharm上都可以操作

2、将本地下载的库直接copy到PyCharm项目中.venv下的Lib文件夹下

一、飞机大战

步骤:

1、创建一个窗口
2、创建一个我方飞机 根据方向键左右的移动
3、给我方飞机添加发射子弹的功能【按下空格键去发送】
4、创建一个敌人飞机
5、敌人飞机可以自由的移动
6、敌人飞机可以自动的发射子弹

1、控制玩具飞机-面向过程

实现控制飞机的步骤如下:

1、载入一张飞机图片并初始飞机图片位置(即设置图片的X、Y坐标)

2、当按键盘的左右键或A、D键时修改X、Y坐标值

3、根据新的坐标值,更新飞机图片的位置

import  pygame #引用第三方的模块
import random #随机产生数据的对象
import time
from pygame.locals import *
'''
1: 实现飞机的显示  并且可以控制飞机的移动【面向对象】
'''
class HeroPlane(object):def __init__(self,screen):'''初始化函数:param screen: 主窗体对象'''# 飞机的默认位置self.x=150self.y=450# 设置要显示内容的窗口self.screen=screen# 生成飞机的图片对象self.imageName='./feiji/hero.png'self.image=pygame.image.load(self.imageName)# 用来存放子弹的列表self.bulletList=[]passdef moveleft(self):'''左移动:return:'''if self.x>0:self.x-=10passdef moveright(self):'''右移动:return:'''if self.x<350-40:self.x+=10passdef display(self):'''在主窗口中显示飞机:return:'''self.screen.blit(self.image,(self.x,self.y))# 完善子弹的展示逻辑needDelItemList=[]for item in self.bulletList:if item.judge():needDelItemList.append(item)passpass# 重新遍历一下for i in needDelItemList:self.bulletList.remove(i)passfor bullet in self.bulletList:bullet.display() # 显示子弹的位置bullet.move()#让这个子弹进行移动 下次再显示的时候就会看到子弹在修改后的位置pass# 发射子弹def sheBullet(self):# 创建一个新的子弹对象newBullet=Bullet(self.x,self.y,self.screen)self.bulletList.append(newBullet)passpass'''创建子弹类
'''
class Bullet(object):def __init__(self,x,y,screen):''':param x::param y::param screen:'''self.x=x+13self.y=y-20self.screen=screenself.imgage=pygame.image.load('./feiji/bullet.png')passdef display(self):self.screen.blit(self.imgage,(self.x,self.y))passdef move(self):self.y-=2passdef judge(self):'''判断子弹是否越界:return:'''if self.y<0:return Trueelse:return Falsepasspass# 创建敌机类
class EnemyPlane:def __init__(self,screen):# 默认设置一个方向self.direction='right'# 飞机的默认位置self.x = 0self.y = 0# 设置要显示内容的窗口self.screen = screenself.bulletList=[]# 生成飞机的图片对象self.imageName = './feiji/enemy0.png'self.image = pygame.image.load(self.imageName)passdef display(self):'''显示敌机以及位置子弹的信息:return:'''self.screen.blit(self.image,(self.x,self.y))# 完善子弹的展示逻辑needDelItemList = []for item in self.bulletList:if item.judge():needDelItemList.append(item)passpass# 重新遍历一下for i in needDelItemList:self.bulletList.remove(i)passfor bullet in self.bulletList:bullet.display()  # 显示子弹的位置bullet.move()  # 让这个子弹进行移动 下次再显示的时候就会看到子弹在修改后的位置passpassdef sheBullet(self):'''敌机随机的发射子弹:return:'''num=random.randint(1,50)if num==3:newBullet=EnemyBullet(self.x,self.y,self.screen)self.bulletList.append(newBullet)passdef move(self):'''敌机移动 随机进行的:return:'''if self.direction=='right':self.x+=2passelif self.direction=='left':self.x-=2passif self.x>350-20:self.direction='left'passelif self.x<0:self.direction='right'passpass#敌机的子弹类
class EnemyBullet(object):def __init__(self,x,y,screen):''':param x::param y::param screen:'''self.x=xself.y=y+10self.screen=screenself.imgage=pygame.image.load('./feiji/bullet1.png')passdef display(self):self.screen.blit(self.imgage,(self.x,self.y))passdef move(self):self.y+=2passdef judge(self):'''判断子弹是否越界:return:'''if self.y>500:return Trueelse:return Falsepasspassdef key_control(HeroObj):'''定义普通的函数  用来实现键盘的检测:param HeroObj: 可控制检测的对象:return:'''eventList = pygame.event.get()for event in eventList:if event.type == QUIT:print('退出')exit()passelif event.type == KEYDOWN:if event.type == K_a or event.key == K_LEFT:print('left')HeroObj.moveleft() #调用函数实现左移动passelif event.type == K_d or event.key == K_RIGHT:print('right')HeroObj.moveright() #调用函数实现右移动passelif event.key == K_SPACE:print('按下了空格键 space 发射子弹')HeroObj.sheBullet()passdef main():#首先创建一个窗口 用来显示内容screen=pygame.display.set_mode((350,500),depth=32)# 创建一个背景图片对象background=pygame.image.load('./feiji/background.png')# 设置一个titlepygame.display.set_caption('飞机大战')# 添加背景音乐pygame.mixer.init()pygame.mixer.music.load('./feiji/background.mp3')pygame.mixer.music.set_volume(0.2)pygame.mixer.music.play(-1) #循环次数  -1表示无限循环# 创建一个飞机对象了hero=HeroPlane(screen)# 创建一个敌人飞机的对象enemyplane=EnemyPlane(screen)# 设定要显示的内容while True:screen.blit(background,(0,0))# 显示玩家飞机的图片hero.display()enemyplane.display() #显示敌机enemyplane.move() #敌机移动enemyplane.sheBullet()#敌机随机发送子弹# 获取键盘事件key_control(hero)# 更新显示内容pygame.display.update()# time.sleep(1) #休眠一秒钟pygame.time.Clock().tick(15)passif __name__=='__main__':main()

2、控制玩具飞机-面向对象 

实现步骤原理跟面向过程是一样的,不同的时,代码的组织方式不一样:

1、创建一个飞机类,实现左移、右移、显示三个功能

2、创建一个键盘控制函数,实现键盘的左、右、空格键的功能

3、创建主函数,实现创建窗口、背景图片、背景音乐、并实现所有的逻辑

3、玩家飞机发射子弹

1、每次按回车就会有一颗子弹射出,起始位置就是从飞机的停靠位置

2、子弹超出窗口就消失,并且删除掉子弹(否则子弹越来越多,界面会越来越卡)

3、每一颗子弹就代表着一张图片

4、子弹会从发射开始,慢慢的往上移动,直到消失

优化版:

import  pygame #引用第三方的模块
import random #随机产生数据的对象
import time
from pygame.locals import *
'''
1: 实现飞机的显示  并且可以控制飞机的移动【面向对象】
'''
#抽象出来一个飞机的基类
class BasePlane(object):def __init__(self,screen,imagePath):'''初始化基类函数:param screen: z主窗体对象:param imageName:加载的图片'''self.screen=screenself.image=pygame.image.load(imagePath)self.bulletList=[] #存储所有的子弹passdef  display(self):self.screen.blit(self.image, (self.x, self.y))# 完善子弹的展示逻辑needDelItemList = []for item in self.bulletList:if item.judge():needDelItemList.append(item)passpass# 重新遍历一下for i in needDelItemList:self.bulletList.remove(i)passfor bullet in self.bulletList:bullet.display()  # 显示子弹的位置bullet.move()  # 让这个子弹进行移动 下次再显示的时候就会看到子弹在修改后的位置passpassclass CommonBullet(object):'''公共的子弹类'''def  __init__(self,x,y,screen,bulletType):self.type=bulletTypeself.screen=screenif self.type=='hero':self.x=x+13self.y=y-20self.imagePath='./feiji/bullet.png'elif self.type == 'enemy':self.x = xself.y =y+10self.imagePath = './feiji/bullet1.png'passself.image=pygame.image.load(self.imagePath)passdef move(self):'''子弹的移动:return:'''if self.type=='hero':self.y-=2elif self.type=='enemy':self.y+=2passdef display(self):self.screen.blit(self.image,(self.x,self.y))passdef judge(self):'''判断子弹是否越界:return:'''if self.y>500 or self.y<0:return Trueelse:return Falsepasspassclass HeroPlane(BasePlane):def __init__(self,screen):'''初始化函数:param screen: 主窗体对象'''super().__init__(screen,'./feiji/hero.png') #调用父类的构造方法# 飞机的默认位置self.x=150self.y=450passdef moveleft(self):'''左移动:return:'''if self.x>0:self.x-=10passdef moveright(self):'''右移动:return:'''if self.x<350-40:self.x+=10pass# 发射子弹def sheBullet(self):# 创建一个新的子弹对象newBullet=CommonBullet(self.x,self.y,self.screen,'hero')self.bulletList.append(newBullet)passpass# 创建敌机类
class EnemyPlane(BasePlane):def __init__(self,screen):super().__init__(screen,'./feiji/enemy0.png')# 默认设置一个方向self.direction='right'# 飞机的默认位置self.x = 0self.y = 0passdef sheBullet(self):'''敌机随机的发射子弹:return:'''num=random.randint(1,50)if num==3:newBullet=CommonBullet(self.x,self.y,self.screen,'enemy')self.bulletList.append(newBullet)passdef move(self):'''敌机移动 随机进行的:return:'''if self.direction=='right':self.x+=2passelif self.direction=='left':self.x-=2passif self.x>350-20:self.direction='left'passelif self.x<0:self.direction='right'passpassdef key_control(HeroObj):'''定义普通的函数  用来实现键盘的检测:param HeroObj: 可控制检测的对象:return:'''eventList = pygame.event.get()for event in eventList:if event.type == QUIT:print('退出')exit()passelif event.type == KEYDOWN:if event.type == K_a or event.key == K_LEFT:print('left')HeroObj.moveleft() #调用函数实现左移动passelif event.type == K_d or event.key == K_RIGHT:print('right')HeroObj.moveright() #调用函数实现右移动passelif event.key == K_SPACE:print('按下了空格键 space 发射子弹')HeroObj.sheBullet()passdef main():#首先创建一个窗口 用来显示内容screen=pygame.display.set_mode((350,500),depth=32)# 创建一个背景图片对象background=pygame.image.load('./feiji/background.png')# 设置一个titlepygame.display.set_caption('飞机大战')# 添加背景音乐pygame.mixer.init()pygame.mixer.music.load('./feiji/background.mp3')pygame.mixer.music.set_volume(0.2)pygame.mixer.music.play(-1) #循环次数  -1表示无限循环# 创建一个飞机对象了hero=HeroPlane(screen)# 创建一个敌人飞机的对象enemyplane=EnemyPlane(screen)# 设定要显示的内容while True:screen.blit(background,(0,0))# 显示玩家飞机的图片hero.display()enemyplane.display() #显示敌机enemyplane.move() #敌机移动enemyplane.sheBullet()#敌机随机发送子弹# 获取键盘事件key_control(hero)# 更新显示内容pygame.display.update()# time.sleep(1) #休眠一秒钟pygame.time.Clock().tick(15)passif __name__=='__main__':main()

运行结果:

二、数字华容道

以 Python 语言为例,如果我们想用通义灵码开发“数字华容道”这个小游戏,你可以对它说:

帮我用pygame创建一个数字华容道小游戏,控制面板上显示正方形棋盘格。

每局游戏开始通过“游戏开始”的按钮显示,当用户点击该按钮时,游戏才会开始。

每局游戏限时3分钟,面板上显示倒计时,时间到未通过显示“游戏失败”提示。

数字移动通过键盘控制,使用上下左右箭头键分别控制数字向上、向下、向左、向右移动。

代码如下:

import pygame
import random
import time'''
首先确保你已经安装了 pygame 库。如果没有安装,可以使用以下命令进行安装:
pip install pygame
''''''
代码说明
初始化:初始化 pygame 并设置窗口大小。
颜色和字体:定义了一些常用的颜色和字体。
棋盘生成:生成一个随机的初始棋盘。
查找空白位置:找到棋盘上的空白位置。
移动数字:根据键盘输入移动数字。
检查胜利条件:检查当前棋盘是否符合胜利条件。
绘制棋盘:绘制棋盘和数字。
绘制按钮:绘制“游戏开始”按钮。
开始游戏:设置游戏开始状态并生成新的棋盘。
主循环:处理事件、更新游戏状态和绘制界面。
'''# 初始化pygame
pygame.init()# 设置窗口大小
WIDTH, HEIGHT = 400, 500
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("数字华容道")# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)# 字体设置
font = pygame.font.SysFont(None, 48)# 棋盘大小
BOARD_SIZE = 4
TILE_SIZE = WIDTH // BOARD_SIZE# 游戏状态
GAME_STARTED = False
GAME_OVER = False
TIME_LIMIT = 180  # 3分钟# 生成初始棋盘
def generate_board():board = list(range(1, BOARD_SIZE * BOARD_SIZE)) + [0]random.shuffle(board)return [board[i:i+BOARD_SIZE] for i in range(0, len(board), BOARD_SIZE)]# 查找空白位置
def find_blank(board):for i in range(BOARD_SIZE):for j in range(BOARD_SIZE):if board[i][j] == 0:return i, j# 移动数字
def move(board, direction):x, y = find_blank(board)if direction == 'UP' and x > 0:board[x][y], board[x-1][y] = board[x-1][y], board[x][y]elif direction == 'DOWN' and x < BOARD_SIZE - 1:board[x][y], board[x+1][y] = board[x+1][y], board[x][y]elif direction == 'LEFT' and y > 0:board[x][y], board[x][y-1] = board[x][y-1], board[x][y]elif direction == 'RIGHT' and y < BOARD_SIZE - 1:board[x][y], board[x][y+1] = board[x][y+1], board[x][y]# 检查游戏是否胜利
def is_win(board):flat_board = [num for row in board for num in row]return flat_board[:-1] == list(range(1, BOARD_SIZE * BOARD_SIZE))# 绘制棋盘
def draw_board(board):screen.fill(WHITE)for i in range(BOARD_SIZE):for j in range(BOARD_SIZE):if board[i][j] != 0:pygame.draw.rect(screen, BLUE, (j * TILE_SIZE, i * TILE_SIZE, TILE_SIZE, TILE_SIZE))text = font.render(str(board[i][j]), True, WHITE)screen.blit(text, (j * TILE_SIZE + TILE_SIZE // 2 - text.get_width() // 2, i * TILE_SIZE + TILE_SIZE // 2 - text.get_height() // 2))else:pygame.draw.rect(screen, BLACK, (j * TILE_SIZE, i * TILE_SIZE, TILE_SIZE, TILE_SIZE))# 绘制按钮
def draw_button(text, x, y, w, h, color, hover_color, action=None):mouse = pygame.mouse.get_pos()click = pygame.mouse.get_pressed()if x + w > mouse[0] > x and y + h > mouse[1] > y:pygame.draw.rect(screen, hover_color, (x, y, w, h))if click[0] == 1 and action is not None:action()else:pygame.draw.rect(screen, color, (x, y, w, h))text_surf = font.render(text, True, WHITE)screen.blit(text_surf, (x + w // 2 - text_surf.get_width() // 2, y + h // 2 - text_surf.get_height() // 2))# 开始游戏
def start_game():global GAME_STARTED, GAME_OVER, start_time, boardGAME_STARTED = TrueGAME_OVER = Falsestart_time = time.time()board = generate_board()# 主循环
def main():global GAME_STARTED, GAME_OVER, start_time, boardclock = pygame.time.Clock()start_time = 0board = []while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()returnelif event.type == pygame.KEYDOWN and GAME_STARTED and not GAME_OVER:if event.key == pygame.K_UP:move(board, 'UP')elif event.key == pygame.K_DOWN:move(board, 'DOWN')elif event.key == pygame.K_LEFT:move(board, 'LEFT')elif event.key == pygame.K_RIGHT:move(board, 'RIGHT')if GAME_STARTED and not GAME_OVER:current_time = time.time()elapsed_time = int(current_time - start_time)remaining_time = max(TIME_LIMIT - elapsed_time, 0)if remaining_time <= 0:GAME_OVER = TrueGAME_STARTED = Falseif is_win(board):GAME_OVER = TrueGAME_STARTED = Falsescreen.fill(WHITE)if not GAME_STARTED:draw_button("游戏开始", WIDTH // 2 - 100, HEIGHT // 2 - 25, 200, 50, GREEN, RED, start_game)else:draw_board(board)time_text = font.render(f"剩余时间: {remaining_time}秒", True, BLACK)screen.blit(time_text, (10, HEIGHT - 50))if GAME_OVER:if is_win(board):game_over_text = font.render("恭喜你,游戏胜利!", True, GREEN)else:game_over_text = font.render("时间到,游戏失败!", True, RED)screen.blit(game_over_text, (WIDTH // 2 - game_over_text.get_width() // 2, HEIGHT // 2 - game_over_text.get_height() // 2))pygame.display.flip()clock.tick(60)if __name__ == "__main__":main()

运行结果如下: 

可参考:

就3步,用通义灵码写一个数字华容道小游戏

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

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

相关文章

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机&#xff1a;指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 &#xff0c;是物理机的软件实现。常用的虚拟机有VMWare&#xff0c;Visual Box&…

GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)

目录 Δ前言 一、Github教程 1.什么是Github&#xff1f; 2.仓库和对仓库的操作&#xff1a; 2.1 Repository&#xff08;仓库&#xff09; 2.2 Fork&#xff08;派生&#xff09; 2.3 Star&#xff08;收藏&#xff09; 2.4 Watch&#xff08;追番&#xff09; 2.5 Issue&am…

OpenLinkSaas使用手册-待办事项和通知中心

在OpenLinkSaas工作台上&#xff0c;你可以查看待办事项和未读通知。 待办事项 目前待办事项支持: 个人待办项目待办:在项目中指派给你的任务/缺陷Git待办:在Git仓库中指标给你的Issue,目前只有在AtomGit和Gitee账号登录时才支持。 通知中心 通知中心支持Git通知和邮件通知两种…

springboot集成阿里云短信服务

springboot集成阿里云短信服务 一.阿里云账号准备 流程:注册阿里云账号>短信服务>新增资质>新建签名>新建模版>申请秘钥>用代码测试 1.注册阿里云账号 2、登录成功后&#xff0c; ① 在首页搜索短信服务 ② 打开第一个搜索结果 ③ 免费开通 ④ 可以根据…

试题转excel;word转excel;大风车excel(1.1更新)

最近更新了大风车excel1.1版本 主要优化在算法层面&#xff1a; 1.0版本试题解析的成功率为95%&#xff0c;现在1.1版本已经优化到解析成功率为99% 一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道…

python实现自动登录12306抢票 -- selenium

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码&#xff0c;但是都不是最新的&#xff0c;我也是从网上找别人的帖子&#xff0c;看B站视频&…

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型 目录 机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型1 过拟合和欠拟合1.1 过拟合1.2 欠拟合 2 正则化惩罚2.1 概念2.2 函数2.3 正则化种类 3 K折交叉验证3.1 概念3.2 图片理解3.3 函数导入3.4 参数理解 4 训练模型K折交…

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

《Vue3实战教程》37:Vue3生产部署

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 生产部署​ 开发环境 vs. 生产环境​ 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而&#xff…

python制作打字小游戏

import pygame # 导入游戏模块 安装pygame import sys # 导入系统指令模块 import random # 导入随机数模块 pygame.init() #初始化游戏环境 wndpygame.display.set_mode((800,565)) #指定窗口大小 pygame.mixer.music.load(素材/SurvivalGame.mp3) #素…

抖音短视频矩阵系统源码开发全流程解析

在项目开发过程中&#xff0c;调整配置文件至关重要&#xff0c;这些文件包括数据库连接、API密钥及全局参数等。通过正确配置这些信息&#xff0c;可确保应用程序的稳定性和安全性。灵活调整配置以适应具体需求有助于短视频矩阵系统项目的顺利推进。 在开发环境中&#xff0c…

前端路由layout布局处理以及菜单交互(三)

上篇介绍了前端项目部署以及基本依赖的应用&#xff0c;这次主要对于路由以及布局进行模块化处理 一、 创建layout模块 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机硬件与操作系统之间的桥梁&#xff0c;它负责初始化和测试系统硬件组件&#xff0c;并加载启动操作系统。在某些情况下&#xff0c;如调整启动顺序、更改系统时间或日期、修改硬件配置等&#xff0c;您可能需要进入BIOS进…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举

本篇博客将聚焦于通过递归来实现两种经典的枚举方法&#xff1a;指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用&#xff0c;无论是在解题中&#xff0c;还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…

idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署

1&#xff0c;设置一 2&#xff0c;设置二 设置二&#xff08;旧版本&#xff09; CtrlShiftAlt/ 点击弹出框中Registry... 引入&#xff08;如果报错&#xff0c;换不同的版本&#xff09; <dependency><groupId>org.springframework.boot</groupId><a…

低代码开发:开启企业数智化转型“快捷键”

一、低代码开发浪潮来袭&#xff0c;企业转型正当时 在当今数字化飞速发展的时代&#xff0c;低代码开发已如汹涌浪潮&#xff0c;席卷全球。从国际市场来看&#xff0c;诸多企业巨头纷纷布局低代码领域&#xff0c;像微软的 PowerApps、OutSystems 等平台&#xff0c;凭借强大…

C#二维数组详解

目录 1&#xff0c;什么是二维数组&#xff1f; 2&#xff0c;创建二维数组的几种方式 &#xff08;1&#xff09;使用[,]声明数组&#xff08;常见方式&#xff09; &#xff08;2&#xff09;声明数组时指定元素 &#xff08;3&#xff09;使用new创建数组 &#xff08;…

STM32--超声波模块(HC—SR04)(标准库+HAL库)

一、HC-SR04工作原理 1&#xff09;采用IO触发测距&#xff0c;给至少10us的高电平信号。 2&#xff09;模块自动发送8个40KHz的方波&#xff0c;自动检测是否有信号返回。 3&#xff09;有信号返回&#xff0c;通过IO输出一高电平&#xff0c;高电平持续时间就是超声波从发…

DDD(一)—— Authentication with JWT

文章目录 项目地址一、项目结构梳理1.1 Domain层1.1.1 Entities文件夹1.2 Contracts层1.2.1 Authentication文件夹1.3 Appliaction层1.3.1Common文件夹1. Interfaces文件夹Authentication 权限接口Persistence 数据库接口Services 常用服务接口1.3.2 Services文件夹1. Authenti…

GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网

记录一些平时接触到的 GPU 知识。由于是笔记而非教程&#xff0c;因此内容不求连贯&#xff0c;有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进&#xff1a;1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…