Loops 使用pygame模式更改制作弹跳pacman

Loops 使用pygame模式更改制作弹跳pacman,loops,pygame,pacman,Loops,Pygame,Pacman,随机吃豆人 任务是为5个对象设置动画(吃豆人和4个随机移动的鬼魂,如果吃豆人与鬼魂相撞,他会弹离鬼魂,鬼魂会互相穿过,被吃豆人击中时不会受到影响。单击鼠标时,模式会发生变化,如果吃豆人与鬼魂相撞而吃豆人不受影响,则鬼魂会反弹,如果再次单击鼠标,则会恢复原始状态l mode.Functions ghost\u collision和mode\u swich处理这个问题,我在鼠标点击的末尾有一个if语句。BUG1I不明白为什么精灵碰撞时有时会变得不动(在两种模式下)还有,我可以用一个列表和一个for循

随机吃豆人 任务是为5个对象设置动画(吃豆人和4个随机移动的鬼魂,如果吃豆人与鬼魂相撞,他会弹离鬼魂,鬼魂会互相穿过,被吃豆人击中时不会受到影响。单击鼠标时,模式会发生变化,如果吃豆人与鬼魂相撞而吃豆人不受影响,则鬼魂会反弹,如果再次单击鼠标,则会恢复原始状态l mode.Functions ghost\u collision和mode\u swich处理这个问题,我在鼠标点击的末尾有一个if语句。BUG1I不明白为什么精灵碰撞时有时会变得不动(在两种模式下)还有,我可以用一个列表和一个for循环替换一些重复的if语句吗?如果可以,怎么做?我试着列出所有ghost_边界变量,然后使用

 For sprite in sprite_list():        
    sprite.left < 0 or sprite.right > WIDTH:
    sprite_velocity[1] = -1 * sprite_velocity[1]
精灵列表()中精灵的
:
sprite.left<0或sprite.right>宽度:
精灵速度[1]=-1*精灵速度[1]
但这失败了

import pygame
from random import *



pygame.init()

def ghost_collision():
   # global pacman_up, pacman_right, pacman_velocity why?
    SCREAM.play()
    pacman_velocity[0] = randint(-1,1)
    pacman_velocity[1] = randint(-1,1)
   if pacman_velocity[0] < 0:
        pacman = pygame.image.load(PACMAN_LEFT).convert()
    elif pacman_velocity[0] > 0:
        pacman = pygame.image.load(PACMAN_RIGHT).convert()
    return pacman_velocity

def mode_switch():
    global mode
    blue_right, orange_right, pink_right,\
          red_right, blue, orange, pink, red
    if mode == False:
        mode = True
        blue = pygame.image.load(GHOST_SCARED).convert()
        orange = pygame.image.load(GHOST_SCARED).convert()
        pink = pygame.image.load(GHOST_SCARED).convert()
        red = pygame.image.load(GHOST_SCARED).convert()
    else:
        mode = False
        if blue_right == True:
            blue = pygame.image.load(BLUE_LEFT).convert()
            blue_right = False
    else:
        blue = pygame.image.load(BLUE_RIGHT).convert()
        blue_right = True
    if orange_right == True:
        orange = pygame.image.load(ORANGE_LEFT).convert()
        orange_right = False
    else:
        orange = pygame.image.load(ORANGE_RIGHT).convert()
        orange_right = True
    if pink_right == True:
        pink = pygame.image.load(PINK_LEFT).convert()
        pink_right = False
    else:
        pink = pygame.image.load(PINK_RIGHT).convert()
        pink_right = True
    if red_right == True:
        red = pygame.image.load(RED_LEFT).convert()
        red_right = False
    else:
        red = pygame.image.load(RED_RIGHT).convert()
        red_right = True


PACMAN_LEFT = 'pacman-left.png'#import all necessary images and sounds
PACMAN_RIGHT = 'pacman-right.png'
BLUE_LEFT = 'blue-left.png'
BLUE_RIGHT = 'blue-right.png'
ORANGE_LEFT = 'orange-left.png'
ORANGE_RIGHT = 'orange-right.png'
PINK_LEFT = 'pink-left.png'
PINK_RIGHT = 'pink-right.png'
RED_LEFT = 'red-left.png'
RED_RIGHT = 'red-right.png'
GHOST_SCARED = 'vulnerable.png'
BOUNCE_SOUND = 'Thump.wav'
SCREAM_SOUND = 'pacman_death.wav'
GHOST_WAIL = 'pacman_eatfruit.wav'
SOUND = pygame.mixer.Sound(BOUNCE_SOUND)
SCREAM = pygame.mixer.Sound(SCREAM_SOUND)
WAIL = pygame.mixer.Sound(GHOST_WAIL)
WIDTH = 800
HEIGHT = 600
BACKGROUND_COLOUR = 0, 0, 0
CAPTION = 'Random Pacman'
pacman_up = True#define image direction controlling variables
pacman_right = True
blue_right = False
orange_right = True
pink_right = False
red_right = True
mode = False

frame = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(CAPTION)
pacman = pygame.image.load(PACMAN_RIGHT).convert()#create sprites and define boundaries
pacman_boundary = pacman.get_rect(center = (300,300))
pacman_velocity = [1, 1]
blue = pygame.image.load(BLUE_LEFT).convert()
blue_boundary = pacman.get_rect(center = (300,300))
blue_velocity = [-1, -1]
orange = pygame.image.load(ORANGE_RIGHT).convert()
orange_boundary = pacman.get_rect(center = (300,300))
orange_velocity = [1, -1]
pink = pygame.image.load(PINK_LEFT).convert()
pink_boundary = pacman.get_rect(center = (300,300))
pink_velocity = [-1, 1]
red = pygame.image.load(RED_RIGHT).convert()
red_boundary = pacman.get_rect(center = (300,300))
red_velocity = [1, 1]

finished = False
while not finished:
    pygame.event.pump()
        for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True
        if event.type == pygame.MOUSEBUTTONUP:
            mode_switch()

    #####################################################

if pacman_boundary.left < 0 or pacman_boundary.right > WIDTH:#pacman bounce code
    SOUND.play()
    pacman_velocity[0] = -1 * pacman_velocity[0]
    if pacman_velocity[0] < 0:
        pacman = pygame.image.load(PACMAN_LEFT).convert()
    elif pacman_velocity[0] > 0:
        pacman = pygame.image.load(PACMAN_RIGHT).convert()
    pacman_velocity[1] = randint(-1,1)

if pacman_boundary.top < 0 or pacman_boundary.bottom > HEIGHT:
    SOUND.play()
    pacman_velocity[1] = -1 * pacman_velocity[1]

if mode == False:        
    if pacman_boundary.colliderect(blue_boundary)\
       or pacman_boundary.colliderect(orange_boundary)\
       or pacman_boundary.colliderect(pink_boundary)\
       or pacman_boundary.colliderect(red_boundary):
        ghost_collision()

    #####################################################

if blue_boundary.left < 0 or blue_boundary.right > WIDTH:#blue bounce code
    blue_velocity[0] = -1 * blue_velocity[0]
    if mode == False:
        if blue_right == True:
            blue = pygame.image.load(BLUE_LEFT).convert()
            blue_right = False
        else:
            blue = pygame.image.load(BLUE_RIGHT).convert()
            blue_right = True

if blue_boundary.top < 0 or blue_boundary.bottom > HEIGHT:
    SOUND.play()
    blue_velocity[1] = -1 * blue_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(blue_boundary):

        blue_velocity[0] = randint(-1,1)
        blue_velocity[1] = randint(-1,1)
        WAIL.play()


#####################################################

if orange_boundary.left < 0 or orange_boundary.right > WIDTH:#orange bounce code
    orange_velocity[0] = -1 * orange_velocity[0]
    if mode == False:
        if orange_right == True:
            orange = pygame.image.load(ORANGE_LEFT).convert()
            orange_right = False
        else:
            orange = pygame.image.load(ORANGE_RIGHT).convert()
            orange_right = True

if orange_boundary.top < 0 or orange_boundary.bottom > HEIGHT:
    SOUND.play()
    orange_velocity[1] = -1 * orange_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(orange_boundary):
        orange_velocity[0] = randint(-1,1)
        orange_velocity[1] = randint(-1,1)
        WAIL.play()

#####################################################

if pink_boundary.left < 0 or pink_boundary.right > WIDTH:#pink bounce code
    pink_velocity[0] = -1 * pink_velocity[0]
    if mode == False:
        if pink_right == True:
            pink = pygame.image.load(PINK_LEFT).convert()
            pink_right = False
        else:
            pink = pygame.image.load(PINK_RIGHT).convert()
            pink_right = True

if pink_boundary.top < 0 or pink_boundary.bottom > HEIGHT:
    SOUND.play()
    pink_velocity[1] = -1 * pink_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(pink_boundary):
        pink_velocity[0] = randint(-1,1)
        pink_velocity[1] = randint(-1,1)
        WAIL.play()

#####################################################

if red_boundary.left < 0 or red_boundary.right > WIDTH:#red bounce code
    red_velocity[0] = -1 * red_velocity[0]
    if mode == False:
        if red_right == True:
            red = pygame.image.load(RED_LEFT).convert()
            red_right = False
        else:
            red = pygame.image.load(RED_RIGHT).convert()
            red_right = True

if red_boundary.top < 0 or red_boundary.bottom > HEIGHT:
    SOUND.play()
    red_velocity[1] = -1 * red_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(red_boundary):
        red_velocity[0] = randint(-1,1)
        red_velocity[1] = randint(-1,1)
        WAIL.play()

#####################################################



pacman_boundary = pacman_boundary.move(pacman_velocity)
blue_boundary = blue_boundary.move(blue_velocity)
orange_boundary = orange_boundary.move(orange_velocity)
pink_boundary = pink_boundary.move(pink_velocity)
red_boundary = red_boundary.move(red_velocity)
frame.fill(BACKGROUND_COLOUR)
frame.blit(pacman, pacman_boundary)
frame.blit(blue, blue_boundary)
frame.blit(orange, orange_boundary)
frame.blit(pink, pink_boundary)
frame.blit(red, red_boundary)
pygame.display.flip()

pygame.quit()
导入pygame
从随机导入*
pygame.init()
def ghost_collision():
#全球吃豆人,吃豆人对,吃豆人速度为什么?
尖叫
pacman_速度[0]=randint(-1,1)
pacman_速度[1]=randint(-1,1)
如果pacman_速度[0]<0:
pacman=pygame.image.load(pacman_左)。convert()
elif pacman_速度[0]>0:
pacman=pygame.image.load(pacman_RIGHT.convert())
返回速度
def模式_开关():
全局模式
蓝色,橙色,粉色\
红色、蓝色、橙色、粉色、红色
如果mode==False:
模式=真
blue=pygame.image.load(GHOST\u.convert())
orange=pygame.image.load(GHOST\u.convert())
pink=pygame.image.load(GHOST\u.convert())
red=pygame.image.load(GHOST\u.convert())
其他:
模式=错误
如果blue_right==True:
blue=pygame.image.load(blue\u LEFT.convert())
蓝色右=假
其他:
blue=pygame.image.load(blue\u RIGHT.convert())
蓝色=正确
如果orange_right==真:
orange=pygame.image.load(orange_LEFT.convert())
橙色右=假
其他:
orange=pygame.image.load(orange\u RIGHT.convert())
橙色右=真
如果pink_right==真:
pink=pygame.image.load(pink_LEFT.convert())
粉色右=假
其他:
pink=pygame.image.load(pink\u RIGHT.convert())
粉红色=正确
如果红色_right==真:
red=pygame.image.load(红色左)。convert()
红色右=假
其他:
red=pygame.image.load(红色右键).convert()
红色=正确
PACMAN_LEFT='PACMAN LEFT.png'#导入所有必要的图像和声音
PACMAN_RIGHT='PACMAN RIGHT.png'
BLUE_LEFT='BLUE LEFT.png'
BLUE_RIGHT='BLUE RIGHT.png'
ORANGE_LEFT='ORANGE LEFT.png'
ORANGE_RIGHT='ORANGE RIGHT.png'
PINK_LEFT='PINK LEFT.png'
PINK_RIGHT='PINK RIGHT.png'
红色左='RED LEFT.png'
RED_RIGHT='RED RIGHT.png'
鬼_害怕='vulnerable.png'
反弹声音='Thump.wav'
尖叫声='pacman_death.wav'
鬼嚎='pacman_eatfruit.wav'
SOUND=pygame.mixer.SOUND(反弹音)
尖叫=pygame.mixer.Sound(尖叫声)
WAIL=pygame.mixer.Sound(鬼嚎)
宽度=800
高度=600
背景颜色=0,0,0
标题='Random Pacman'
pacman_up=True#定义图像方向控制变量
pacman_right=正确
蓝色右=假
橙色右=真
粉色右=假
红色=正确
模式=错误
frame=pygame.display.set_模式((宽度、高度))
pygame.display.set_标题(标题)
pacman=pygame.image.load(pacman_RIGHT.convert()#创建精灵并定义边界
pacman_boundary=pacman.get_rect(中心=(300300))
pacman_速度=[1,1]
blue=pygame.image.load(blue\u LEFT.convert())
blue_boundary=pacman.get_rect(中心=(300300))
蓝色速度=[-1,-1]
orange=pygame.image.load(orange\u RIGHT.convert())
orange_boundary=pacman.get_rect(中心=(300300))
橙色速度=[1,-1]
pink=pygame.image.load(pink_LEFT.convert())
pink_boundary=pacman.get_rect(中心=(300300))
粉红_速度=[-1,1]
red=pygame.image.load(红色右键).convert()
红色边界=pacman.get_rect(中心=(300300))
红_速度=[1,1]
完成=错误
未完成时:
pygame.event.pump()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
如果event.type==pygame.MOUSEBUTTONUP:
模式开关()
#####################################################
如果pacman_boundary.left<0或pacman_boundary.right>WIDTH:#pacman反弹码
播放
pacman_速度[0]=-1*pacman_速度[0]
如果pacman_速度[0]<0:
pacman=pygame.image.load(pacman_左)。convert()
elif pacman_速度[0]>0:
pacman=pygame.image.load(pacman_RIGHT.convert())
pacman_速度[1]=randint(-1,1)
如果pacman_boundary.top<0或pacman_boundary.bottom>高度:
播放
pacman_速度[1]=-1*pacman_速度[1]
如果mode==False:
if pacman_boundary.Collide Rect(蓝色_boundary)\
或pacman_边界。colliderect(橙色_边界)\
或pacman_边界。colliderect(粉色_边界)\
或pacman_边界。colliderect(红色_边界):
鬼魂碰撞()
#####################################################
如果blue_boundary.left<0或blue_boundary.right>宽度:#蓝色反弹代码
蓝色速度[0]=-1*蓝色速度[0]
如果mode==False:
如果blue_right==True:
blue=pygame.image.load(blue\u LEFT.convert())
蓝色右=假
其他:
blue=pygame.image.load(blue\u RIGHT.convert())
蓝色=正确
如果blue_boundary.top<0或blue_boundary.bottom>高度:
播放
蓝色速度[1]=-1*蓝色速度[1]
如果mode==True:
如果pacman_boundary.CollizeRect(蓝色_boundary):
蓝_速度[0]=randint(
pacman_velocity[0] = randint(-1,1)
pacman_velocity[1] = randint(-1,1)
random.randint(a, b)
Return a random integer N such that a <= N <= b
pacman_velocity[0] = random.choice((-1, 1))
pacman_velocity[1] = random.choice((-1, 1))
pacman_velocity[0] = random.choice((-1, -1, -1, 0, 1, 1, 1))
pacman_velocity[0] = random.choice((-1, -1, -1, 0, 1, 1, 1))
For sprite in sprite_list():        
    sprite.left < 0 or sprite.right > WIDTH:
    sprite_velocity[1] = -1 * sprite_velocity[1]
For sprite in sprite_list:
    if sprite.left < 0 or sprite.right > WIDTH:
       sprite_velocity[0] = -1 * sprite_velocity[0]
    if sprite.top < 0 or sprite.bottom > HEIGHT:
        sprite_velocity[1] = -1 * sprite_velocity[1]