Pygame入门-游戏代码结构及背景轮播、声音音效及图像动态效果

news2025/1/11 23:46:24

一、游戏代码结构

代码结构是代码的组织方式,也是游戏编程的思考框架。pygame官方文档中给出了以下建议,将游戏代码结构分为以下六个部分。

1导入游戏模块。
2资源处理类;定义一些类来处理最基本的资源,包括加载图像和声音,连接和断开网络,加载保存的游戏。
3游戏对象类;为你的游戏对象定义类。例如游戏对象、背景对象、玩家对象、敌人对象、道具对象、文本对象等。
4其他游戏功能;定义其他必要的功能,如游戏面板、菜单处理等。
5初始化游戏,包括pygame对象本身,背景,游戏对象(初始化类的实例)和任何其他你可能想要添加的小代码。
6主循环,你在其中放入任何输入处理(即观察用户敲击按键/鼠标按钮),用于更新游戏对象的代码,最后用于更新屏幕。

基于以上结构,对上一篇最后的代码,我们按照导入游戏模块、定义全局变量、定义游戏对象、定义游戏主循环四个模块了进行优化,其中定义游戏对象又进行了细分。

1.需要导入的游戏模块

import pygame
import sys

2.定义全局常量

分别为screen的size,目标区域的位置,目标区域的size,文本颜色,目标抵达状态。

BG_SIZE = (400, 500)  # 背景尺寸
ON_TARGET = False  # 初始化目标状态
TARGET_SIZE = (50, 50)  # 目标区域大小
TARGET_POSITION = (300, 200)  # 目标位置
TEXT_COLOR = (255, 0, 0)  # 文本颜色

3.定义游戏对象

定义一个Game对象,并定义__init__、event_handler、start三个函数,分别完成所有对象的初始化、事件的监听与更新、游戏主循环。
下面详细介绍:
__init__主要完成游戏的初始化。包括窗口初始化、背景初始化、目标位置初始化、生成玩家实例、生成消息文本实例
代码如下:
>定义Game对象

class Game(object):
    # 游戏类
    def __init__(self):
        # 1.游戏主窗口
        self.screen = pygame.display.set_mode(BG_SIZE)
        self.image = pygame.image.load('./image/plane/background.png')
        self.rect = self.image.get_rect()
        self.stop_position = pygame.image.load('./image/driver/grass.jpg')
        self.stop_position = pygame.transform.scale(self.stop_position, TARGET_SIZE)
        self.stop_position_rect = self.stop_position.get_rect()
        self.stop_position_rect.topleft = TARGET_POSITION
        self.hero = Car()
        self.label = Label()

在Game对象中继续定义event_handler函数。它的任务是使用pygame.event.get()方法监听事件,判断玩家是否点击了窗口的退出按钮,如果是则返回True。

    def event_handler(self):
        # 定义事件捕获
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return True
        return False

在Game对象中定义start函数。它的任务是定义游戏主循环。包括设置循环和屏幕刷新速率、根据用户关闭窗口动作退出主循环、判断是否到达目标、捕获键盘动作、返回移动基数、刷新背景、目标、小车和文本对象、更新屏幕等。
代码如下:

   def start(self):
        clock = pygame.time.Clock()
        while True:
            clock.tick(60)
            if self.event_handler():
                return
            if self.hero.rect.topleft == TARGET_POSITION:  # 判断汽车是否移动到目标位置
                ON_TARGET = True
            else:
                ON_TARGET = False
            keys = pygame.key.get_pressed()
            move_hori = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]  # 获得水平移动基数,向右为正
            move_vert = keys[pygame.K_DOWN] - keys[pygame.K_UP]  # 获得垂直移动基数,向下为正
            self.hero.update(move_hori, move_vert)
            self.label.update(ON_TARGET)
            self.screen.blit(self.image, self.rect)
            self.screen.blit(self.stop_position, self.stop_position_rect)
            self.screen.blit(self.hero.image, self.hero.rect)
            self.screen.blit(self.label.image, self.label.image_rect)
            pygame.display.update()

>定义小车对象
定义了初始化和更新两个函数。
在__init__函数主要用于创建小车surface对象并缩放图片大小,设置小车移动速度。
在update函数主要用于更新小车的坐标位置。具体代码如下:

class Car(object):
    # 定义玩家对象
    def __init__(self):
        self.image = pygame.image.load('./image/driver/car1.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, (50, 50))
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self, *args):
        self.rect.x += args[0] * self.speed
        self.rect.y += args[1] * self.speed

>定义文本对象
同样定义了初始化和更新两个函数。
在__init__函数主要用于创建生成系统字体对象、文本surface。
在update函数主要用于根据是否到达目标值,刷新文本信息。具体代码如下:

class Label(object):
    # 定义文本对象
    def __init__(self):
        self.font = pygame.font.SysFont('仿宋gb_2312', 25)
        self.image = self.font.render('go to the target', True, TEXT_COLOR)
        self.image_rect = self.image.get_rect()
        self.image_rect.topleft = (100, 100)

    def update(self, is_on_target):
        if is_on_target:
            text = 'well done'
        else:
            text = 'go to the target'
        self.image = self.font.render(text, True, TEXT_COLOR)
        self.image_rect = self.image.get_rect()
        self.image_rect.topleft = (100, 100)

4.定义游戏主程序

def main():
    pygame.init()
    Game().start()
    pygame.quit()


if __name__ == '__main__':
    main()

二、动态效果实现

在游戏中动态效果主要有背景的变化、图像的变化、文本的变化和音乐音效等。以下举例总结一些实现以上动态效果的方法。

1.背景连续滚动

实例:高速飞车
背景连续滚动是通过两个拼接的背景上下移动实现的,如下图所示。
在这里插入图片描述
步骤一:制作Background对象

class Background(object):
    def __init__(self, is_alt):
        self.image = pygame.image.load('./image/driver/road.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, BG_SIZE)
        self.speed = 5  # 设置屏幕移动速度
        self.rect = self.image.get_rect()
        if is_alt:  # 背景初始化时,一个背景在上,一个背景在屏幕内
            self.rect.y = - self.rect.height

    def update(self):
        self.rect.y += self.speed  # 在背景更新时,实现背景向下移动
        if self.rect.y >= self.rect.height: # 当背景刚好移除屏幕时,将背景重新放置到屏幕的上方
            self.rect.y = - self.rect.height

步骤二:在Game类中生成2个背景实例

self.road_1,self.road_2 = Background(True),Background(False)

Game类初始化的完整代码如下:

class Game(object):
    # 游戏类
    def __init__(self):
        # 1.游戏主窗口
        self.screen = pygame.display.set_mode(BG_SIZE)
        self.road_1,self.road_2 = Background(True),Background(False)
        self.speed = 5
        self.hero = Car()  # 生成汽车实例
        self.hero.rect.midbottom = self.screen.get_rect().midbottom  # 在初始化时,将汽车放在屏幕底部中间位置

步骤三:在游戏主循环中添加两个背景更新动作

            self.road_1.update()
            self.road_2.update()
            self.screen.blit(self.road_1.image, self.road_1.rect)
            self.screen.blit(self.road_2.image, self.road_2.rect)

完整代码:

import pygame

# 定义全局常量
BG_SIZE = (400, 500)  # 背景尺寸


class Game(object):
    # 游戏类
    def __init__(self):
        # 1.游戏主窗口
        self.screen = pygame.display.set_mode(BG_SIZE)
        self.road_1, self.road_2 = Background(True), Background(False)
        self.speed = 5
        self.hero = Car()
        self.hero.rect.midbottom = self.screen.get_rect().midbottom

    def event_handler(self):
        # 定义事件捕获
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return True
        return False

    def start(self):
        clock = pygame.time.Clock()
        while True:
            clock.tick(60)
            if self.event_handler():
                return
            keys = pygame.key.get_pressed()
            move_hori = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]  # 获得水平移动基数,向右为正
            move_vert = keys[pygame.K_DOWN] - keys[pygame.K_UP]  # 获得垂直移动基数,向下为正
            self.road_1.update()
            self.road_2.update()
            self.hero.update(move_hori, move_vert)
            self.screen.blit(self.road_1.image, self.road_1.rect)
            self.screen.blit(self.road_2.image, self.road_2.rect)
            self.screen.blit(self.hero.image, self.hero.rect)
            pygame.display.update()


class Background(object):
    def __init__(self, is_alt):
        self.image = pygame.image.load('./image/driver/road.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, BG_SIZE)
        self.speed = 5
        self.rect = self.image.get_rect()
        if is_alt:
            self.rect.y = - self.rect.height

    def update(self):
        self.rect.y += self.speed
        if self.rect.y >= self.rect.height:
            self.rect.y = - self.rect.height


class Car(object):
    # 定义玩家对象
    def __init__(self):
        self.image = pygame.image.load('./image/driver/car1.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, (50, 50))
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self, *args):
        self.rect.x += args[0] * self.speed
        self.rect.y += args[1] * self.speed


class Label(object):
    # 定义文本对象
    def __init__(self):
        pass

    def update(self, is_on_target):
        pass


def main():
    pygame.init()
    Game().start()
    pygame.quit()


if __name__ == '__main__':
    main()

2.添加音乐音效

在高速飞车游戏添加四个音乐效果。背景音乐、汽车发动音效、汽车加速行驶音效、汽车喇叭音效。
pygame.mixer.music用以播放背景音乐,pygame.mixer.sound用以播放音效。两者在功能上略有差别。

mixer.Sound

pygame.mixer.Sound 载入音效文件
pygame.mixer.Sound.play 开始声音播放
pygame.mixer.Sound.stop 停止声音播放
pygame.mixer.Sound.fadeout 淡出后停止声音播放
pygame.mixer.Sound.set_volume 设置声音的播放音量
pygame.mixer.Sound.get_volume 获取播放音量
pygame.mixer.Sound.get_num_channels 计算声音播放了多少次
pygame.mixer.Sound.get_length 获取声音的长度
pygame.mixer.Sound.get_raw 返回声音样本的字符串副本

mixer.music

pygame.mixer.music.load 加载音乐文件
pygame.mixer.music.unload 卸载当前加载的音乐以释放资源
pygame.mixer.music.play 开始播放音乐
pygame.mixer.music.rewind 重新开始播放音乐
pygame.mixer.music.stop 停止音乐播放
pygame.mixer.music.pause 暂停音乐播放
pygame.mixer.music.unpause 恢复播放音乐
pygame.mixer.music.fadeout 淡出后停止音乐播放
pygame.mixer.music.set_volume 设置音乐音量
pygame.mixer.music.get_volume 获取音乐音量
pygame.mixer.music.get_busy 检查音乐是否正在播放
pygame.mixer.music.set_pos 设置播放位置
pygame.mixer.music.get_pos 获取音乐播放时间
pygame.mixer.music.queue 将声音文件排队以跟随当前
pygame.mixer.music.set_endevent 让音乐在播放停止時发送一个事件
pygame.mixer.music.get_endevent 获取在播放停止时发送的事件

准备工作
创建一个文件夹,将所有用到的音乐文件放到这个文件夹中。

创建Musicplayer对象
完成音乐音效初始化和设置音乐播放、音效播放、音效停止三个函数。

音效初始化主要是载入音乐、音效文件,为了便于音效文件的文件,可以使用字典进行管理。

代码如下:

class Musicplayer(object):
    def __init__(self):
        pygame.mixer.music.load('./wav/bgm.mp3')  # 载入背景音乐文件
        self.sound_dict = {}  # 生成一个空字典,用于管理音效对象。
        self.sound_dict['car_engine_start'] = pygame.mixer.Sound('./wav/car_engine_start.mp3')  # 载入汽车启动音效
        self.sound_dict['car_speed_up'] = pygame.mixer.Sound('./wav/car_speed_up.wav')  # 载入汽车加速行驶音效
        self.sound_dict['car_beep'] = pygame.mixer.Sound('./wav/car_beep.wav')  # 载入汽车喇叭音效
  • 背景音乐播放函数
    def play_music(self):
        pygame.mixer.music.play(-1)  # 当参数为-1时,将循环播放
        pygame.mixer.music.set_volume(0.2)  # 设置播放音量,参数0-1.0之间,1为最大。
  • 音效播放

为了灵活控制不同音效的播放,可将播放的音效名称作为参数传入。

    def play_sound(self, wav_name):
        self.sound_dict[wav_name].play()

修改Game对象的start函数设置音乐

游戏开始后播放背景音乐,播放汽车引擎发动音效

    def start(self):
        clock = pygame.time.Clock()
        self.music_player.play_music()  # 播放背景音乐
        self.music_player.play_sound('car_engine_start')  # 播放汽车发动音效
        speed = 0  # 设置速度初始值为0,目的是与汽车加速音效相配合

在当汽车任意方向移动基数不为0时,播放汽车加速音效,speed不断加速,最高速度不超过50,将speed作为背景的向下移动速度。

            if keys[pygame.K_SPACE]:
                self.music_player.play_sound('car_beep')
            if move_hori != 0 or move_vert != 0:
                self.music_player.play_sound('car_speed_up')
                if speed > 50:
                    speed = 50
                else:
                    speed += 1
            else:
                speed = 0
            self.road_1.update(speed)
            self.road_2.update(speed)

修改Background背景对象代码

class Background(object):
    def __init__(self, is_alt):
        self.image = pygame.image.load('./image/driver/road.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, BG_SIZE)
        self.rect = self.image.get_rect()
        if is_alt:
            self.rect.y = - self.rect.height

    def update(self,speed = 0):
        self.rect.y += speed
        if self.rect.y >= self.rect.height:
            self.rect.y = - self.rect.height

完整代码如下

import pygame
# 定义全局常量
BG_SIZE = (400, 500)  # 背景尺寸


class Game(object):
    # 游戏类
    def __init__(self):
        # 1.游戏主窗口
        self.screen = pygame.display.set_mode(BG_SIZE)
        self.road_1, self.road_2 = Background(True), Background(False)
        self.hero = Car()
        self.music_player = Musicplayer()
        self.hero.rect.midbottom = self.screen.get_rect().midbottom

    def event_handler(self):
        # 定义事件捕获
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return True
        return False

    def start(self):
        clock = pygame.time.Clock()
        self.music_player.play_music()
        self.music_player.play_sound('car_engine_start')
        speed = 0
        while True:
            clock.tick(60)
            if self.event_handler():
                return
            keys = pygame.key.get_pressed()
            move_hori = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]  # 获得水平移动基数,向右为正
            move_vert = keys[pygame.K_DOWN] - keys[pygame.K_UP]  # 获得垂直移动基数,向下为正
            if keys[pygame.K_SPACE]:
                self.music_player.play_sound('car_beep')
            if move_hori != 0 or move_vert != 0:
                self.music_player.play_sound('car_speed_up')
                if speed > 50:
                    speed = 50
                else:
                    speed += 1
            else:
                speed = 0
            self.road_1.update(speed)
            self.road_2.update(speed)
            self.hero.update(move_hori, move_vert)
            self.screen.blit(self.road_1.image, self.road_1.rect)
            self.screen.blit(self.road_2.image, self.road_2.rect)
            self.screen.blit(self.hero.image, self.hero.rect)
            pygame.display.update()


class Background(object):
    def __init__(self, is_alt):
        self.image = pygame.image.load('./image/driver/road.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, BG_SIZE)
        self.rect = self.image.get_rect()
        if is_alt:
            self.rect.y = - self.rect.height

    def update(self,speed = 0):
        self.rect.y += speed
        if self.rect.y >= self.rect.height:
            self.rect.y = - self.rect.height


class Musicplayer(object):
    def __init__(self):
        pygame.mixer.music.load('./wav/bgm.mp3')
        self.sound_dict = {}
        self.sound_dict['car_engine_start'] = pygame.mixer.Sound('./wav/car_engine_start.mp3')
        self.sound_dict['car_speed_up'] = pygame.mixer.Sound('./wav/car_speed_up.wav')
        self.sound_dict['car_beep'] = pygame.mixer.Sound('./wav/car_beep.wav')

    def play_music(self):
        pygame.mixer.music.play(-1)
        pygame.mixer.music.set_volume(0.2)

    def play_sound(self, wav_name):
        self.sound_dict[wav_name].play()


class Car(object):
    # 定义玩家对象
    def __init__(self):
        self.image = pygame.image.load('./image/driver/car1.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, (50, 50))
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self, *args):
        self.rect.x += args[0] * self.speed
        self.rect.y += args[1] * self.speed
        self.rect.x = 0 if self.rect.x <= 0 else self.rect.x
        self.rect.y = 0 if self.rect.y <= 0 else self.rect.y
        if self.rect.right > BG_SIZE[0]:
            self.rect.right = BG_SIZE[0]
        if self.rect.bottom > BG_SIZE[1]:
                self.rect.bottom = BG_SIZE[1]

def main():
    pygame.init()
    Game().start()
    pygame.quit()


if __name__ == '__main__':
    main()

3.动画效果

飞机在飞行时喷出的火焰会发生变化,子弹发射后会飞行一段距离,击中敌人后敌人会受伤甚至被摧毁。以上都属于动画效果。
实现动画效果主要有两种方式,一是图片的变换,二是图片的运动。
实例1:飞机飞行效果
飞机飞行火焰的变化属于图片的轮播效果。实现图片轮播有两种方式,一种是将动画所有帧组成一张长图,按照一定速度同一个方向循环前进,但同一时间只有一帧能被看到,就像坐地铁时看到的广告,视觉上就像是连续播放的视频。第二种将连续动画按关键帧分割成一张张图片,并按找一定频率在图片中依次切换,这和我们平时看动画片是类似的。
以下以第二种方法为例进行介绍。
该方法的操作步骤:
对象初始化
在对象初始化时,生成一张空列表,将图片Surface依次添加到列表中,并设置第一张图片为初始时显示的图片。

class Plane(object):
    # 定义玩家对象
    def __init__(self, rect):
        self.images = []
        self.now_frame = 0  # 初始图片的索引
        self.images.append(pygame.image.load('./image/plane/me1.png').convert_alpha())
        self.images.append(pygame.image.load('./image/plane/me2.png').convert_alpha())
        self.image = self.images[self.now_frame]
        self.rect = self.image.get_rect()
        self.speed = 10

修改游戏主循环代码
对图片切换的间隔进行设置,例如每10帧更换一次。
方法时,在循环中设置当前帧计数器frame_count,初始为0,利用与10取余数的方法,每次循环frame_count会+1,到第10次时归为0。最后将frame_count==0返回给对象的update函数。

    def start(self):
        clock = pygame.time.Clock()
        frame_count = 0
        while True:
            clock.tick(40)
            if self.event_handler():
                return
            frame_count = (frame_count + 1) % 10
            self.hero.update(frame_count==0, move_hori, move_vert)

设置对象更新函数
当对象update函数被调用时,先判断args[0]是否为真,即判断frame_count == 0 是否为真,如果为True则代表此次时过去了10帧,需切换图片;如果为false,则直接返回。

更新的方式是从头开始轮播图片,如果当前不是最后一张图片,则切换到下一张;如果是最后一张图片,则切换到第一张。

    def update(self, *args):
        if not args[0]:
            return
        if self.now_frame < range(len(self.images))[-1]:
            self.now_frame += 1
            self.image = self.images[self.now_frame]
        else:
            self.now_frame = range(len(self.images))[0]
            self.image = self.images[self.now_frame]

本篇主要内容如上,主要介绍了游戏代码的典型结构,总结了背景连续滚动、声音效果和图像动态效果的实现方法。下一篇将对Pygame的精灵和精灵组实现方法进行。

上例完整代码如下:

import pygame
import time
import os
# 定义全局常量
BG_SIZE = (400, 500)  # 背景尺寸
INIT_RECT = pygame.Rect(200, 250, 60, 60)

class Game(object):
    # 游戏类
    def __init__(self):
        # 1.游戏主窗口
        self.screen = pygame.display.set_mode(BG_SIZE)
        self.road_1, self.road_2 = Background(True), Background(False)
        self.hero = Plane(INIT_RECT)
        self.hero.rect.midbottom = self.screen.get_rect().midbottom

    def event_handler(self):
        # 定义事件捕获
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return True
        return False

    def start(self):
        clock = pygame.time.Clock()
        frame_count = 0
        while True:
            clock.tick(40)
            if self.event_handler():
                return
            keys = pygame.key.get_pressed()
            move_hori = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]  # 获得水平移动基数,向右为正
            move_vert = keys[pygame.K_DOWN] - keys[pygame.K_UP]  # 获得垂直移动基数,向下为正
            self.road_1.update()
            self.road_2.update()
            frame_count = (frame_count + 1) % 10
            self.hero.update(frame_count == 0, move_hori, move_vert)
            self.screen.blit(self.road_1.image, self.road_1.rect)
            self.screen.blit(self.road_2.image, self.road_2.rect)
            self.screen.blit(self.hero.image, self.hero.rect)
            pygame.display.update()


class Background(object):
    def __init__(self, is_alt):
        self.image = pygame.image.load('./image/plane/background.png').convert_alpha()
        self.image = pygame.transform.scale(self.image, BG_SIZE)
        self.rect = self.image.get_rect()
        if is_alt:
            self.rect.y = - self.rect.height

    def update(self,speed = 1):
        self.rect.y += speed
        if self.rect.y >= self.rect.height:
            self.rect.y = - self.rect.height



class Plane(object):
    # 定义玩家对象
    def __init__(self, rect):
        self.images = []
        self.now_frame = 0
        self.images.append(pygame.image.load('./image/plane/me1.png').convert_alpha())
        self.images.append(pygame.image.load('./image/plane/me2.png').convert_alpha())
        self.image = self.images[self.now_frame]
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self, *args):
        if not args[0]:
            return
        if self.now_frame < range(len(self.images))[-1]:
            self.now_frame += 1
            print(self.now_frame)
            self.image = self.images[self.now_frame]
        else:
            self.now_frame = range(len(self.images))[0]
            print(self.now_frame)
            self.image = self.images[self.now_frame]

        self.rect.x += args[1] * self.speed
        self.rect.y += args[2] * self.speed
        self.rect.x = 0 if self.rect.x <= 0 else self.rect.x
        self.rect.y = 0 if self.rect.y <= 0 else self.rect.y
        if self.rect.right > BG_SIZE[0]:
            self.rect.right = BG_SIZE[0]
        if self.rect.bottom > BG_SIZE[1]:
                self.rect.bottom = BG_SIZE[1]


class Label(object):
    # 定义文本对象
    def __init__(self):
        pass

    def update(self, is_on_target):
        pass


def main():
    pygame.init()
    Game().start()
    pygame.quit()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#(csharp)这门语言的优势在哪?

确实有不少人因为unity入坑C#&#xff0c;unity刚开始使用的语言也有很多&#xff0c;比如Unity&#xff08;一种Java的扩展&#xff09;或者Boo&#xff08;一种受Python启发的语言&#xff09;&#xff0c;但C#坚持至今甚至成为unity使用主流&#xff0c;C#当然有它的优点。 …

实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow

本文对 ChatGPT 解答编程问题的情况进行了测试。测试了不同难度的问题&#xff0c;并对 ChatGPT 的回答结果进行了鉴别。测试结果表明&#xff0c;ChatGPT 在解答简单的编程问题时表现较为出色&#xff0c;但在解决复杂的问题时则不太理想。因此&#xff0c;也总结出了如何更好…

Vulnhub靶机:SICKOS_ 1.1

目录介绍信息收集主机信息探测主机信息探测网站探测Getshell敏感信息收集SUDO提权第2种通关思路nikto扫描站点验证破壳漏洞破壳漏洞利用计划任务提权修复文件内容错乱 & 提权总结介绍 系列&#xff1a;SickOs&#xff08;此系列共2台&#xff09; 发布日期&#xff1a;201…

springboot+netty实现站内消息通知(完整代码)

代码用到的组件介绍 ChannelInitializer 见名知意&#xff0c;就是channel 初始化器&#xff0c;当每个客户端创建连接时这里面的代码都会执行一遍。由于&#xff0c;连接建立之后&#xff0c;这个channel就会常驻内存&#xff0c;所以这里就有个值得思考的问题&#xff1a; …

【vue核心】1.vue简介

1. 官网 英文官网: https://vuejs.org/ 中文官网: https://cn.vuejs.org/ 2. 介绍与描述 动态构建用户界面的渐进式 JavaScript 框架 作者: 尤雨溪 3. Vue 的特点 遵循 MVVM 模式 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发 它本身只关注UI, 也可以引入其它第三…

新冠疫苗预约小程序设计与实现的源码+文档

摘 要 网络的广泛应用给生活带来了十分的便利。所以把新冠疫苗预约管理与现在网络相结合&#xff0c;利用java技术建设新冠疫苗预约小程序&#xff0c;实现新冠疫苗预约的信息化。则对于进一步提高新冠疫苗预约管理发展&#xff0c;丰富新冠疫苗预约管理经验能起到不少的促进…

数据库挖矿系列-优化器设计探索穿越之旅

作者&#xff1a;王晨 阿里云数据库产品团队 前言 引用来自百度百科的话&#xff1a;在数据库技术发展历史上&#xff0c;1970 年是发生伟大转折的一年&#xff0c;因为这一年的6月&#xff0c;IBM的圣约瑟研究实验室的高级研究员Edgar Frank Codd在Communications of ACM 上…

微信中使用ChatGPT

ChatGPT 微信 Bot1. Ubuntu2. 卸载旧版本3. apt 安装4. 添加软件源的GPG密钥5. 添加docker源到sources.list6. 安装 docker7. 启动 docker8. 建立docker用户组9. 测试10. wechat-chatgpt 搭建11. 获取 会话令牌12. 运行13. 使用微信小号扫码登录14. 重新登录14.1 停止运行容器1…

【Python项目】Python实现点选验证码识别, 模拟B站登陆 | 附源码 学习资料

前言 halo&#xff0c;包子们下午好 今天小编带大家是想b站模拟登陆&#xff0c;Python实现验证码识别 废话不多说&#xff0c;直接开整 相关文件 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 公众号&#xff1a;Python日志 源码点击蓝色字体领…

Docker Desktop下部署springboot项目

一、前言 本文是基于windows10版本下的docker desktop来演示的&#xff0c;所以你需要自行安装docker desktop,可以是windows,也可以是mac&#xff0c;根据自己的电脑进行选择即可。 二、创建springboot项目 创建一个springboot web项目&#xff0c;这个比较简单&#xff0c…

Vector-常用CAN工具 - CANoe入门到精通_04

前面已经介绍了Network Node节点的创建和配置&#xff0c;我想大家如果仔细研究下这块基本没什么问题&#xff0c;但是针对相应的CAPL编程该如何去做呢&#xff1f;今天这篇文章就是我们专门介绍在Network Node节点中常用的一些操作函数和使用技巧。 五、 Network Node相关CAPL…

如何在 Canvas 上实现图形拾取?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天来和大家说说 canvas 怎么做图形拾取。 图形拾取&#xff0c;指的是用户通过鼠标或手指在图形界面上能选中图形的能力。图形拾取技术是之后的高亮图形、拖拽图形、点击触发事件的基础。 canvas 作为一个过于朴实无华的绘制工…

【软件测试】老板:你测试,我放心。测试人的成功就是不做测试?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试没价值&#xf…

[附源码]计算机毕业设计的党务管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Arco Pro最佳实践,路由与菜单

Arco Pro最佳实践&#xff0c;路由与菜单1.路由2.菜单3.测试1.路由 路由通常都和菜单绑定在一起&#xff0c;为了减少维护的量&#xff0c;Arco直接通过路由表生成了菜单。 首先&#xff0c;需要先了解一下路由表的配置 现在我们来解析一下仪表盘的路由代码&#xff08;dash…

Ranger集成Solr

前言 对已经在正常使用的Ranger开启Solr存储审计日志。 可以手动安装或者使用ranger admin自带的solr安装程序来安装。当然官网也说了&#xff0c;用户可以选择手动安装然后集成&#xff0c;只要你足够勇敢 &#xff1a;&#xff09; 我们这里选择使用Ranger自带的安装程序来…

深度学习之:强化学习 Reinforcement Learning

文章目录认识强化学习Sparse RewardSupervised Learning v.s. RLRL 玩游戏Policy-based & Value-basedPolicy-based训练模型的三步骤定义目标函数衡量目标函数的好坏RL 的目标函数的好坏&#xff08;reward 总和的期望&#xff09;如何求得 Rθˉ\bar{R_{\theta}}Rθ​ˉ​…

win10系统+3060显卡驱动+cuda11.5+cudnn8.3安装

显卡驱动和一些cuda库安装教程 目的 本教程为了让大家能更好的了解和能更快的对显卡进行环境配置。 需注意&#xff0c;本教程的配置仅仅针对显卡NVIDA RTX 3060。 其他显卡对应的配置的流程雷同&#xff0c;仅仅是环境版本的不同。 显卡需要牢固的插装在PCI/PCI-E&#xff0…

如何发现循环中的规律?动作分解

第五章循环结构程序设计 计算机最擅长的就是重复 重复再重复 循环 就是重复 使用循环结构的条件&#xff1a;2个&#xff1a; 1 需要三个或以上的 同样的操作 多个 三就是多&#xff0c;事不过三&#xff0c;三人成虎&#xff0c;三人行必有我师焉 也就是多个操作 2. 必…

如何在 Python 和 Pandas 中使用正则表达式

什么是正则表达式 Regex 代表Regular Expression&#xff0c;是一种用于在文本中搜索模式的表达式。简而言之&#xff0c;它将匹配与模式对应的每个单词或单词组。在 Python 中&#xff0c;您可以使用正则表达式来搜索单词、替换单词、匹配一个单词或一组单词。基本上所有事情…