外星人入侵

学习于Python编程从入门到实践(Eric Matthes 著)

整体目录:外星人入侵文件夹是打包后的不必在意

图片和音效都是网上下载的

音效下载网站:Free 游戏爆击中 Sound Effects Download - Pixabay

运行效果:可以上下左右移动,空格开火,空格或点击Play开始游戏,飞船碰到外星人或者外星人到达屏幕底部则失去一条命

下面是各个文件的内容

alien.py

import pygame
from pygame.sprite import Spriteclass Alien(Sprite):"""表示单个外星人的类"""def __init__(self, ai_settings, screen):"""初始化外星人并设置其起始位置"""super(Alien, self).__init__()self.screen = screenself.ai_settings = ai_settings# 加载外星人图像,并设置其rect属性# self.image = pygame.image.load('E:\\Project\\alien_invasion\\images\\alien.png')self.image = pygame.image.load('images/alien.png')self.image = pygame.transform.scale(self.image, (45, 45))self.rect = self.image.get_rect()# 每个外星人最初都在屏幕左上角附近self.rect.x = self.rect.widthself.rect.y = self.rect.height# 存储外星人的准确位置self.x = float(self.rect.x)def blitme(self):"""在指定位置绘制外星人"""self.screen.blit(self.image, self.rect)def check_edges(self):"""如果外星人位于屏幕边缘,就返回True"""screen_rect = self.screen.get_rect()if self.rect.right >= screen_rect.right:return Trueelif self.rect.left <= 0:return Truedef update(self):"""向左或向右移动外星人"""self.x += (self.ai_settings.alien_speed_factor *self.ai_settings.fleet_direction)self.rect.x = self.x

alien_invasion.py


import pygame
from pygame.sprite import Group
from settings import Settings
from game_stats import GameStats
from ship import Ship
import game_functions as gf
from button import Button
from scoreboard import Scoreboarddef run_game():# 初始化游戏并创建一个屏幕对象# 初始化pygame、设置和屏幕对象pygame.init()ai_settings = Settings()screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))# screen = pygame.display.set_mode((1200, 800))pygame.display.set_caption("Alien Invasion")# 创建一个用于存储游戏统计信息的实例,并创建记分牌stats = GameStats(ai_settings)sb = Scoreboard(ai_settings, screen, stats)# 创建一个飞船ship = Ship(ai_settings, screen)# 创建一个用于存储子弹的编组bullets = Group()# 创建一个外星人编组aliens = Group()# 创建外星人群gf.create_fleet(ai_settings, screen, ship, aliens)# 创建Play按钮play_button = Button(ai_settings, screen, "Play")# 开始游戏的主循环while True:gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets)if stats.game_active:ship.update()# 对每个bullet调用bullet.update()gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets)gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets)# 这个print用来检查是否真的删除子弹,保留此条代码会严重拖慢运行速度# print(len(bullets))gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)run_game()

bullet.py

import pygame
from pygame.sprite import Spriteclass Bullet(Sprite):"""一个对飞船发射的子弹进行管理的类"""def __init__(self, ai_settings, screen, ship):"""在飞船所处的位置创建一个子弹的对象"""super(Bullet, self).__init__() # Python2.7写法,也可写为下面这种# super().__init__()self.screen = screen# 在(0, 0)处创建一个表示子弹的矩形,再设置正确的位置self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)self.rect.centerx = ship.rect.centerxself.rect.top = ship.rect.top# 存储用小数表示的子弹位置self.y = float(ship.rect.y)self.color = ai_settings.bullet_colorself.speed_factor = ai_settings.bullet_speed_factordef update(self):"""向上移动子弹"""# 更新表示子弹位置的小数值self.y -= self.speed_factor# 更新表示子弹的rect的位置self.rect.y = self.ydef draw_bullet(self):"""在屏幕上绘制子弹"""pygame.draw.rect(self.screen, self.color, self.rect)

button.py

import pygame.fontclass Button():def __init__(self, ai_settings, screen, msg):"""初始化按钮属性"""self.screen = screenself.screen_rect = screen.get_rect()# 设置按钮的尺寸和其他属性self.width, self.height = 200, 50self.button_color = (0, 255, 0)self.text_color = (255, 255, 255)self.font = pygame.font.SysFont(None, 48)# 创建按钮的rect属性,并使其居中self.rect = pygame.Rect(0, 0, self.width, self.height)self.rect.center = self.screen_rect.center# 按钮的标签只需要创建一次self.prep_msg(msg)def prep_msg(self, msg):"""将msg渲染为图像,并使其在按钮上居中"""self.msg_image = self.font.render(msg, True, self.text_color,self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):# 绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color, self.rect)self.screen.blit(self.msg_image, self.msg_image_rect)

game_function.py

import sys
import pygame
# 设置 mixer 支持 MP3 格式
pygame.mixer.pre_init(44100, -16, 2, 2048)  # 44100是采样率,-16是采样位数,2是声道数,2048是缓冲区大小
pygame.init()
pygame.mixer.init()from bullet import Bullet
from alien import Alien
from time import sleep# 加载音效
# fire_sound = pygame.mixer.Sound('E:\Project\\alien_invasion\\sounds\\fire.mp3')
fire_sound = pygame.mixer.Sound('sounds/fire.mp3')
# hit_sound = pygame.mixer.Sound('E:\Project\\alien_invasion\\sounds\\hit.mp3')
hit_sound = pygame.mixer.Sound('sounds/hit.mp3')
hit_sound.set_volume(0.2)def check_keydown_events(event, ai_settings, screen, stats, sb, ship, aliens, bullets):"""响应按键"""if event.key == pygame.K_RIGHT:# 向右移动飞船ship.moving_right = Trueelif event.key == pygame.K_LEFT:# 向左移动飞船ship.moving_left = Trueelif event.key == pygame.K_UP:# 向上移动飞船ship.moving_up = Trueelif event.key == pygame.K_DOWN:# 向下移动飞船ship.moving_down = Trueelif event.key == pygame.K_SPACE:# 创建一颗子弹,并将其加入到编组bullets中if stats.game_active:fire_bullet(ai_settings, screen, ship, bullets)else:start_game(ai_settings, screen, stats, sb, ship, aliens, bullets)elif event.key == pygame.K_ESCAPE:sys.exit()def fire_bullet(ai_settings, screen, ship, bullets):"""如果还没有到达限制就发射一颗子弹"""if len(bullets) < ai_settings.bullets_allowed:new_bullet = Bullet(ai_settings, screen, ship)fire_sound.play()bullets.add(new_bullet)def check_keyup_events(event, ship):"""松开按键"""if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falseelif event.key == pygame.K_UP:ship.moving_up = Falseelif event.key == pygame.K_DOWN:ship.moving_down = Falsedef check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:check_keydown_events(event, ai_settings, screen, stats, sb, ship, aliens, bullets)elif event.type == pygame.KEYUP:check_keyup_events(event, ship)elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y = pygame.mouse.get_pos()check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y)def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets,mouse_x, mouse_y):"""再玩家单机Play按钮时开始游戏"""button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)if button_clicked and not stats.game_active:# 重制游戏设置ai_settings.initialize_dynamic_settings()start_game(ai_settings, screen, stats, sb, ship, aliens, bullets)def start_game(ai_settings, screen, stats, sb, ship, aliens, bullets):# 隐藏光标pygame.mouse.set_visible(False)# 重置游戏统计信息stats.reset_stats()stats.game_active = True# 重置记分牌图像sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并让飞船居中create_fleet(ai_settings, screen, ship, aliens)ship.center_ship()def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button):"""更新屏幕上的图像,并切换到新屏幕"""# 每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)# 在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)# 显示得分sb.show_score()# 如果游戏处于非活跃状态,就绘制Play按钮if not stats.game_active:play_button.draw_button()# 让最近绘制的屏幕可见pygame.display.flip()def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):"""更新子弹的位置,并删除已消失的子弹"""# 更新子弹位置bullets.update()# 删除已经消失的子弹for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)check_bullet_alien_collision(ai_settings, screen, stats, sb, ship, aliens, bullets)def check_bullet_alien_collision(ai_settings, screen, stats, sb, ship, aliens, bullets):"""响应子弹和外星人的碰撞"""# 删除发生碰撞子弹和外星人# 若第一个True变为False可以让子弹直到顶部才消失并删除所有击中的外星人反之只击中一个子弹也消失collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if collisions:for aliens in collisions.values():stats.score += ai_settings.alien_points * len(aliens)sb.prep_score()# 播放音效hit_sound.play()check_high_score(stats, sb)# 检查外星人存在情况if len(aliens) == 0:# 删除现有的子弹,加快节奏,并重新创建一群外星人bullets.empty()ai_settings.increase_speed()# 提高等级stats.level += 1sb.prep_level()create_fleet(ai_settings, screen, ship, aliens)def get_number_alien_x(ai_settings, alien_width):"""计算一行可以有多少个外星人"""available_space_x = ai_settings.screen_width - 2 * alien_widthnumber_aliens_x = int(available_space_x / (2 * alien_width))return number_aliens_xdef get_number_rows(ai_settings, ship_height, alien_height):"""计算屏幕可以有多少行外星人"""available_space_y = (ai_settings.screen_height -(3 * alien_height) - ship_height)number_rows = int(available_space_y / (3 * alien_height))return number_rowsdef create_alien(ai_settings, screen, aliens, alien_number, row_number):"""创建一个外星人并将其放在当前行"""alien = Alien(ai_settings, screen)alien_width = alien.rect.widthalien.x = alien_width + 2 * alien_width * alien_numberalien.rect.x = alien.xalien.rect.y = alien.rect.height + 2 * alien.rect.height * row_numberaliens.add(alien)def create_fleet(ai_settings, screen, ship, aliens):"""创建外星人群"""# 创建一个外星人,并计算一行可以容纳多少个外星人# 外星人之间的间距为外星人宽度alien = Alien(ai_settings, screen)number_aliens_x = get_number_alien_x(ai_settings, alien.rect.width)number_rows = get_number_rows(ai_settings, ship.rect.height, alien.rect.height)# 创建外星人群for row_number in range(number_rows):for alien_number in range(number_aliens_x):create_alien(ai_settings, screen, aliens, alien_number, row_number)def check_fleet_edges(ai_settings, aliens):"""有外星人到达边缘时采取相应的措施"""for alien in aliens.sprites():if alien.check_edges():change_fleet_direction(ai_settings, aliens)breakdef change_fleet_direction(ai_settings, aliens):"""将整个外星人下移, 并改变它们的方向"""for alien in aliens.sprites():alien.rect.y += ai_settings.fleet_drop_speedai_settings.fleet_direction *= -1def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets):"""响应被外星人撞到的飞船"""if stats.ships_left > 0:# 将ships_left减 1stats.ships_left -= 1# 更新记分牌sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并将飞船放到屏幕底端中央create_fleet(ai_settings, screen, ship, aliens)ship.center_ship()# 暂停sleep(0.5)else:stats.game_active = Falsepygame.mouse.set_visible(True)def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets):"""检查是否有外星人到达屏幕底端"""screen_rect = screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom >= screen_rect.bottom:# 像飞船被撞一样处理ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)breakdef update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets):"""检查是否有外星人位于屏幕边缘,并更新整群外星人的位置"""check_fleet_edges(ai_settings, aliens)aliens.update()# 检查是否有外星人到达底部check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets)# 检查外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship, aliens):ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)def check_high_score(stats, sb):"""检查是否诞生了新的最高分数"""if stats.score > stats.high_score:stats.high_score = stats.scoresb.prep_high_score()

game_stats.py

class GameStats():"""跟踪游戏的统计信息"""def __init__(self, ai_settings):"""初始化统计信息"""self.ai_settings = ai_settingsself.reset_stats()# 游戏刚启动时处于非活动状态self.game_active = False# 在任何情况下都不应重置最高分self.high_score = 0def reset_stats(self):"""初始化在游戏运行期间可能变化的统计信息"""self.ships_left = self.ai_settings.ship_limitself.score = 0self.level = 1

scoreboard.py

import pygame.font
from pygame.sprite import Groupfrom ship import Shipclass Scoreboard():"""显示得分信息类"""def __init__(self, ai_settings, screen, stats):"""初始化显示得分涉及的属性"""self.screen = screenself.screen_rect = screen.get_rect()self.ai_settings = ai_settingsself.stats = stats# 显示得分信息时使用的字体设置self.text_color = (30, 30, 30)self.font = pygame.font.SysFont(None, 48)# 准备包含最高分图像和当前得分图像self.prep_score()self.prep_high_score()self.prep_level()self.prep_ships()def prep_score(self):"""将得分转换为一幅渲染的图像"""rounded_score = int(round(self.stats.score, -1))score_str = "{:,}".format(rounded_score)self.score_image = self.font.render(score_str, True, self.text_color,self.ai_settings.bg_color)# 将得分放在屏幕的右上角self.score_rect = self.score_image.get_rect()self.score_rect.right = self.screen_rect.right - 20self.score_rect.top = 5def show_score(self):"""在屏幕中显示飞船和得分"""self.screen.blit(self.score_image, self.score_rect)self.screen.blit(self.high_score_image, self.high_score_rect)self.screen.blit(self.level_image, self.level_rect)# 绘制飞船self.ships.draw(self.screen)def prep_high_score(self):"""将最高得分转换为渲染的图像"""high_score = int(round(self.stats.high_score, -1))high_score_str = "{:,}".format(high_score)self.high_score_image = self.font.render(high_score_str, True,self.text_color, self.ai_settings.bg_color)# 将最高得分放在屏幕顶部中央self.high_score_rect = self.high_score_image.get_rect()self.high_score_rect.centerx = self.screen_rect.centerxself.high_score_rect.top = self.score_rect.topdef prep_level(self):"""将等级转换为渲染的图像"""self.level_image = self.font.render(str(self.stats.level), True,self.text_color, self.ai_settings.bg_color)# 将等级放在得下面self.level_rect = self.level_image.get_rect()self.level_rect.right = self.score_rect.rightself.level_rect.top = self.score_rect.bottom + 10def prep_ships(self):"""显示还剩余多少搜飞船"""self.ships = Group()for ship_number in range(self.stats.ships_left):ship = Ship(self.ai_settings, self.screen)ship.rect.x = 10 + ship_number * ship.rect.widthship.rect.y = 10self.ships.add(ship)

settings.py

class Settings():"""存储《外星人入侵》的所有设置类"""def __init__(self):"""初始化游戏静态设置"""# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (230, 230, 230)# 飞船的设置self.ship_speed_factor = 1.5self.ship_limit = 3# 子弹设置# self.bullet_speed_factor = 3self.bullet_width = 30self.bullet_height = 15self.bullet_color = 60, 60, 60self.bullets_allowed = 3# 外星人设置self.alien_speed_factor = 1# fleet_drop_speed表示触碰到屏幕边缘时下移的速度self.fleet_drop_speed = 5# fleet_direction为 1 表示向右移动,为 -1 表示向左移动self.fleet_direction = 1# 以什么样的速度加快游戏节奏self.speedup_scale = 1.1# 外星人点数提高速度self.score_scale = 1.5self.initialize_dynamic_settings()def initialize_dynamic_settings(self):"""初始化随游戏进行而变化的设置"""self.ship_speed_factor = 1.5self.bullet_speed_factor = 3self.alien_speed_factor = 1# fleet_direction为 1 表示向右移动,为 -1 表示向左移动self.fleet_direction = 1# 记分self.alien_points = 50def increase_speed(self):"""提高速度设置和外星人点数设置"""self.ship_speed_factor *= self.speedup_scaleself.bullet_speed_factor *= self.speedup_scaleself.alien_speed_factor *= self.speedup_scaleself.alien_points = int(self.alien_points * self.score_scale)

ship.py

import pygame
from pygame.sprite import Spriteclass Ship(Sprite):def __init__(self, ai_settings, screen):"""初始化飞船并设置其初始位置"""super(Ship, self).__init__()self.screen = screenself.ai_settings = ai_settings# 加载飞船图像并获取其外接矩形# self.image = pygame.image.load('E:\\Project\\alien_invasion\\images\\ship.bmp')self.image = pygame.image.load('images/ship.bmp')# 调整图片大小self.image = pygame.transform.scale(self.image, (35, 35))self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()# 将每艘新飞船放在屏幕的底部中央self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom# 在飞船的属性center中存储小数值self.centerx = float(self.rect.centerx)self.centery = float(self.rect.centery)# 移动标志self.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falsedef update(self):"""根据移动标志的调整飞船的位置"""# 更新飞船的center值,而不是rectif self.moving_right and self.rect.right < self.screen_rect.right:# self.rect.centerx += 1self.centerx += self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:# self.rect.centerx -= 1self.centerx -= self.ai_settings.ship_speed_factorif self.moving_up and self.rect.top > 0:self.centery -= self.ai_settings.ship_speed_factorif self.moving_down and self.rect.bottom < self.screen_rect.bottom:self.centery += self.ai_settings.ship_speed_factor# 根据self.center更新rect对象self.rect.centerx = self.centerxself.rect.centery = self.centerydef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)def center_ship(self):"""让飞船在屏幕上居中"""# self.centerx = self.screen_rect.centerxself.centerx = self.screen_rect.centerxself.centery = self.screen_rect.bottom - 15

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

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

相关文章

【Qt】Macbook M1下载安装

文章目录 一、下载Xcode命令行工具二、在Cion中配置编译器三、安装Qt四、配置qmake环境五、创建Qt项目 博主已经下载了Clion&#xff0c;所以本文是将qt配置到Clion上 本博客所写的教程有一定的问题&#xff0c;因为我在官网下载后发现有一些所需的包是没有的&#xff0c;不知道…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景&#xff1a;从开发&#xff0c;创建makefile、编译、单元测试、到生产部署都只有俺一个人&#xff0c;所以所有的工作都要自己完成&#xff0c;因此有了想法做一个插件&#xff0c;按需实现&#xff1a;构建Makefile&#xff0c;编译、打包、压缩、上传服务器、解压、安装…

docker之容器设置开机自启(4)

命令语法&#xff1a; docker update --restartalways 容器ID/容器名 选项&#xff1a; --restart参数 no 默认策略&#xff0c;在容器退出时不重启容器 on-failure 在容器非正常退出时&#xff08;退出状态非0&#xff09;&#xff0c;才会重启容器 …

动态规划 —— 子数组系列-最大子数组和

1. 最大子数组和 题目链接&#xff1a; 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-subarray/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;以i位置为结…

【教程】华南理工大学国际校区宿舍门锁声音设置

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 视频教程&#xff1a;【教程】华南理工大学国际校区宿舍门锁声音设置_哔哩哔哩_bilibili 来自&#xff1a; https://tieba.baidu.com/p/8297840035

【AI技术对电商的影响】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…

智享AI 无人自动直播的崛起 ,引领智能互动与自动带货新潮流!

在当今数字化飞速发展的时代&#xff0c;商业领域正经历着一场前所未有的变革。智能互动与自动带货成为了新的潮流&#xff0c;而其中最引人瞩目的便是最新的 AI 无人自动直播玩法&#xff0c;它宛如一股强劲的东风&#xff0c;引领着行业的风向。 AI 无人自动直播是多种先进技…

科技云报到:数字化转型,从不确定性到确定性的关键路径

科技云报到原创。 数字化转型是VUCA时代最大的确定性。 如果说&#xff0c;过去是数字化转型的试验阶段&#xff0c;实施的是开荒动土、选种育苗&#xff0c;那么当前要进行的是精耕细作、植树造林&#xff0c;数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业…

vue3+vite 前端打包不缓存配置

最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了&#xff0c;原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…

基于Qt/C++全局键盘和鼠标事件监控工具

项目介绍&#xff1a; 该项目实现了一个基于 Qt 框架的全局键盘和鼠标事件监控工具&#xff0c;主要功能包括&#xff1a; 实时监控全局键盘事件&#xff1a;捕获并显示所有键盘按键&#xff0c;并将按键的虚拟键码转为键名显示。实时监控全局鼠标事件&#xff1a;捕获并显示…

华为数通HCIA系列第5次考试-【2024-46周-周一】

文章目录 1、子网掩码有什么作用&#xff0c;和IP地址是什么关系&#xff0c;利用子网掩码可以获取哪些信息&#xff1f;2、已知一个IP地址是192.168.1.1&#xff0c;子网掩码是255.255.255.0&#xff0c;求其网络地址3、已知某主机的IP地址是192.168.100.200&#xff0c;子网掩…

arkUI:遍历数据数组动态渲染(forEach)

arkUI&#xff1a;遍历数据数组动态渲染&#xff08;forEach&#xff09; 1 主要内容说明2 相关内容2.1 ForEach 的基本语法2.2 简单遍历数组2.2 多维数组遍历2.4 使用唯一键2.5 源码1的相关说明2.5.1 源码1 &#xff08;遍历数据数组动态渲染&#xff09;2.5.2 源码1运行效果 …

Ue5 umg学习(一)

学习视频资料链接 2、UI编辑界面_哔哩哔哩_bilibili 打开ue5虚幻引擎 创建新的文件夹UI&#xff0c;在这个文件夹里写东西 点击停靠在布局中 双击点进UI文件夹 右键用户界面&#xff0c;选择控件蓝图 创建控件蓝图&#xff0c;重命名&#xff0c;在名称后面加一个_BP1代表是…

PYNQ 框架 - 中断(INTR)驱动

目录 1. 简介 2. 分析 2.1 Block Design 2.2 AXI Timer 2.2.1 IP 基本信息 2.2.2 IP 地址空间 2.2.3 级联模式 2.2.4 生成/捕获模式 2.3 AXI Interrupt 2.3.1 IP 基本信息 2.3.2 IP 地址空间 2.3.3 相关概念 2.3.4 参数配置 2.3.5 中断确认寄存器 3. PYNQ 代码 …

RAG综述:《A Comprehensive Survey of Retrieval-Augmented Generation (RAG)》

来源于《A Comprehensive Survey of Retrieval-Augmented Generation (RAG): Evolution, Current Landscape and Future Directions》 一、RAG所解决的问题 如何有效地从外部知识源检索相关信息&#xff0c;如何将这些信息无缝地融入到生成文本中&#xff0c;以及如何在保证生…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

aws(学习笔记第十二课) 使用AWS的RDS-MySQL

aws(学习笔记第十二课) 使用AWS的RDS 学习内容&#xff1a; AWS的RDS-MySQL 1. 使用AWS的RDS 什么是RDS RDS就是Relation Database Service的缩写&#xff0c;是AWS提供的托管关系型数据库系统。让用户能够在 AWS Cloud 云中更轻松地设置、操作和扩展关系数据库。 数据库和we…

云原生-docker安装与基础操作

一、云原生 Docker 介绍 Docker 在云原生中的优势 二、docker的安装 三、docker的基础命令 1. docker pull&#xff08;拉取镜像&#xff09; 2. docker images&#xff08;查看本地镜像&#xff09; 3. docker run&#xff08;创建并启动容器&#xff09; 4. docker ps…

Spark 核心概念与宽窄依赖的详细解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…