diff --git a/filedata.py b/filedata.py new file mode 100644 index 0000000..0f77dfd --- /dev/null +++ b/filedata.py @@ -0,0 +1,160 @@ +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.bottom0: + self.rect.centerx-=self.speed + if self.moveRight and self.rect.right3: + 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=850 +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()