"""命悬一线之通闯太空隧道.py 这是用pygame制作一个小游戏,操作一个小猫闯关,碰撞检测用的是mask""" import pygame from pygame.locals import * gamename = "《命悬一线之勇闯太空隧道》" pygame.init() pygame.mixer.init() screenWidth ,screenHeight=480,360 screen = pygame.display.set_mode((screenWidth,screenHeight)) pygame.display.set_caption(gamename + "_作者:李兴球_mask碰撞实例_风火轮少儿编程") failSound = pygame.mixer.Sound("Fail.wav") hurtSound = pygame.mixer.Sound("hurt.wav") succSound = pygame.mixer.Sound("小号胜利.wav") def playmusic(): pygame.mixer.music.load("TheAvengers.wav") pygame.mixer.music.play(-1,0) def start_shell(): """显示开始界面""" 封面图= pygame.image.load("封面设计《命悬一线》.png") running = True while running: for event in pygame.event.get(): if event.type==QUIT:pygame.quit() if event.type==KEYDOWN or event.type==MOUSEBUTTONDOWN:running = False screen.blit(封面图,(0,0)) pygame.display.update() class Ball(): def __init__(self,imageRight,imageLeft,x,y): self.color = color self.imageRight = imageRight # 向右造型 self.imageLeft = imageLeft # 向左造型 self.image = imageRight # 初始为向右的图 self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.xspeed = 0 self.yspeed = 0 self.delete = 0 self.mask = pygame.mask.from_surface(self.image) # 用于遮罩碰撞检测 self.lifes = 1 # 生命个数 def move(self,direction): if self.lifes>0: self.rect.move_ip(self.xspeed*direction,self.yspeed*direction) def draw(self): screen.blit(self.image,self.rect) def main(): # 以下字典用来描述每个关卡的出口,四元组分别表示上,下,左,右,值为0时,表时没有出口,值为1时,表示有出口. # 由于关卡号刚好从0,开始,所以用列表也可以. ed = {0:(0,0,0,1),1:(1,0,1,0),2:(0,1,0,1),3:(0,1,1,0),4:(1,0,0,0)} # 表示每关出口标志,上下左右 关卡号 = 0 背景1 = pygame.image.load("背景1.png").convert_alpha() 背景2 = pygame.image.load("背景2.png").convert_alpha() 背景3 = pygame.image.load("背景3.png").convert_alpha() 背景4 = pygame.image.load("背景4.png").convert_alpha() 背景5 = pygame.image.load("背景5.png").convert_alpha() 背景列表= [背景1,背景2,背景3,背景4,背景5] 背景mask = [pygame.mask.from_surface(背景) for 背景 in 背景列表] 小飞猫 = pygame.image.load("飞猫.png").convert_alpha() 小飞猫右 =pygame.transform.scale(小飞猫,(30,20)) 小飞猫左 =pygame.transform.flip(小飞猫右,True,False) ball = Ball(小飞猫右,小飞猫左,30,280) clock = pygame.time.Clock() running = True while running: for event in pygame.event.get(): if event.type == QUIT:pygame.quit() keys = pygame.key.get_pressed() if keys[K_RIGHT]:ball.xspeed = ball.xspeed + 0.1;ball.image = ball.imageRight if keys[K_LEFT]:ball.xspeed = ball.xspeed - 0.1;ball.image = ball.imageLeft if keys[K_DOWN]:ball.yspeed = ball.yspeed + 0.1 if keys[K_UP]:ball.yspeed = ball.yspeed - 0.1 pass ball.draw() pygame.display.update() clock.tick(60) # 停止背景音乐 pygame.mixer.music.stop() 笑脸图=pygame.image.load("笑脸.png") 哭脸图=pygame.image.load("哭脸.png") f = pygame.font.Font("C:/windows/fonts/msyh.ttf",20) if ball.lifes==0 : fontimage = f.render("游戏结束,你失败了!",True,(255,0,0)) failSound.play() # 播放失败音效 else: fontimage = f.render("游戏结束,你成功了!",True,(255,255,125)) succSound.play() # 播放胜利音效 running = True while running: for event in pygame.event.get(): if event.type == QUIT:running=False if event.type ==MOUSEBUTTONDOWN:running=False screen.fill((0,0,0)) if ball.lifes==0: screen.blit(哭脸图,(screenWidth//2-100,50)) else: screen.blit(笑脸图,(screenWidth//2-80,50)) screen.blit(fontimage,(screenWidth//2-100,80+screenHeight/2)) pygame.display.update() pygame.quit() if __name__ == "__main__": playmusic() start_shell() main()
如需要下载完整源代码及素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论