【问题标题】:making a snake pygame制作蛇 pygame
【发布时间】:2015-12-01 01:19:12
【问题描述】:

我正在为我的 cs 课程做一个项目,它是一个使用 pygame 的蛇游戏,我真的在这个项目和这个课程中苦苦挣扎。我真的很想学习这些东西,因为我确实认为它很有趣,但是当你有截止日期的压力时它很难。我正在研究一个名为 get_initial_snake 的函数。所以你可以想象它基本上是创建游戏环境,然后将蛇放置在游戏环境中。这是我的代码

def get_initial_snake(snake_length,width,height,block_size):
    window = pygame.display.set_mode((width,height))
    background_colour = (250,250,250)
    window.fill(background_colour)
    for y in range(height):
        for x in range(width):
            rect = pygame.Rect(x*(block_size+1), y*(block_size+1), block_size, block_size)
            pygame.draw.rect(window, (0,0,0), rect)
            pygame.display.flip()

所以这是创建黑色背景,上面有一个白色网格。现在我正在尝试编写将使用以下参数参数制作蛇的代码。最初的蛇预计将位于屏幕的中心。 进一步来说: 如果列中有奇数个正方形: 那么蛇头一定正好在中间一排。 如果列中有偶数个正方形: 那么蛇头必须是第 (num_rows / 2) 行。 相似地, 如果行中有奇数个正方形: 那么蛇头一定正好在中间那一列。 如果行中有偶数个正方形: 那么蛇头必须是第 (num_cols / 2) 列。有没有人可以让我深入了解如何以通用方式完成此操作,以便可以输入任何参数并且蛇会在中间出现?

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    这是你需要的:

    def find_midpoint(length):
        from math import ceil
        return ceil(length / 2.0)  # dividing by 2.0 forces python to do floating point division
    

    然后可以计算起始行和起始列

    start_row = find_midpoint(height)
    start_col = find_midpoint(width)
    

    由于find_midpoint 函数返回一个浮点数,如果您需要结果为整数,则必须对结果应用int() 函数。
    即: start_row_as_int = int(find_midpoint(height))

    【讨论】:

      【解决方案2】:

      这可能是创建贪吃蛇游戏的最简单方法。不需要图像:)。 代码:

      import random
      import curses
      
      s = curses.initscr()
      curses.curs_set(0)
      sh, sw = s.getmaxyx()
      w = curses.newwin(sh, sw, 0, 0)
      w.keypad(1)
      w.timeout(100)
      
      snk_x = sw/4
      snk_y = sh/2
      snake = [
          [snk_y, snk_x],
          [snk_y, snk_x-1],
          [snk_y, snk_x-2]
      ]
      
      food = [sh/2, sw/2]
      w.addch(int(food[0]), int(food[1]), curses.ACS_PI)
      
      key = curses.KEY_RIGHT
      
      while True:
          next_key = w.getch()
          key = key if next_key == -1 else next_key
      
          if snake[0][0] in [0, sh] or snake[0][1]  in [0, sw] or snake[0] in snake[1:]:
              curses.endwin()
              quit()
      
          new_head = [snake[0][0], snake[0][1]]
      
          if key == curses.KEY_DOWN:
              new_head[0] += 1
          if key == curses.KEY_UP:
              new_head[0] -= 1
          if key == curses.KEY_LEFT:
              new_head[1] -= 1
          if key == curses.KEY_RIGHT:
              new_head[1] += 1
      
          snake.insert(0, new_head)
      
          if snake[0] == food:
              food = None
              while food is None:
                  nf = [
                      random.randint(1, sh-1),
                      random.randint(1, sw-1)
                  ]
                  food = nf if nf not in snake else None
              w.addch(food[0], food[1], curses.ACS_PI)
          else:
              tail = snake.pop()
              w.addch(int(tail[0]), int(tail[1]), ' ')
      
          w.addch(int(snake[0][0]), int(snake[0][1]), curses.ACS_CKBOARD)
      

      要运行游戏,只需输入python [filename]

      感谢engineer man's "Creating a Snake game with Python in under 5 minutes"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        相关资源
        最近更新 更多