python实现小游戏——植物大战僵尸(魔改版本)

news2024/9/21 19:04:15

制作一款DIY的‘植物大战僵尸’游戏引起了很多人的兴趣。在这里,我将分享一个使用Python语言在PyCharm环境中开发的初始状态版本。这个版本主要应用了pygame库来完成,是一个充满创意和趣味的魔改版本。

文章目录

  • 前言
  • 一、开发环境准备
  • 二、代码
    • 1.main方法
    • 2.敌人角色(示例)
    • 2.我方角色(示例)
  • 总结


前言

近期,《植物大战僵尸杂交版》的热度确实高涨,这主要得益于其独特的创意、对经典游戏的致敬与创新,以及玩家社区的积极反馈与传播。《植物大战僵尸杂交版》由B站UP主“潜艇伟伟迷”开发制作,游戏中引入了杂交植物的概念,如豌豆向日葵、火焰花女王等,这些杂交植物结合了多种植物的特性,拥有独特的攻击方式和能力,极大地丰富了游戏的策略性和可玩性。除了杂交植物外,游戏中还加入了多种新奇的僵尸类型,如武装舞王僵尸、冰车巨人等,以及全新的地图设计,为玩家带来更加刺激和挑战性的游戏体验。游戏不仅保留了原版的经典模式,还增加了抽奖盒子无尽模式等Roguelike玩法,以及多种有趣的小游戏和挑战模式,让玩家在重复游玩中也能保持新鲜感。

制作一款DIY的‘植物大战僵尸’游戏引起了很多人的兴趣。在这里,我将分享一个使用Python语言在PyCharm环境中开发的初始状态版本。这个版本主要应用了pygame库来完成,是一个充满创意和趣味的魔改版本。
在这里插入图片描述

在这篇博文我将源代码以及运行程序压缩包: 运行程序
(解压后可直接运行)一并分享出来,并给出源码链接: 源码供免费下载。
里面的所有角色图片来自网络资源都来自于网络资源,由本人一张一张裁剪制作而成,制作不易,希望喜欢并使用的小伙伴可以为我点一个star。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、开发环境准备

实现上述描述的DIY“植物大战僵尸”游戏,你需要准备以下代码环境:
1.Python语言:
确保你的计算机上安装了Python。可以从Python的官方网站下载并安装最新版本的Python。
2.PyCharm IDE:
PyCharm是一个流行的Python集成开发环境(IDE),它提供了代码编辑、调试、测试等功能。你可以从JetBrains的官方网站下载并安装PyCharm。
3.pygame库:
pygame是一个用于创建游戏的Python库,它提供了图形、声音、事件处理等游戏开发所需的功能。你可以使用pip命令来安装pygame库:pip install pygame。

二、代码

1.main方法

代码如下:

# -*- codeing = utf-8 -*-
# @Time : 2023/1/14 15:59
# @Author : 小马
# @File: plant_vs_zoomie_game_normal_main.py
# @Software : PyCharm
import time
import pygame
import random
import os
from Adc import Adc
from shooter import shoot
from Ap import Ap
from tank import tank
from Sun import Sun
from Zombie import Zombie
from badmanmini import badmanmini
from Bullet import Bullet
from bulletshooter import bulletshooter
from enemy import enemy
from Carman import Carman
from Boss import Boss
from pythonExtend import pythonExtend
pygame.init()
#1680*720
backgd_size=(1200,600)
screen=pygame.display.set_mode(backgd_size)
pygame.display.set_caption('保卫花花之家')
bg_image_path= 'material/bg1.1.png'
bg_img_obj=pygame.image.load(bg_image_path).convert_alpha()
# sunbank_image_path= 'material/counter2.jpeg'
# sunbank_img_obj=pygame.image.load(sunbank_image_path).convert_alpha()
sunbankImg=pygame.image.load('material/cardbank.png').convert_alpha()
deleteImg=pygame.image.load('material/delete1.png').convert_alpha()
delete=pygame.image.load('material/delete.png').convert_alpha()
cardadc=pygame.image.load('material/cardadc.png').convert_alpha()
cardap=pygame.image.load('material/cardap.png').convert_alpha()
cardtank=pygame.image.load('material/cardtank.png').convert_alpha()
cardshooter=pygame.image.load('material/cardshooter.png').convert_alpha()
apImg=pygame.image.load('material/character3.1.PNG').convert_alpha()
tankImg=pygame.image.load('material/character4.1.PNG').convert_alpha()
adcImg=pygame.image.load('material/character1.1.1.PNG').convert_alpha()
shooterImg=pygame.image.load('material/character2.1.PNG').convert_alpha()
text='900'
sun_font=pygame.font.SysFont('arial',25)
sun_num_surface=sun_font.render(text,True,(0,0,0))
# adc=Adc()
# ap=Ap()
# tank=tank()
#shoot=shoot()
# zombie=Zombie()
# badman=badmanmini()
# enemy=enemy()
spriteGroup=pygame.sprite.Group()
#spriteGroup.add(adc)
# spriteGroup.add(ap)
# spriteGroup.add(tank)
#spriteGroup.add(shoot)
# spriteGroup.add(zombie)
# spriteGroup.add(badman)
# spriteGroup.add(enemy)
sunList=pygame.sprite.Group()
bulletList=pygame.sprite.Group()
enemyList=pygame.sprite.Group()
clock=pygame.time.Clock()
GEN_SUN_EVENT=pygame.USEREVENT+1
pygame.time.set_timer(GEN_SUN_EVENT,1000)
GEN_BULLET_EVENT=pygame.USEREVENT+2
pygame.time.set_timer(GEN_BULLET_EVENT,3000)
GEN_ENERMY_EVENT=pygame.USEREVENT+3
pygame.time.set_timer(GEN_ENERMY_EVENT,9000)
choose=0 #点中太阳花为1 点中坚果为2 点中射手为3 点中ADC为4
def init():
 pygame.mixer.init()
 s='material/sound'
 bgm=pygame.mixer.Sound(os.path.join(s,'bgm1.mp3'))
 start=pygame.mixer.Sound(os.path.join(s,'start1.mp3'))
 start2=pygame.mixer.Sound(os.path.join(s,'start2.mp3'))
 bossbgm=pygame.mixer.Sound(os.path.join(s,'boss.mp3'))
 tank1=pygame.mixer.Sound(os.path.join(s,'tank.mp3'))
 pygame.mixer.Sound.play(start)
 pygame.mixer.Sound.play(start2)
 sounds=[]
 global text,choose
 global sun_num_surface
 running =True
 index=0
 while running:
    # sounds.append(bgm)
    # for sound in sounds:
    #  pygame.mixer.Sound.play(sound)
    pygame.mixer.Sound.play(bgm)
    clock.tick(10)
    # if index % 40==0:
    #     s=Sun(ap.rect)
    #     sunList.add(s)
    # if index % 40==0:
        # boss = Boss()
        # spriteGroup.add(boss)
        # for i in range(1,5):
        #     j = random.randint(1, 3)
        #     if j==1:
        #         zombie = Zombie()
        #         badman = badmanmini()
        #         ene = enemy()
        #         spriteGroup.add(zombie)
        #         spriteGroup.add(badman)
        #         spriteGroup.add(ene)
        #     elif j==2:
        #         badman = badmanmini()
        #         e = enemy()
        #
        #         spriteGroup.add(badman)
        #         spriteGroup.add(e)
        #     elif j==3:
        #         en = enemy()
        #         carman=Carman()
        #
        #         spriteGroup.add(en)
        #         spriteGroup.add(carman)
    # if index %80==0:
    #     b=Bullet(adc.rect,backgd_size)
    #     spriteGroup.add(b)
    # if index %30==0:
    #     d=bulletshooter(shoot.rect,backgd_size)
    #     spriteGroup.add(d)
    for bullet in bulletList:
        for enem in enemyList:
            if pygame.sprite.collide_mask(bullet,enem):
                bulletList.remove(bullet)
                enem.blood-=1
    for item in spriteGroup:
        for enem in enemyList:
            if  isinstance(item,tank) and pygame.sprite.collide_mask(item,enem):
                enem.blood-=1
                item.blood-=1
    screen.blit(bg_img_obj,(0,0))
    screen.blit(sunbankImg,(320,-12))
    screen.blit(sun_num_surface,(350,57))
    screen.blit(cardap,(415,3))
    screen.blit(cardadc, (491,3))
    screen.blit(cardshooter, (567,3))
    screen.blit(cardtank, (643,3))
    screen.blit(deleteImg, (719, 3))
    spriteGroup.update(index)
    spriteGroup.draw(screen)
    sunList.update(index)
    sunList.draw(screen)
    bulletList.update(index)
    bulletList.draw(screen)
    enemyList.update(index)
    enemyList.draw(screen)
    (x,y)=pygame.mouse.get_pos()
    if choose==1:
        right=apImg.get_rect().right
        bottom=apImg.get_rect().bottom
        screen.blit(apImg,(x-right/2,y-bottom/2))
    elif choose==4:
        right = apImg.get_rect().right
        bottom = apImg.get_rect().bottom
        screen.blit(tankImg,(x-right/2,y-bottom/2))
    elif choose==2:
        right = apImg.get_rect().right
        bottom = apImg.get_rect().bottom
        screen.blit(adcImg,(x-right/2,y-bottom/2))
    elif choose == 3:
        right = apImg.get_rect().right
        bottom = apImg.get_rect().bottom
        screen.blit(shooterImg, (x-right/2,y-bottom/2))
    elif choose==5:
        right = apImg.get_rect().right
        bottom = apImg.get_rect().bottom
        screen.blit(delete,(x-right/2,y-bottom/2))
    # screen.blit(adc.images[index%8],adc.rect)
    # screen.blit(shoot.images[index%31],shoot.rect)
    # screen.blit(ap.images[index % 26], ap.rect)
    # screen.blit(tank.images[index % 31], tank.rect)
    # for sun in sunList:
    #     screen.blit(sun.images[index % 1], sun.rect)
    index+=1
    for event in pygame.event.get():
        if event.type==GEN_SUN_EVENT:
            for sprite in spriteGroup:
                if isinstance(sprite,Ap):
                    now=time.time()
                    if now-sprite.lasttime>=5:
                        s = Sun(sprite.rect)
                        sunList.add(s)
                        sprite.lasttime=now
        if event.type==GEN_BULLET_EVENT:
            for sprite in spriteGroup:
                if isinstance(sprite,Adc):
                    now=time.time()
                    if now-sprite.lasttime>=5:
                       b=Bullet(sprite.rect,backgd_size)
                       bulletList.add(b)
                       sprite.lasttime=now
                elif isinstance(sprite,shoot):
                    bs=bulletshooter(sprite.rect,backgd_size)
                    bulletList.add(bs)
        if event.type==GEN_ENERMY_EVENT:
            boss = Boss()
            enemyList.add(boss)
            for i in range(1, 5):
                j = random.randint(1, 3)
                if j == 1:
                    zombie = Zombie()
                    badman = badmanmini()
                    ene = enemy()
                    enemyList.add(zombie)
                    enemyList.add(badman)
                    enemyList.add(ene)
                elif j == 2:
                    badman = badmanmini()
                    e = enemy()
                    enemyList.add(badman)
                    enemyList.add(e)
                elif j == 3:
                    en = enemy()
                    carman = Carman()
                    pythonextend=pythonExtend()
                    enemyList.add(en)
                    enemyList.add(carman)
                    enemyList.add(pythonextend)
        if event.type==pygame.QUIT:
               running=False
        if event.type==pygame.MOUSEBUTTONDOWN:
            pressed_point=pygame.mouse.get_pressed()
            if pressed_point[0]==1:
                position=pygame.mouse.get_pos()
                x,y=position
                print(position)
                if 415<x<486 and 3<y<84 and int (text)>=50:
                    choose=1
                elif 491<x<562 and 3<y<84 and int (text)>=100:
                    choose=2
                elif 567<x<638 and 3<y<84 and int (text)>=100:
                    choose=3
                elif 643<x<714 and 3<y<84 and int (text)>=50:
                    choose=4
                elif  719<x<771 and 3<y<83:
                    choose=5
                elif 425<x<1200 and 100<y<600:
                    if choose==1:
                        current_time=time.time()
                        ap=Ap(current_time)
                        i=425
                        while(i<=1200):
                            if i<=x<=i+85:
                                ap.rect.left=i
                                break
                            i=i+85
                        j=100
                        while(j<=600):
                            if j<=y<=j+100:
                                ap.rect.top=j
                                break
                            j=j+100

                        #=positiony
                        #=positionx
                        spriteGroup.add(ap)
                        choose=0
                        text = str(int(text) - 50)
                        sun_font = pygame.font.SysFont('arial', 25)
                        sun_num_surface = sun_font.render(text, True, (0, 0, 0))
                        # text=int(text)
                        # text-=50
                        # text=str(text)
                        # myfont=pygame.font.SysFont('arial',20)
                        # txtImg= myfont.render(str(text),True,(0,0,0))
                    elif choose==4:
                        # pygame.mixer.init()
                        # s = 'material/sound'
                        # bgm = pygame.mixer.Sound('material/sound/tank.mp3')
                        # bgm.play()
                        t = tank()
                        i = 425
                        while (i <= 1200):
                            if i <= x <= i + 85:
                                t.rect.left = i
                                break
                            i = i + 85
                        j = 100
                        while (j <= 600):
                            if j <= y <= j + 100:
                                t.rect.top = j
                                break
                            j = j + 100
                        # =positiony
                        # =positionx
                        spriteGroup.add(t)
                        # pygame.mixer.Sound.play(tank1)
                        choose = 0
                        text = str(int(text) - 50)
                        sun_font = pygame.font.SysFont('arial', 25)
                        sun_num_surface = sun_font.render(text, True, (0, 0, 0))
                    elif choose==2:
                        current_time = time.time()
                        adc = Adc(current_time)
                        i = 425
                        while (i <= 1200):
                            if i <= x <= i + 85:
                                adc.rect.left = i
                                break
                            i = i + 85
                        j = 100
                        while (j <= 600):
                            if j <= y <= j + 100:
                                adc.rect.top = j
                                break
                            j = j + 100
                        # =positiony
                        # =positionx
                        spriteGroup.add(adc)
                        choose = 0
                        text = str(int(text) - 50)
                        sun_font = pygame.font.SysFont('arial', 25)
                        sun_num_surface = sun_font.render(text, True, (0, 0, 0))
                    elif choose==3:
                        sh=shoot()
                        i = 400
                        while (i <= 1175):
                            if i <= x <= i + 85:
                                sh.rect.left = i
                                break
                            i = i + 85
                        j = 80
                        while (j <= 580):
                            if j <= y <= j + 100:
                                sh.rect.top = j
                                break
                            j = j + 100
                        # =positiony
                        # =positionx
                        spriteGroup.add(sh)
                        # pygame.mixer.Sound.play(tank1)
                        choose = 0
                        text = str(int(text) - 50)
                        sun_font = pygame.font.SysFont('arial', 25)
                        sun_num_surface = sun_font.render(text, True, (0, 0, 0))

                    elif choose==5:
                        for sprite in spriteGroup:
                            if sprite.rect.left<x<sprite.rect.right and sprite.rect.top<y<sprite.rect.bottom:
                                spriteGroup.remove(sprite)
                                choose=0
                            else:
                                choose=0
                for sun in sunList:
                    if sun.rect.collidepoint(position):
                        sunList.remove(sun)
                        text=str(int(text)+50)
                        sun_font = pygame.font.SysFont('arial', 25)
                        sun_num_surface = sun_font.render(text, True, (0, 0, 0))
    pygame.display.update()

if __name__=="__main__":
    init()


在这里插入图片描述
在Pygame库中,clock.tick(10)是一个用来控制游戏循环帧率的函数。这里的clock是pygame.time.Clock()的一个实例,而tick()方法则是用来设定游戏循环的最大帧率。具体来说,clock.tick(10)意味着你希望游戏循环每秒最多执行10次。这实际上是在说,你希望游戏的帧率被限制在每秒10帧。然而,需要注意的是,如果游戏的某些部分(如图形渲染或物理计算)执行得比预期更慢,那么实际的帧率可能会低于这个设定的上限。clock.tick()方法还会返回一个表示自上次调用以来经过的毫秒数的值。这个返回值可以用来测量游戏循环中不同部分的执行时间,从而进行性能分析或优化。 pygame.sprite 是 Pygame 库中的一个模块,它提供了处理游戏中精灵(Sprite)的便捷方式。精灵是游戏中的一个对象,通常代表了一个角色、物体或任何其他可见的游戏元素。使用 pygame.sprite 模块,你可以轻松地管理精灵的集合,包括它们的渲染、更新和碰撞检测等。

在main方法通过动画的原理:当快速连续地展示一系列静态图像时,由于人眼的视觉暂留效应,这些图像会在大脑中形成连续运动的错觉,从而产生了动画的效果。
在这里主要实现了以下几个功能:
1.创建背景图,选项卡
2.启动背景音乐
3.创建敌人角色
4.鼠标拖动选项卡到指定位置,创建我方人物
5.生产阳光,发射子弹
6.碰撞检测
7.角色消失

2.敌人角色(示例)

代码如下(示例):

# -*- codeing = utf-8 -*-
# @Time : 2023/2/14 16:00
# @Author : 小马
# @File: Zombie.py
# @Software : PyCharm
import pygame.sprite
import random

class Zombie(pygame.sprite.Sprite):
    def __init__(self):
        super(Zombie,self).__init__()
        self.image=pygame.image.load('material/badman1.1.PNG').convert_alpha()
        self.images=[pygame.image.load('material/badman1.{:d}.png'.format(i)).convert_alpha() for i in range(1,6)]
        self.rect = self.images[0].get_rect()
        t = random.randint(1, 5)
        self.rect.top = t * 100

        self.speed = 6
        self.rect.left = 1200
        self.blood=1


    def update(self, *args):
      if self.blood>0:
        self.image=self.images[args[0]%len(self.images)]

        if self.rect.left<600:
            self.kill()
        else:
            self.rect.left -= self.speed
      else :
          self.kill()


在这里插入图片描述
这段代码定义了一个名为Zombie的类,它继承自pygame.sprite.Sprite。Zombie类代表了一个游戏中的僵尸角色,包含了僵尸的图像、位置、速度以及生命值等属性。

以下是Zombie类的主要组成部分:

初始化方法 (init):
调用父类的初始化方法。
加载僵尸的图像,并将其转换为包含alpha通道的图像(即支持透明度的图像)。
创建一个图像列表,包含僵尸的不同动作或帧的图像。
设置僵尸的初始位置(self.rect)和速度(self.speed)。
初始化僵尸的生命值(self.blood)。
更新方法 (update):
检查僵尸的生命值,如果生命值大于0,则继续更新僵尸的状态。
根据传入的参数(args[0])更新僵尸的图像,以实现动画效果。
如果僵尸的rect.left属性小于600,表示僵尸已经走出了屏幕范围,此时调用self.kill()方法将僵尸从精灵组中移除。
如果僵尸的生命值不大于0,也调用self.kill()方法将僵尸移除。
这个类可以用于创建一个或多个僵尸实例,并将它们添加到一个pygame.sprite.Group中,以便在游戏循环中更新和渲染它们。通过调用update方法,可以更新僵尸的位置和动画帧,而kill方法则用于在僵尸死亡或走出屏幕时将其从游戏中移除。


2.我方角色(示例)

# -*- codeing = utf-8 -*-
# @Time : 2022/12/21 20:44
# @Author : 小马
# @File: Adc.py
# @Software : PyCharm
import pygame
class Adc(pygame.sprite.Sprite):
    def __init__(self,lasttime):
        super(Adc,self).__init__()
        self.image=pygame.image.load('material/character1.1.1.PNG').convert_alpha()
        self.images=[pygame.image.load('material/character1.1.{:d}.PNG'.format(i)).convert_alpha() for i in range(1,9)]
        self.rect=self.images[0].get_rect()
        self.rect.top=120
        self.rect.left=480
        self.lasttime=lasttime
    def update(self,*args):
        if args[0]%6==0:
            i=int(args[0]/8)
            self.image=self.images[i%len(self.images)]

在这里插入图片描述
在这里插入图片描述
这段代码定义了一个名为Adc的类,它继承自pygame.sprite.Sprite。Adc类代表了一个游戏中的角色,具体来说是射手(ADC)角色,包含了角色的图像、位置以及一个用于追踪时间的属性。

以下是Adc类的主要组成部分:

初始化方法 (init):
调用父类的初始化方法。
加载角色的初始图像,并将其转换为包含alpha通道的图像(即支持透明度的图像)。
创建一个图像列表,包含角色的不同动作或帧的图像。
设置角色的初始位置(self.rect)。
初始化self.lasttime属性,这个属性可能用于追踪上一次更新角色状态的时间。
更新方法 (update):
这个方法接收一个参数args,它是一个元组,其中args[0]可能代表游戏循环的当前帧或时间。
如果args[0]除以6的余数为0,说明满足一定的时间间隔条件,此时更新角色的图像。
通过计算i = int(args[0]/8)来确定应该使用图像列表中的哪一张图像,并使用i%len(self.images)来确保索引不会超出图像列表的范围。
这个类可以用于创建一个Adc实例,并将它添加到一个pygame.sprite.Group中,以便在游戏循环中更新和渲染它。通过调用update方法,可以根据游戏循环的当前帧或时间来更新角色的图像,从而实现动画效果。

总结

这款植物大战僵尸的魔改版本还有些许问题待处理(没有设置游戏的结束,游戏的平衡有待提高),总共设定了四个我方游戏角色:
1.能够产生阳光的AP
2.两个可以发射子弹的ADC
3.一个近距离攻击的tank
设定了6个敌人大小不一的敌人角色,选取了较为史诗宏壮的背景音乐,视觉和听觉效果拉满,可以用来作为自己的课程设计或者兴趣爱好。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整个作品的图片都是我个人裁剪制作而成,有喜欢的小伙伴希望在下载使用的时候给我点一个star

在这里插入图片描述
在这里插入图片描述

代码链接
链接:https://pan.baidu.com/s/1dhxHiE_CJJmg2ytUO4TW0Q?pwd=yyv6
提取码:yyv6

运行程序链接:
https://gitee.com/majunlong1/Plants_vs_zooms_game

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

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

相关文章

Unbuntu 服务器- Anaconda安装激活 + GPU配置

一、Anaconda安装激活 1.更新 sudo apt-get update 2.安装wget、vim sudo apt-get install wget sudo apt-get install vim 3.安装Anaconda 进入这个网址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 点这里&#x…

【每日一题】【技巧】【LeetCode热题 100】【力扣】75. 颜色分类 C++

力扣75. 颜色分类 75. 颜色分类 题目描述 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 …

永久旋转 PDF 文件的 2 种简便方法

PDF 文件通常由扫描仪创建&#xff0c;用于呈现文档或书籍。当您输出 PDF 作品时&#xff0c;打开它&#xff0c;会发现有几页是颠倒的。 你该怎么办&#xff1f; 将这些页面倒置扫描&#xff0c;按顺序排列&#xff0c;最后创建正确的 PDF 文件&#xff1f; 当然&#xff0…

暑假第三周任务——天气预报

暑假第三周任务——天气预报 文章目录 暑假第三周任务——天气预报前言URL与APIAPI与URL的关系 获取网络请求首页搜索界面详情界面添加功能 浏览界面总结 前言 这个天气预报主要是通过申请网络请求来获取实时数据&#xff0c;来实现一个天气预报的功能&#xff0c;在这里主要是…

对优先级队列(堆)的理解

目录&#xff1a; 一. 优先级队列&#xff1a; 二. 优先级队列的模拟实现&#xff1a; 三.常用接口介绍: 一. 优先级队列&#xff1a; 1 概念&#xff1a; 队列是一种先进先出的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时…

红酒与爱情:浪漫时刻的佳酿

在爱情的世界里&#xff0c;红酒如同一首温柔的诗篇&#xff0c;轻轻诉说着浪漫与甜蜜。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与爱情相遇&#xff0c;它们共同绘制出一幅幅令人心醉的浪漫画卷&#xff0c;让每一刻都充满了无尽的柔情与温暖。 一、爱…

MLOPS工具集教程-快速入门MLflow

文章目录 一、什么是 MLOps&#xff1f;二、MLOps 工具有什么作用&#xff1f;三、免费开源 MLOps 工具和平台——MLflow3.1 MLflow介绍3.2 安装MLflow3.3启动MLflow3.4 API文档3.5 训练模型演示实例 MLOps 策略越来越多地应用于机器学习模型以及构建这些模型的团队中&#xff…

webpack打包发布~

1、安装webpack&#xff08;局部安装webpack&#xff09;。 npm i webpack webpack-cli -D 2、安装成功之后&#xff0c;你会在package.json文件中看到这个。 3、新建webpack.config.js文件&#xff0c;里面写配置编译模式&#xff0c;入口出口等&#xff08;这里演示的是单入…

任务管理器中的CompatTelRunner进程是做什么的?我该怎样把它关闭

一、问题描述 当我们打开电脑使用时候会发现系统反应较慢&#xff0c;使用起来没有那么流畅&#xff1b;此时我们打开任务管理器后发现是一个名为【CompatTelRunner】的进程占用大量的CPU资源导致&#xff08;点击任务管理器的CPU字样即可对使用资源进行排序&#xff09;&#…

【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)

SQL注入攻击是一种针对Web应用程序的安全漏洞&#xff0c;那么自然&#xff0c;SQL注入攻击也和前端页面息息相关&#xff0c;用户输入未被正确处理、动态查询的构建、前端JavaScript代码错误&#xff0c;等等我问题都可能造成安全威胁。 在上一节&#xff0c;我们了解了基础的…

23届24届均可投!Engineering Star Program火热进行中

Hi 大家好&#xff0c;我是Chowley&#xff0c;我们组现在还有个青年工程师的HC&#xff08;23-24届均可&#xff09;&#xff0c;正在寻找QA队友&#xff0c;有兴趣用我内推码官网投递&#xff0c;简历直接发我ld 我是今年校招进入的虾皮&#xff0c;现在full-time两个月了&a…

互联网十万个为什么之什么是负载均衡?

负载均衡是一种对流量进行按需分发的服务&#xff0c;通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力&#xff0c;并且可以消除系统中的单点故障&#xff0c;提升应用系统的可用性。 为什么需要负载均衡&#xff1f; 负载均衡的出现主要是为了解决用户在网络服务…

【Godot4自学手册】第四十三用着色器(shader)给纹理描边

这一节我们学一下用着色器&#xff08;shader&#xff09;描边效果。来看看最终效果&#xff1a; 一、进行shader初始设置 首先我们进入NPC场景&#xff0c;选择Sprite2D节点&#xff0c;在检查器中中岛CanvasItem属性&#xff0c;并在Material->Material后方选择下拉按钮…

如何从智联招聘网站快速抓取职位详情?两大技巧揭秘

摘要&#xff1a; 本文将揭秘如何利用Python爬虫技术&#xff0c;高效且合法地从智联招聘网站抓取职位详情信息。通过实战示例&#xff0c;展现两大核心技巧&#xff0c;助你在大数据时代抢占先机&#xff0c;为你的市场分析、人才研究提供强大支持。 一、引言&#xff1a;数据…

LLM4Decompile反编译大模型的试用实践过程梳理

LLM4Decompile 是一款开源大型语言模型,专注于反编译工作,我们将其试用过程进行介绍: 论文地址:https://arxiv.org/abs/2403.05286 代码地址:https://github.com/albertan017/LLM4Decompile 首先,找到代码位置: 1.搭建基础环境1.python3,我用的是3.12.4 …

LinuxC++(7):认识主函数参数

主函数有哪些参数&#xff1f; main函数有三个参数&#xff0c;argc、argv和envp&#xff0c;它的标准写法如下&#xff1a; int main(int argc,char *argv[],char *envp[]){return 0; } 认识argc argc表示有几个参数&#xff0c;主函数自身也算一个&#xff0c;所以如果没…

解锁概念测量类比完成任务如何改变词语表征

欢迎来到雲闪世界。本文旨在讨论 word2vec 和 GloVe 算法的发展&#xff0c;因为这与这些算法的第二个应用目的有关&#xff1a;分析文本语料库中包含的概念。首先&#xff0c;根据 word2vec 算法的历史背景对其进行讨论。然后&#xff0c;描述类比完成任务&#xff0c;该任务突…

【C语言篇】操作符详解(上篇)

文章目录 操作符详解&#xff08;上篇&#xff09;前言sizeof强制类型转换算术操作符赋值操作符逻辑操作符逻辑取反运算符逻辑与运算符逻辑或运算符 关系操作符自增自减操作符和-逗号表达式 操作符详解&#xff08;上篇&#xff09; 前言 操作符又被叫做运算符&#xff0c;是不…

深度学习中降维的几种方法

笔者在搞网络的时候碰到个问题&#xff0c;就是将特征维度从1024降维到268&#xff0c;那么可以通过哪些深度学习方法来实现呢&#xff1f; 文章目录 1. 卷积层降维2. 全连接层降维3. 使用注意力机制4. 使用自编码器 1. 卷积层降维 可以使用1x1卷积层&#xff08;也叫pointwis…

AI新闻:近期AI领域最繁忙的一周!

本周AI领域发生了许多令人瞩目的大事&#xff0c;可以说是繁忙的一周了。下面我将为大家一一盘点这些精彩瞬间。 OpenAI的新功能和发展 高级语音功能&#xff1a;OpenAI开始推出全新的高级语音功能&#xff0c;之前展示时声音如同斯嘉丽约翰逊。这项功能已经开放给部分用户使用…