pygame 贪吃蛇遇到的问题

做了两个黑洞,进入一个黑洞会传送到另一个黑洞,但是timer.tick(30)帧太快导致无法从传送,改成timer.tick(2)就可以,这是为什么,应该怎么做?主程序代码如下:

 主程序开始   
pygame.init()
img_size =40
img_group = list()
screen_size = 0  #pygame.FULLSCREEN
screen = pygame.display.set_mode((24*img_size,18*img_size),screen_size)
pygame.display.set_caption("嗷大喵贪吃蛇")
face = pygame.image.load("face.png")
load_pic()
game_init()
game_over = False
last_time = 0
bgm = None
auto_play = False 
step_time = 400
waiting =True
audio_init()
rePlay = True
play_sound(bgm)
while True:
    timer.tick(2)
    ticks = pygame.time.get_ticks()
    current_time = time.clock()
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == MOUSEBUTTONUP:
            if waiting == True:
                waiting = False
                game_over = False
                last_time = 0
                auto_play = False 
                step_time = 400
                game_init()
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        pygame.quit()
        sys.exit()
    elif keys[K_UP] or keys[K_w]:
        snake.velocity = Point(0,-1)
    elif keys[K_DOWN] or keys[K_s]:
        snake.velocity = Point(0,1)
    elif keys[K_LEFT] or keys[K_a]:
        snake.velocity = Point(-1,0)
    elif keys[K_RIGHT] or keys[K_d]:
        snake.velocity = Point(1,0)
    elif keys[K_f]:
        if screen_size == pygame.FULLSCREEN:
            screen_size =0
        else:
            screen_size =pygame.FULLSCREEN
        screen = pygame.display.set_mode((24*img_size,18*img_size),screen_size)
        pygame.display.set_caption("嗷大喵贪吃蛇")
    elif keys[K_PLUS] or keys[K_KP_PLUS]:
        step_time -= 10
        if step_time <50:
            step_time=50
    elif keys[K_MINUS] or keys[K_KP_MINUS]:
        step_time += 10
        if step_time >400:
            step_time = 400
    elif keys[K_SPACE]: 
        if auto_play:
            auto_play = False
            step_time = 400
        else:
            auto_play = True
            step_time = 100

    if waiting:
        screen.blit(face,(0,0))
    else:
        if not game_over:
            hole_group.update(ticks)
            snake.update(ticks)
            food_group.update(ticks)


            #检测是否捡起食物,并增加身体长度
            hit_list = pygame.sprite.groupcollide(snake.segments, \
                food_group, False, True)
            if len(hit_list) > 0:
                food_group.add(Food())
                snake.add_segment()

            #检测是否碰到了自己的身体
            for n in range(1, len(snake.segments)):
                if pygame.sprite.collide_rect(snake.segments[0], snake.segments[n]):
                    game_over = True

            #检查屏幕边界
            head_x = snake.segments[0].X//img_size
            head_y = snake.segments[0].Y//img_size
            if head_x < 0:
                snake.segments[0].X = 23 * img_size
            elif head_x > 24:
                snake.segments[0].X = 0 * img_size
            if head_y < 0:
                snake.segments[0].Y = 17 * img_size
            elif head_y > 18:
                snake.segments[0].Y = 0 * img_size

            #检测是否进入黑洞,并从另一个黑洞出来
            holex = snake.segments[0].X
            holey = snake.segments[0].Y
            if holex == hole1.X and holey == hole1.Y:
                snake.segments[0].X = hole2.X
                snake.segments[0].Y = hole2.Y
            elif holex == hole2.X and holey == hole2.Y:
                snake.segments[0].X = hole1.X
                snake.segments[0].Y = hole1.Y
            #执行自动寻路代码
            if auto_play: auto_move()

        backbuffer.fill((20,50,20)) 
        snake.draw(backbuffer)
        food_group.draw(backbuffer)
        hole_group.draw(backbuffer)
        screen.blit(backbuffer, (0,0))

        if not game_over:
            print_text(font, 0, 0, "Length " + str(len(snake.segments)))
            print_text(font, 0, 20, "Position " + str(snake.segments[0].X//img_size) + \
                       "," + str(snake.segments[0].Y//img_size))
        else:
            print_text(font, 0, 0, "GAME OVER")
            waiting = True
            game_over = False

        #显示自动字样
        if auto_play: 
            print_text(font, 600, 0, "AUTO")

        #循环播放背景音乐 
        if int(current_time)%200 ==0 and rePlay:
            play_sound(bgm)
            rePlay = False
        if int(current_time)%200 == 1:
            rePlay = True

    pygame.display.update() 

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问