python3.7 + pygame1.9.3实现小游戏《外星人入侵》(五):计分
本小节首先在游戏画面中添加一个Play按钮,用于根据需要启动游戏,为此在game_stats.py中输入以下代码:
class GameStats():def __init__(self,ai_settings):# 初始化统计信息self.ai_settings = ai_settingsself.reset_stats()#让游戏一开始处于非活动状态self.game_active = Falsedef reset_stats(self):# 初始化在游戏运行期间可能变化的统计信息self.ship_left = self.ai_settings.ship_limit
现在,游戏一开始将处于非活动状态,等我们创建Play按钮后,玩家才能开始游戏。由于Pygame没有内置创建按钮的方法,为此新建一个Button类。
button.py
import pygame.font
class 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)#指定字体None为默认,48字号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#按钮的标签只需创建一次def preg_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)
在屏幕上绘制按钮:
alien_invasion.py
--snip--
from gam_stats import GameStats
from button import Button
--snip--def run_game():--snip--pygame.display.set_caption("Alien Invasion")#创建Play按钮play_button = Button(ai_settings,screen,"Play")--snip--# 游戏的主循环while True:--snip--gf.update_screen(ai_settings,screen,stats,ship,aliens,bullets,play_button)run_game()
成功显示按钮后,再考虑逐步添加按钮的功能:
- 修改update_screen(),使得游戏处于非活动状态下才显示Play按钮,且按钮位于其他所有屏幕元素上面
game_functions.py
def update_screen(ai_settings.screen,stats,ship,aliens,bullets,play_button):#更新屏幕上的图像,并切换到新屏幕--snip--#如果游戏处于非活动状态,就绘制Play按钮if not stats.game_active:play_button.draw_button()# 让最近绘制的屏幕可见pygame.display.flip()
开始游戏
- 单击按钮时,检测MOUSEKEYDOWN事件,获取其位置(使用pygame.mouse.get_pos()返回其坐标值),以判断是否处于按钮的rect内,如果是,就将game_active设置为True,并重置统计信息、删除现有外星人和子弹、创建一批新的外星人群、让飞船居中,游戏就此开始。
- 为观感体验,游戏开始后,需要隐藏光标的出现。同时给游戏新增开始游戏的快捷键P。
game_functions.py
def check_events(ai_settings,screen,stats,play_button,ship,bullets):# 响应按键和鼠标事件for event in pygame.event.get():if event.type == pygame.QUIT:--snip--elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y = pygame.mouse.get_pos()check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)def check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)::#在玩家单击Play按钮时开始游戏button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)if play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active = True#重置游戏统计信息if button_clicked and not stats.game_active: #隐藏光标pygame.mouse.set_visible(False)stats.reset_stats()stats.game_active = True#清空外星人列表和子弹列表aliens.empty()bullets.empty()#创建一群新的外星人,并让飞船居中create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()--snip--
def ship_hit(ai_settings,stats,screen,ship,aliens,bullets):# 响应被外星人撞到的飞船if stats.ship_left > 0:--snip--else:stats.game_active = False#游戏结束后,重新显示光标pygame.mouse.set_visible(True)
alien_invasion.py
相应的,修改传入参数
# 游戏的主循环while True:gf.check_events(ai_settings,screen,stats,play_button,ship,bullets)
提高等级
- 在消灭完整群外星人后,适当提高游戏难度,比如提高外星人的移动速度。
settings.py
def __init__(self):# 初始化游戏的静态设置# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (230,230,230) # 设置背景色,由RGB指定,(230,230,230)为浅灰色self.ship_speed_factor = 1.5#飞船设置self.ship_limit = 3# 子弹设置self.bullet_width = 3self.bullet_height = 15self.bullet_color = 60,60,60self.bullets_allowed = 3# 外星人设置self.fleet_drop_speed = 10#控制游戏节奏随着玩家等级提高的加快速度self.speedup_scale = 1.1#外星人点数的提高速度self.score_scale = 1.5#初始化随游戏进行而变化的属性self.initialize_dynamic_settings()def increase_speed(self):#提高速度设置self.ship_speed_factor *= self.speedup_scaleself.bullet_speed_factor *= self.speedup_scaleself.alien_speed_factor *= self.speedup_scale#提高点数并设置为整数self.alien_points = int(self.alien_points * self.score_scale)
相应的,修改游戏速度调用代码
game_functions.py
def check_bullet_alien_collisions(ai_settings,screen,ship,aliens,bullets):# 检查是否有子弹击中外星人,并进行删除collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if len(aliens) == 0:# 删除现有的子弹,加快游戏节奏,并新建一群外星人bullets.empty()ai_settings.increase_speed()create_fleet(ai_settings,screen,ship,aliens)
--snip--
def check_play_button(ai_settings,screen,stats,play_button,ship,aliens,bullets,mouse_x,mouse_y)::#在玩家单击Play按钮时开始游戏button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)if play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active = True#重置游戏统计信息if button_clicked and not stats.game_active: #重置游戏设置ai_settings.initialize_dynamic_settings()--snip--
现在,游戏更加具备了挑战性,每当玩家将屏幕上的外星人消灭干净后,游戏都将加快节奏。根据游戏体验找到最佳的settings.speedup_scale值。
- 添加计分属性,实时跟踪玩家的得分,并显示最高得分、当前等级和余下的飞船数。
为在每次开始游戏时都重置得分,我们在reset_stats()而不是__init__()中初始化score,
而鉴于在任何情况下都不会重置最高分,我们在__init__()中初始化high_score:
game_stas.py
class GameStats():def __init__(self,ai_settings):# 初始化统计信息self.ai_settings = ai_settingsself.reset_stats()self.game_active = True#在任何情况下都不应重置最高分self.high_score=0def reset_stats(self):#初始化随游戏进行可能变化的统计信息self.ship_left = self.ai_settings.ship_limitself.score = 0self.level=1
-为在屏幕上显示得分,创建一个新类Scoreboard:
scoreboard.py
import pygame.font
from pygame.sprite import Group
from 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):#将得分转换为一副渲染的图像#将得分圆整到最近的10的整数倍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()#确保得分始终锚定在右边,让其右边缘与屏幕右边缘相距20像素self.score_rect.right = self.score_rect.right - 20#使上边缘与屏幕上边缘相距20像素self.score_rect.top = 20def 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.right#给得分和等级之间留出空间self.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)#让整个飞船编组都位于屏幕左边,且左边距都为10像素ship.rect.x = 10 + ship_number * ship.rect.width#y坐标设置为离屏幕上边缘10像素,让所有飞船与得分图像对齐ship.rect.y = 10#将每搜新飞船都添加到编组ships中self.ships.add(ship)def 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)
- 为显示得分,更新alien_invasion.py
# 游戏的主循环while True:gf.check_events(ai_settings,screen,stats,play_button,ship,aliens,bullets)--snip--
from scoreboard import Scoreboard
--snip--
def run_game():--snip--#创建存储游戏统计信息的实例,并创建记分牌stats = GameStats(ai_settings)sb = Scoreboard(ai_settings,screen,stats)--snip--#游戏的主循环while True:--snip--gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)run_game()
- 显示得分,并在外星人被消灭时更新得分
- 提高速度
settings.py
def initialize_dynamic_settings(self):--snip--#指定击落一个外星人的得分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_scale#提高点数并设置为整数self.alien_points = int(self.alien_points * self.score_scale)#显示分数,注意:确认点数在不断增加后要删除该语句,以防影响性能及分散玩家注意力print(self.alien_points)
- 显示余下的飞船数
ship.py
import pygame
from pygame.sprite import Spriteclass Ship(Sprite):def __init__(self,ai_settings,screen):# 初始化飞船并设置其初始位置#导入Sprite,让ship继承super(Ship,self).__init__()--snip--
- 确保开始游戏时充分调用
game_functions.py
--snip--
def check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets):# 响应按键和鼠标事件for event in pygame.event.get():if event.type == pygame.QUIT:--snip--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 play_button.rect.collidepoint(mouse_x,mouse_y):stats.game_active = True#重置游戏统计信息if button_clicked and not stats.game_active: #重置游戏设置ai_settings.initialize_dynamic_settings()#重置记分图像sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()#隐藏光标pygame.mouse.set_visible(False)stats.reset_stats()stats.game_active = True#清空外星人列表和子弹列表aliens.empty()bullets.empty()#创建一群新的外星人,并让飞船居中create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()--snip--def check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets):# 检查是否有子弹击中外星人,并进行删除collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if len(aliens) == 0:# 删除现有的子弹,加快游戏节奏,并新建一群外星人bullets.empty()ai_settings.increase_speed()#提高等级stats.level += 1sb.prep_level()create_fleet(ai_settings,screen,ship,aliens)#子弹撞到外星人时,返回一个字典collisions,更新得分if collisions:#考虑同时击中多外星人的情况for aliens in collisions.values():stats.score += ai_settings.alien_pointssb.prep_score()check_high_score(stats,sb)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_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets)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,stats,screen,ship,aliens,bullets)# 检查外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship,aliens):ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)#检查是否有外星人抵达屏幕底端check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets)def ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets):# 响应被外星人撞到的飞船if stats.ship_left > 0:stats.ship_left -= 1#更新记分牌sb.prep_ships()# 清空外星人列表和子弹列表--snip--else:stats.game_active = False#游戏结束后,重新显示光标pygame.mouse.set_visible(True)def check_high_score(stats,sb):#检查是否诞生了新的最高得分if stats.score > stats.high_score:stats.high_score = stats.scoresb.prep_high_score()--snip--
相应的,修改主while循环中的代码,传递实参sb
alien_invasion.py*
--snip--
from scoreboard import Scoreboard
--snip--
def run_game():--snip--#创建存储游戏统计信息的实例,并创建记分牌stats = GameStats(ai_settings)sb = Scoreboard(ai_settings,screen,stats)#游戏的主循环while True:gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)if stats.game_active:ship.update()gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)gf.update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets)--snip--gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)run_game()--snip--
相关文章:
python3.7 + pygame1.9.3实现小游戏《外星人入侵》(五):计分
本小节首先在游戏画面中添加一个Play按钮,用于根据需要启动游戏,为此在game_stats.py中输入以下代码: class GameStats():def __init__(self,ai_settings):# 初始化统计信息self.ai_settings ai_settingsself.reset_stats()#让游戏一开始处…...
[量化投资-学习笔记014]Python+TDengine从零开始搭建量化分析平台-Python知识点汇总
以下内容总结了之前章节涉及到的 Python 知识点,看过之前的章节同学,就不用打开了。 1. Restful 访问 TDengine 数据库 知识点: 发送给 TDengine 的 HTTP Body 里面是 SQL 明文,请求方式为 POST。TDenging 返回的结果是 JSON 格…...
[论文分享] Never Mind the Malware, Here’s the Stegomalware
Never Mind the Malware, Here’s the Stegomalware [IEEE Security & Privacy 2022] Luca Caviglione | National Research Council of Italy Wojciech Mazurczyk | Warsaw University of Technology and FernUniversitt in Hagen 近年来,隐写技术已逐渐被观…...
代号:408 —— 1000道精心打磨的计算机考研题
文章目录 📋前言🎯计算机科学与技术专业介绍(14年发布)🧩培养目标🧩毕业生应具备的知识和能力🧩主要课程 🎯代号:408🔥文末送书🧩有什么优势&…...
《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互
QT版本:5.15.2 VS版本:2019 客户端程序主要包含三块:连接服务器,发送消息,关闭客户端 服务端程序主要包含三块:打开消息监听,接收消息并反馈,关闭服务端 1、先打开服务端监听功能 …...
行业追踪,2023-11-13
自动复盘 2023-11-13 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
开放领域对话系统架构
开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…...
终端神器:tmux
安装tmux简单使用自己的理解(小白专属) 使用的初衷: 在Linux终端下,由于session(会话)和windows(窗口)是绑定一起的,你打开一个终端的黑窗口就是打开一个会话,…...
Elasticsearch学习(一)
ElasticSearch学习(一) 1 什么是Elasticsearch 1.什么是搜索? 百度:我们比如说想找寻任何信息时候就会上百度上搜索一下 比如说:电影、图片、小说等等…(提到搜索的第一印象) 百度 &#x…...
CSS3的常见边框汇总
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS3 边框</title><style>body, ul, li, dl, dt, dd, h1, h2, h3, h4, h5 {margin: 0;padding: 0;}body {background-color: #F7F7F7;}.wr…...
酷柚易汛ERP-购货订单操作指南
1、应用场景 先下购货订单,收货入库后生成购货单。 2、主要操作 2.1 新增购货订单 打开【购货】-【购货订单】新增购货订单。(*为必填项,其他为选填) ① 录入供应商:点击供应商字段框的 ,在弹框中选择供…...
【数据仓库】数仓分层方法详解与层次调用规范
文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层?1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…...
记一次线上问题引发的对 Mysql 锁机制分析
背景 最近双十一开门红期间组内出现了一次因 Mysql 死锁导致的线上问题,当时从监控可以看到数据库活跃连接数飙升,导致应用层数据库连接池被打满,后续所有请求都因获取不到连接而失败 整体业务代码精简逻辑如下: Transaction p…...
Android 工厂模式距离传感器逻辑优化
Android 工厂模式距离传感器逻辑优化 接到客户反馈提到距离传感器校准完毕之后,每次测试完成界面都会弹出“请点击校准按钮进行校准!”Toast弹窗,需要对弹窗的显示逻辑进行优化,即只让其在首次进入距离传感器测试界面时弹出&#…...
Dell笔记本电脑 启动时提示解决
https://www.dell.com/support/kbdoc/en-us/000139731/what-the-headless-operation-mode-active-post-message-means-and-how-to-stop-it-appearing-during-start-up dell官方解释: 提示来自于BIOS/UEFI固件中POST Behaviar,只要打开了忽略警告、错误…...
【人工智能Ⅰ】7-KNN 决策树
【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN(K near neighbour) 思想:一个样本与数据集中的k个样本最相似,若这k个样本大多数属于某类别,则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…...
【LeetCode】26. 删除有序数组中的重复项
26. 删除有序数组中的重复项 难度:简单 题目 给你一个 非严格递增排列 的数组 nums ,请你原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素…...
K8S知识点(八)
(1)实战入门-Label 通过标签实现Pod的区分,说白了就是一种标签选择机制 可以使用命令是否加了标签: 打标签: 更新标签: 筛选标签: 修改配置文件,重新创建一个pod 筛选࿱…...
25.4 MySQL 函数
1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…...
Unity 下载Zip压缩文件并且解压缩
1、Unity下载Zip压缩文件主要使用UnityWebRequest类。 可以参考以下方法: webRequest UnityWebRequest.Get(Path1); //压缩文件路径webRequest.timeout 60;webRequest.downloadHandler new DownloadHandlerBuffer();long fileSize GetLocalFileSize(Path2); …...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
