猫史档案馆


【Python作品分享】有没有大佬修改一下,运行不了

用户:꧁༺专注魔改100年༻꧂꧁༺专注魔改100年༻꧂查看:3 回复:3 评论:3 创建时间:2020-06-14T19:26:37


【作品展示】

center_image

 

【作品介绍】

求大佬

随便发的图

 

【作品源代码】


  # 导入相关模块
import random
import pygame
import sys

from pygame.locals import *


snake_speed = 15  # 贪吃蛇的速度
windows_width = 800
windows_height = 600  # 游戏窗口的大小
cell_size = 20  # 贪吃蛇身体方块大小,注意身体大小必须能被窗口长宽整除
''' #初始化区
'''
map_width = int(windows_width / cell_size)
map_height = int(windows_height / cell_size)

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
gray = (230, 230, 230)
dark_gray = (40, 40, 40)
DARKGreen = (0, 155, 0)
Green = (0, 255, 0)
Red = (255, 0, 0)
blue = (0, 0, 255)
dark_blue = (0, 0, 139)


BG_COLOR = black  # 游戏背景颜色

# 定义方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4

HEAD = 0  # 贪吃蛇头部下标

# 主函数


def main():
    pygame.init()  # 模块初始化
    snake_speed_clock = pygame.time.Clock()  # 创建Pygame时钟对象
    screen = pygame.display.set_mode((windows_width, windows_height))
    screen.fill(white)

    pygame.display.set_caption("Python 贪吃蛇小游戏")  # 设置标题
    show_start_info(screen)  # 欢迎信息
    while True:
        running_game(screen, snake_speed_clock)
        show_gameover_info(screen)


# 游戏运行主体
def running_game(screen, snake_speed_clock):
    startx = random.randint(3, map_width - 8)  # 开始位置
    starty = random.randint(3, map_height - 8)
    snake_coords = [{'x': startx, 'y': starty},  # 初始贪吃蛇
                  {'x': startx - 1, 'y': starty},
                {'x': startx - 2, 'y': starty}]

    direction = RIGHT  # 开始时向右移动

    food = get_random_location()  # 实物随机位置

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                terminate()
            elif event.type == KEYDOWN:
                if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
                    direction = LEFT
                elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
                    direction = RIGHT
                elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
                    direction = UP
                elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
                                       direction = DOWN
                elif event.key == K_ESCAPE:
                    terminate()

        move_snake(direction, snake_coords)  # 移动蛇

        ret = snake_is_alive(snake_coords)
        if not ret:
            break  # 蛇跪了. 游戏结束
        snake_is_eat_food(snake_coords, food)  # 判断蛇是否吃到食物

        screen.fill(BG_COLOR)
       # draw_grid(screen)
        draw_snake(screen, snake_coords)
        draw_food(screen, food)
        draw_score(screen, len(snake_coords) - 3)
        pygame.display.update()
        snake_speed_clock.tick(snake_speed)  # 控制fps
# 将食物画出来


def draw_food(screen, food):
    x = food['x'] * cell_size
    y = food['y'] * cell_size
    appleRect = pygame.Rect(x, y, cell_size, cell_size)
    pygame.draw.rect(screen, Red, appleRect)
# 将贪吃蛇画出来


def draw_snake(screen, snake_coords):
    for coord in snake_coords:
        x = coord['x'] * cell_size
        y = coord['y'] * cell_size
        wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)
        pygame.draw.rect(screen, dark_blue, wormSegmentRect)
        wormInnerSegmentRect = pygame.Rect(  # 蛇身子里面的第二层亮绿色
            x + 4, y + 4, cell_size - 8, cell_size - 8)
        pygame.draw.rect(screen, blue, wormInnerSegmentRect)
# 画网格(可选)


def draw_grid(screen):
    for x in range(0, windows_width, cell_size):  # draw 水平 lines
        pygame.draw.line(screen, dark_gray, (x, 0), (x, windows_height))
    for y in range(0, windows_height, cell_size):  # draw 垂直 lines
        pygame.draw.line(screen, dark_gray, (0, y), (windows_width, y))
# 移动贪吃蛇


def move_snake(direction, snake_coords):
    if direction == UP:
        newHead = {'x': snake_coords[HEAD]['x'],
            'y': snake_coords[HEAD]['y'] - 1}
    elif direction == DOWN:
        newHead = {'x': snake_coords[HEAD]['x'],
            'y': snake_coords[HEAD]['y'] + 1}
    elif direction == LEFT:
        newHead = {'x': snake_coords[HEAD]
            ['x'] - 1, 'y': snake_coords[HEAD]['y']}
    elif direction == RIGHT:
        newHead = {'x': snake_coords[HEAD]
            ['x'] + 1, 'y': snake_coords[HEAD]['y']}

    snake_coords.insert(0, newHead)
# 判断蛇喵了没


def snake_is_alive(snake_coords):
    tag = True
    if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \
            snake_coords[HEAD]['y'] == map_height:
        tag = False  # 蛇碰壁啦
    for snake_body in snake_coords[1:]:
        if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:
            tag = False  # 蛇碰到自己身体啦
    return tag
# 判断贪吃蛇是否吃到食物


def snake_is_eat_food(snake_coords, food):  # 如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。
    if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:
        food['x'] = random.randint(0, map_width - 1)
        food['y'] = random.randint(0, map_height - 1)  # 实物位置重新设置
    else:
        del snake_coords[-1]  # 如果没有吃到实物, 就向前移动, 那么尾部一格删掉
# 食物随机生成


def get_random_location():
        return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}
# 开始信息显示


def show_start_info(screen):
                    font = pygame.font.Font('myfont.ttf', 40)
                    tip = font.render('按任意键开始游戏~~~', True, (65, 105, 225))
                    gamestart = pygame.image.load('gamestart.png')
                    screen.blit(gamestart, (140, 30))
                    screen.blit(tip, (240, 550))
                    pygame.display.update()

                    while True:  # 键盘监听事件
                     for event in pygame.event.get():  # event handling loop
                      if event.type == QUIT:
                       terminate()  # 终止程序
                      elif event.type == KEYDOWN:
                       if (event.key == K_ESCAPE):  # 终止程序
                        terminate()  # 终止程序
                    else:
                     return  # 结束此函数, 开始游戏
# 游戏结束信息显示
                    show_gameover_info(screen)
                    font = pygame.font.Font('myfont.ttf', 40)
                    tip = font.render('按Q或者ESC退出游戏, 按任意键重新开始游戏~', True, (65, 105, 225))
                    gamestart = pygame.image.load('gameover.png')
                    screen.blit(gamestart, (60, 0))
                    screen.blit(tip, (80, 300))
                    pygame.display.update()
                    while True:  # 键盘监听事件
                     for event in pygame.event.get():  # event handling loop
                      if event.type == QUIT:
                       terminate()  # 终止程序
                      elif event.type == KEYDOWN:
                       if event.key == K_ESCAPE or event.key == K_q:  #终止程序
                        terminate() #终止程序
                    else:
                     return #结束此函数, 重新开始游戏
# 画成绩
def draw_score(screen,score):
    font = pygame.font.Font('myfont.ttf', 30)
    scoreSurf = font.render('得分: %s' % score, True, Green)
    scoreRect = scoreSurf.get_rect()
    scoreRect.topleft = (windows_width - 120, 10)
    screen.blit(scoreSurf, scoreRect)
# 程序终止
def terminate():
    pygame.quit()
    sys.exit()


main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
lsk666666lsk666666

发一下静态资源,要不然运行不了

点赞0


评论


宏图大志EB9j宏图大志EB9j

我看了下...

文件没找到:没喵myfont.ttf"文件

我不知道你是怎么了...

点赞0


评论


急_开_锁_办_证810864急_开_锁_办_证810864

你可以看这个教程:https://www.bilibil喵video/BV1cs411T7wW

你的代码设置的函数太多,把本来简单的事情搞复杂了。

点赞0


评论