做一个蛇pygame

时间:2015-12-01 01:19:12

标签: python pygame

我正在为我的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)列。有没有人可以让我深入了解如何以通用的方式完成这项工作,以便输入任何参数,蛇会在中间出现?

2 个答案:

答案 0 :(得分:0)

以下是您的需求:

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))

答案 1 :(得分:0)

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

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"