|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小凯2013 于 2022-5-22 07:52 编辑
前方高能预警!!!代码如下(250行左右):
- #p3_85.py/摩擦摩擦(main).py
- import pygame
- import sys
- import traceback
- from pygame.locals import *
- from random import *
- try:
- class Ball(pygame.sprite.Sprite):
- def __init__(self,grayball_image,greenball_image,position,speed,bg_size,target):
- pygame.sprite.Sprite.__init__(self)
- self.grayball_image = pygame.image.load(grayball_image).convert_alpha()
- self.greenball_image = pygame.image.load(greenball_image).convert_alpha()
- self.rect = self.grayball_image.get_rect()
- self.rect.left = position
- self.rect.top = position
- self.side = [choice([-1,1]),choice([-1,1])]
- self.speed = speed
- self.collide = False
- self.target = target
- self.control = False
- self.width = bg_size[0]
- self.height = bg_size[1]
- self.radius = self.rect.width / 2
- def move(self):
- if self.control:
- self.rect = self.rect.move(self.speed)
- else:
- self.rect = self.rect.move((self.side[0] * self.speed[0],self.side[1] * self.speed[1]))
- if self.rect.right <= 0:
- self.rect.left = self.width
- elif self.rect.left >= self.width:
- self.rect.right = 0
- elif self.rect.bottom <= 0:
- self.rect.top = self.height
- elif self.rect.top >= self.height:
- self.rect.bottom = 0
- def check(self,motion):
- if self.target < motion < self.target + 5:
- return True
- else:
- return False
- class Glass(pygame.sprite.Sprite):
- def __init__(self,glass_image,mouse_image,bg_size):
- pygame.sprite.Sprite.__init__(self)
- self.glass_image = pygame.image.load(glass_image).convert_alpha()
- self.glass_rect = self.glass_imagr.get_rect()
- self.glass_rect.left = (bg_size[0] - self.glass_rect.width) // 2
- self.glass_rect.top = bg_size[1] - self.glass_rect.height
- self.mouse_image = pygame.image.load(mouse_image).convert_alpha()
- self.mouse_rect = self.mouse_image.get_rect()
- self.mouse_rect.left = self.glass_rect.left
- self.mouse_rect.top = self.glass_rect.top
- pygame.mouse.set_visible(False)
- def main():
- pygame.init()
- grayball_image = "gray_ball.png"
- greenball_image = "green_ball.png"
- glass_image = "glass.png"
- mouse_image = "hand.png"
- bg_image = "background.png"
- running = True
- pygame.mixer.music.load("bg_music.ogg")
- pygame.mixer.music.play()
- loser_sound = pygame.mixer.Sound("loser.wav")
- laugh_sound = pygame.mixer.Sound("laugh.wav")
- winner_sound = pygame.mixer.Sound("winner.wav")
- hole_sound = pygame.mixer.Sound("hole.wav")
- GAMEOVER = USEREVENT
- pygame.mixer.muxic.set_endevent(GAMEOVER)
- bg_size = [width,height] = [1024,681]
- screen = pygame.display.set_mode(bg_size)
- pygame.display.set_caption("摩擦摩擦 - Play The Ball")
- background = pygame.image.load(bg_image).convert_alpha()
- hole = [(117,119,199,201),(255,227,390,392),(503,505,320,322),(698,700,192,194),(906,908,419,421)]
- msgs = []
- balls = []
- group = pygame.sprite.Group()
- for i in range(5):
- position = [randint(0,width - 100),randint(0,height - 100)]
- speed = [randint(1,10),randint(1,10)]
- ball = Ball(grayball_image,greenball_image,position,speed,bg_size,5 * (i + 1))
- while pygame.sprite.spritecollide(ball,group,False,pygame.sprite.collide_circle):
- ball.rect.left = randint(0,width - 100)
- ball.rect.top = randint(0,height - 100)
- balls.append(ball)
- group.add(ball)
- glass = Glass(glass_image,mouse_image,bg_size)
- motion = 0
- MYTIMER = USEREVENT + 1
- pygame.time.set_timer(MYTIMER,1000)
- pygame.key.set_repeat(100,100)
- clock = pygame.time.Clock()
- while running:
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- elif event.type == GAMEOVER:
- loser_sound.play()
- pygame.time.delay(2000)
- laugh_sound.play()
- running = False
- elif event.type == MYTIMER:
- if motion:
- for each in group:
- if each.check(motion):
- each.speed = [0,0]
- each.control = True
- motion = 0
- elif event.type == MOUSEMOTION:
- motion += 1
- elif event.type == KEYDOWN:
- if event.key == Up:
- for each in group:
- if each.control:
- each.speed[1] -= 1
- elif event.key == Down:
- for each in group:
- if each.control:
- each.speed[1] += 1
- elif event.key == Left:
- for each in group:
- if each.control:
- each.speed[0] -= 1
- elif event.key == Right:
- for each in group:
- if each.control:
- each.speed[0] += 1
- elif event.key == K_SPACE:
- for each in group:
- if each.control:
- for i in hole:
- if i[0] <= each.rect.left <= i[1] and i[2] <= each.rect.top <= i[3]:
- hole_sound.play()
- each.speed = [0,0]
- group.remove(each)
- temp = balls.pop(balls.index(each))
- balls.insert(0,temp)
- hole.remove(i)
- if not hole:
- pygame.mixer.muisc.stop()
- winner_sound.play()
- pygame.time.delay(3000)
- msg = pygame.image.load("win.png").convert_alpha()
- msg_pos = [(width - msg.get_width()) // 2,(height - msg.get_height())]
- msgs.append((msg,msg_pos))
- laugh_sound.play()
- screen.blit(background,(0,0))
- screen.blit(glass.glass_image,glass.glass_rect)
- glass.mouse_rect.left = pygame.mouse.get_pos()
- glass.mouse_rect.top = pygame.mouse.get_pos()
- if glass.mouse_rect.left < glass.glass_rect.left:
- glass.mouse_rect.left = glass.glass_rect.left
- if glass.mouse_rect.left > glass.glass_rect.right - glass.mouse_rect.width:
- glass.mouse_rect.left = glass.glass_rect.right - glass.mouse_rect.width
- if glass.mouse_rect.top < glass.glass_rect.top:
- glass.mouse_rect.top = glass.glass_rect.top
- if glass.mouse_rect.top > glass.glass_rect.bottom - glass.mouse_rect.height:
- glass.mouse_rect.top = glass.glass_rect.bottom - glass.mouse_rect.height
- screen.blit(glass.mouse_image,glass.mouse_rect)
- for each in balls:
- each.move()
- if each.collide:
- each.speed = [randint(1,10),randint(1,10)]
- each.collide = False
- if each.control:
- screen.blit(each.greenball_image,each.rect)
- else:
- screen.blit(each.grayball_image,each.rect)
- for each in group:
- group.remove(each)
- if pygame.sprite.spritecollide(each,group,False,pygame.sprirte.collide_circle):
- each.side[0] = -each.side[0]
- each.side[1] = -each.side[1]
- each.collide = True
- if each.control:
- each.side[0] = -1
- each.side[1] = -1
- each.control = False
- group.add(each)
- for msg in msgs:
- screen.blit(msg[0],msg[1])
- pygame.display.flip()
- clock.tick(30)
- if __name__ == "__main__":
- try:
- main()
- except SystemExit:
- pass
- except:
- traceback.print_exc()
- pygame.quit()
- input()
- except:
- pygame.quit()
- sys.exit()
复制代码 运行后代码如下:- Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)] on win32
- Type "help", "copyright", "credits" or "license()" for more information.
- >>>
- ================ RESTART: C:\Users\Administrator\Desktop\摩擦摩擦.py ===============
- pygame 2.1.2 (SDL 2.0.18, Python 3.8.5)
- Hello from the pygame community. https://www.pygame.org/contribute.html
- Traceback (most recent call last):
- File "C:\Users\Administrator\Desktop\摩擦摩擦.py", line 235, in <module>
- main()
- File "C:\Users\Administrator\Desktop\摩擦摩擦.py", line 76, in main
- pygame.mixer.music.load("bg_music.ogg")
- pygame.error: No file 'bg_music.ogg' found in working directory 'C:\Users\Administrator\Desktop'.
复制代码 你们说为啥抛异常?还有,什么是pygame.error??? |
|