网络编程
位置:首页>> 网络编程>> Python编程>> Python+Pygame实战之泡泡游戏的实现

Python+Pygame实战之泡泡游戏的实现

作者:顾木子吖  发布时间:2023-05-19 15:40:58 

标签:Python,Pygame,游戏

导语

泡泡王国 欢乐多多

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

当泡泡漫天飞舞时,大朋友、小朋友都会情不自禁地被它吸引。而当珍珠般的泡泡遇上可爱的程序员门时,又会出现什么样的美丽风景呢?

说到4399小游戏,没有人会陌生吧?我小时候经常趁着家长不在家的时候偷偷打开电脑打开小游戏的网页,在电脑桌前一坐就是一下午,真的不能赖我不适可而止,而是这些游戏真的太好

玩了!关于童年的经典游戏and有关泡泡的,之前已经仿写了一款童年《泡泡龙》游戏!

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

今天续写另一个版本的泡泡故事叭

一、环境安装

1)素材(图片) 

Python+Pygame实战之泡泡游戏的实现

嘻嘻很久没写游戏了,先写个简单的大家润润喉~

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)随机截图一

Python+Pygame实战之泡泡游戏的实现

2)随机截图二

Python+Pygame实战之泡泡游戏的实现

3)撞击结束

Python+Pygame实战之泡泡游戏的实现

来源:https://blog.csdn.net/weixin_55822277/article/details/125670634

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com