python贪吃蛇代码_Python贪吃蛇源代码

程序运行截图如下:

python贪吃蛇代码_Python贪吃蛇源代码_第1张图片

python贪吃蛇代码_Python贪吃蛇源代码_第2张图片

import pygame as pgfrom random import randintimport sysfrom pygame.locals import *FPS = 6  # 画面帧数,代表蛇的移动速率window_width = 600window_height = 500cellsize = 20cell_width = int(window_width / cellsize)cell_height = int(window_height / cellsize)BGcolor = (0, 0, 0)BLUE = (0, 0, 255)RED = (255, 0, 0)apple_color = (255, 0, 0)snake_color = (0, 150, 0)GREEN = (0, 255, 0)WHITE = (255, 255, 255)DARKGRAY = (40, 40, 40)UP = "up"DOWN = "down"LEFT = "left"RIGHT = "right"HEAD = 0def main():  # 有函数    global FPSclock, window, BASICFONT    pg.init()    FPSclock = pg.time.Clock()    window = pg.display.set_mode((window_width, window_height))    BASICFONT = pg.font.Font("freesansbold.ttf", 18)    pg.display.set_caption("贪吃蛇")    showStartScreen()    while True:        runGame()        showGameOverScreen()def runGame():  # 运行游戏函数    startx = randint(5, cell_width - 6)    starty = randint(5, cell_height - 6)    snakeCoords = [{
      "x": startx, "y": starty}, {
      "x": startx - 1, "y": starty}, {
      "x": startx - 2, "y": starty}]    direction = RIGHT    apple = getRandomLocation()    while True:        for event in pg.event.get():            if event.type == QUIT:                terminate()            elif event.type == KEYDOWN:                if event.key == K_LEFT and direction != RIGHT:                    direction = LEFT                elif event.key == K_RIGHT and direction != LEFT:                    direction = RIGHT                elif event.key == K_UP and direction != DOWN:                    direction = UP                elif event.key == K_DOWN and direction != UP:                    direction = DOWN                elif event.key == K_ESCAPE:                    terminate()        if snakeCoords[HEAD]["x"] == -1 or snakeCoords[HEAD]["x"] == cell_width or snakeCoords[HEAD]["y"] == -1 or \                snakeCoords[HEAD]["y"] == cell_height:            return        for snakeBody in snakeCoords[1:]:            if snakeBody["x"] == snakeCoords[HEAD]["x"] and snakeBody["y"] == snakeCoords[HEAD]["y"]:                return            if snakeCoords[HEAD]["x"] == apple["x"] and snakeCoords[HEAD]["y"] == apple["y"]:                apple = getRandomLocation()            else:                del snakeCoords[-1]            if direction == UP:                newHead = {
      "x": snakeCoords[HEAD]["x"], "y": snakeCoords[HEAD]["y"] - 1}            elif direction == DOWN:                newHead = {
      "x": snakeCoords[HEAD]["x"], "y": snakeCoords[HEAD]["y"] + 1}            elif direction == LEFT:                newHead = {
      "x": snakeCoords[HEAD]["x"] - 1, "y": snakeCoords[HEAD]["y"]}            elif direction == RIGHT:                newHead = {
      "x": snakeCoords[HEAD]["x"] + 1, "y": snakeCoords[HEAD]["y"]}            snakeCoords.insert(0, newHead)            window.fill(BGcolor)            drawGrid()            drawSnake(snakeCoords)            drawApple(apple)            drawScore(len(snakeCoords) - 3)            pg.display.update()            FPSclock.tick(FPS)def drawPressKeyMsg():  # 游戏开始提示信息    pressKeySurf = BASICFONT.render("press a key to play", True, BLUE)    pressKeyRect = pressKeySurf.get_rect()    pressKeyRect.topleft = (window_width - 200, window_height - 30)    window.blit(pressKeySurf, pressKeyRect)def checkForKeyPress():  # 检查是否触发按键    if len(pg.event.get(QUIT)) > 0:        terminate()    keyUpEvents = pg.event.get(KEYUP)    if len(keyUpEvents) == 0:        return None    if keyUpEvents[0].key == K_ESCAPE:        terminate()    return keyUpEvents[0].keydef showStartScreen():  # 开始画面    window.fill(BGcolor)    titleFont = pg.font.Font("freesansbold.ttf", 100)    titleSurf = titleFont.render("snake!", True, RED)    titleRect = titleSurf.get_rect()    titleRect.center = (window_width / 2, window_height / 2)    window.blit(titleSurf, titleRect)    drawPressKeyMsg()    pg.display.update()    while True:        if checkForKeyPress():            pg.event.get()            returndef terminate():  # 退出    pg.quit()    sys.exit()def getRandomLocation():  # 出现位置    return {
      "x": randint(0, cell_width - 1), "y": randint(0, cell_height - 1)}def showGameOverScreen():  # 游戏结束    gameOverFont = pg.font.Font("freesansbold.tff", 150)    gameSurf = gameOverFont.render("Game", True, WHITE)    overSurf = gameOverFont.render("over", True, WHITE)    gameRect = gameSurf.get_rect()    overRect = overSurf.get_rect()    gameRect.midtop = (window_width / 2, 10)    overRect.midtop = (window_width / 2, gameRect.height10 + 25)    window.blit(gameSurf, gameRect)    window.blit(overSurf, overRect)    drawPressKeyMsg()    pg.display.update()    pg.time.wait(500)    checkForKeyPress()    while True:        if checkForKeyPress():            pg.event.get()            returndef drawScore(score):  # 显示分数    scoreSurf = BASICFONT.render("Score:%s" % (score), True, WHITE)    scoreRect = scoreSurf.get_rect()    scoreRect.topleft = (window_width - 120, 10)    window.blit(scoreSurf, scoreRect)def drawSnake(snakeCoords):  # 画蛇    for coord in snakeCoords:        x = coord["x"] * cellsize        y = coord["y"] * cellsize        snakeSegmentRect = pg.Rect(x, y, cellsize, cellsize)        pg.draw.rect(window, snake_color, snakeSegmentRect)        snakeInnerSegmentRect = pg.Rect(x + 4, y + 4, cellsize - 8, cellsize - 8)        pg.draw.rect(window, GREEN, snakeInnerSegmentRect)def drawApple(coord):    x = coord["x"] * cellsize    y = coord["y"] * cellsize    appleRect = pg.Rect(x, y, cellsize, cellsize)    pg.draw.rect(window, apple_color, appleRect)def drawGrid():  # 画方格    for x in range(0, window_width, cellsize):        pg.draw.line(window, DARKGRAY, (x, 0), (x, window_height))    for y in range(0, window_height, cellsize):        pg.draw.line(window, DARKGRAY, (0, y), (window_width, y))if __name__ == "__main__":    main()

程序调试过程中遇到问题,欢迎在本文后留言。

你可能感兴趣的:(python贪吃蛇代码,python贪吃蛇最简单代码,python贪吃蛇编程代码)