Python+Pygame实战:复刻经典泡泡龙游戏

阿澈
阿澈
发布时间:2026-10-16| 5人浏览过
原创

本文详细介绍如何使用Python和Pygame模块开发一款经典的泡泡龙游戏。内容涵盖从环境搭建、素材准备到核心代码实现及运行效果展示的全过程。通过解析按键控制、碰撞检测及游戏循环逻辑,帮助开发者快速掌握2D小游戏开发技巧,并获取完整源码参考。

导语

泡泡王国,欢乐无限。

咕噜噜,吹泡泡,七彩泡泡满天飘。大的好像彩气球,小的就像紫葡萄。

当漫天飞舞的泡泡映入眼帘,无论是大人还是孩子,都难以移开目光。而当这些如珍珠般晶莹剔透的泡泡与充满创意的程序员相遇时,又会碰撞出怎样的精彩火花呢?

提到4399小游戏,想必大家都不陌生。小时候,趁着家长不在家,偷偷打开电脑网页版游戏,在桌前一坐就是整个下午。这并非因为我们不知适可而止,而是这些游戏确实令人着迷。

关于童年经典游戏以及与泡泡相关的主题,此前我们已经仿写了一款经典的《泡泡龙》游戏!

Pygame实战:风靡全球的经典泡泡龙小游戏来袭

今天,让我们继续续写另一个版本的泡泡故事。

一、环境安装

1)素材(图片)

许久未编写游戏代码,先从一个简单的示例开始,为大家润润喉。

2)运行环境

小编使用的开发环境为Python3、Pycharm社区版以及Pygame模块。部分自带模块此处不再一一展示。

模块安装命令:pip install -i https://pypi.douban.com/simple/+模块名

二、代码展示

import pygame,random,os
from pygame.locals import *
from pygame.sprite import Sprite,Group,spritecollide
def load_image(name):
    fullname=os.path.join(os.path.join(os.path.split(os.path.abspath(__file__))[0],"filedata"),name)
    image=pygame.image.load(fullname)
    return image
class Surface:
    def __init__(self,screen):
        self.screen=screen
        self.screenrect=self.screen.get_rect()
        self.surfacetype=1
        self.image=load_image("surface"+str(self.surfacetype)+".png")
        self.rect=self.image.get_rect()
        self.rect.center=self.screenrect.center
        self.speed=3.5
        self.moveUp=False
        self.moveDown=False
        self.moveLeft=False
        self.moveRight=False
    def update(self):
        if self.moveUp and self.rect.top>0:
            self.rect.centery-=self.speed
        if self.moveDown and self.rect.bottom<HEIGHT:
            self.rect.centery+=self.speed
        if self.moveLeft and self.rect.left>0:
            self.rect.centerx-=self.speed
        if self.moveRight and self.rect.right<WIDTH:
            self.rect.centerx+=self.speed
    def blit(self):
        self.screen.blit(self.image,self.rect)
    def addtype(self):
        self.surfacetype+=1
        if self.surfacetype>3:
            self.surfacetype=1
        self.image=load_image("surface"+str(self.surfacetype)+".png")
class Trap(Sprite):
    def __init__(self,screen,traptyper):
        super(Trap,self).__init__()
        self.screen=screen
        self.screenrect=self.screen.get_rect()
        self.traptype=traptyper
        self.image=load_image("trap"+str(self.traptype)+".png")
        self.rect=self.image.get_rect()
        self.rectat=random.choice(["top","left","right","bottom"])
        self.__updatespeed()
    def __updatespeed(self):
        self.xspeed=round(random.uniform(1,3),2)
        self.yspeed=round(random.uniform(1,3),2)
        if self.rectat=="top":
            self.rect.center=(random.randint(0,WIDTH),0)
        elif self.rectat=="bottom":
            self.rect.center=(random.randint(0,WIDTH),HEIGHT)
            self.yspeed=-self.yspeed
        elif self.rectat=="left":
            self.xspeed=-self.xspeed
            self.rect.center=(0,random.randint(0,HEIGHT))
        elif self.rectat=="right":
            self.rect.center=(WIDTH,random.randint(0,HEIGHT))
    def update(self):
        global traptype
        self.traptype=traptype
        self.image=load_image("trap"+str(self.traptype)+".png")
        self.rect.centerx+=self.xspeed
        self.rect.centery+=self.yspeed
        if self.rect.top>self.screenrect.height or self.rect.bottom<0:
            self.kill()
        elif self.rect.left>self.screenrect.width or self.rect.right<0:
            self.kill()
WIDTH=1200
HEIGHT=650
traptype=1
def initmain():
    global traptype
    traptype=1
    pygame.init()
    screen=pygame.display.set_mode((WIDTH,HEIGHT))
    pygame.display.set_caption("泡泡王国")
    bgcolorlist=((0,255,255),(255,128,0),(128,0,255))
    colortype=0
    bgcolor=bgcolorlist[colortype]
    rates=0
    gamestart=True
    fpstime=pygame.time.Clock()
    fps=100
    gameFont=pygame.font.SysFont("黑体",26,True)
    surface=Surface(screen)
    traps=Group()    
    while gamestart:
        fpstime.tick(fps)
        screen.fill(bgcolor)
        surface.blit()
        rates+=1
        if rates%20==0:
            newtrap=Trap(screen,traptype)
            traps.add(newtrap)
        if rates%1000==0 and rates!=0:
            colortype+=1
            traptype+=1
            if colortype>2:
                colortype=0
            if traptype>3:
                traptype=1
            bgcolor=bgcolorlist[colortype]
            surface.addtype()
        if spritecollide(surface,traps,True):
            screen.fill(bgcolor)
            gamestart=False
            break
        screen.blit(gameFont.render("Score: "+str(rates),True,(0,0,0)),(2,2))
        surface.update()
        traps.update()
        traps.draw(screen)
        for event in pygame.event.get():
            if event.type==QUIT:
                gamestart=False
            elif event.type==KEYDOWN:
                if event.key==K_RIGHT:
                    surface.moveRight=True
                elif event.key==K_LEFT:
                    surface.moveLeft=True
                elif event.key==K_UP:
                    surface.moveUp=True
                elif event.key==K_DOWN:
                    surface.moveDown=True
                elif event.key==K_SPACE:
                    surface.speed=4.5
            elif event.type==KEYUP:
                if event.key==K_RIGHT:
                    surface.moveRight=False
                elif event.key==K_LEFT:
                    surface.moveLeft=False
                elif event.key==K_UP:
                    surface.moveUp=False
                elif event.key==K_DOWN:
                    surface.moveDown=False
                elif event.key==K_SPACE:
                    surface.speed=3.5
        pygame.display.flip()
    screen.fill(bgcolor)
    screen.blit(gameFont.render("Score: "+str(rates//30),True,(0,0,0)),(2,2))
    screen.blit(gameFont.render("Press enter to retry ; Press ESC to exit",True,(0,0,0)),(6,32))
    screen.blit(gameFont.render("Rules:",True,(0,0,0)),(6,82))
    screen.blit(gameFont.render("Press the arrow keys to control the bubbles to avoid touching the stinging ball and press the space bar to speed up.",
                                True,(0,0,0)),(66,112))
    pygame.display.flip()
    while True:
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                __import__("sys").exit()
            elif event.type==KEYDOWN:
                if event.key==K_RETURN:
                    pygame.quit()
                    initmain()
                elif event.key==K_ESCAPE:
                    pygame.quit()
                    __import__("sys").exit()
if __name__=="__main__":
    initmain()

三、效果展示

游戏规则:按Enter键开始游戏,ESC键退出游戏,通过上下左右方向键控制泡泡移动,需躲避随机出现的陨石。

哦!躲避的时间越长,分数越高!勇士们,开始你们的挑战吧!

1)随机截图一

2)随机截图二

3)撞击结束

以上就是Python+Pygame实战之泡泡游戏的实现的详细内容,更多关于Python Pygame泡泡游戏的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。