jayn-- 2017-06-10 13:18 采纳率: 0%
浏览 2246

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条回答 默认 最新

  • devmiao 2017-06-10 15:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型