紧接上回,已经完成了单独的贪食蛇的控制,但是呢,居然没有苹果可以吃,所以,非常简单的加入苹果,同时呢,修改一下主程序中贪食蛇的创建,单独编写一个贪食蛇身体生成函数,这样将来要做双蛇也很简单了。

#创建一条新的蛇
def create_new_snake():
    snake_body = []
    snake_x = random.randint(5, rows - 5)
    snake_y = random.randint(5, columns - 5)
    snake_body.append([snake_x, snake_y])
    snake_body.append([snake_x, snake_y   1])
    snake_body.append([snake_x, snake_y   2])
    return snake_body

把主程序中所有生成新蛇的地方换成

snake = create_new_snake()

创建新苹果,苹果不能出现在蛇的身体里,所以

def create_new_apple(snake_body):
    apple_in_game = False
    while not apple_in_game:
        apple_x = random.randint(0, rows - 1)
        apple_y = random.randint(0, columns - 1)
        # print(apple_x, apple_y)
        if (apple_x, apple_y) not in snake_body:
            new_apple = pygame.image.load('apple.png')
            new_apple = pygame.transform.scale(new_apple, (tile_size - 2, tile_size - 2))
            apple_x_location = apple_y * tile_size   x_margin/2
            apple_y_location = apple_x * tile_size   y_margin/2

            display.blit(new_apple, (apple_x_location, apple_y_location))
            apple_in_game = True
    return new_apple, (apple_x, apple_y), apple_x_location, apple_y_location

在主程序中,主循环之前创建一个苹果

if __name__ == '__main__':
    pygame.init()
    snake = create_new_snake()
    # 未按下按键时,默认的初识移动方向
    direction = directions[random.randint(0, 3)]
    # 创建一个小苹果
    apple, apple_location, apple_left, apple_top = create_new_apple(snake)
    # 吃到苹果标志
    apple_was_eaten = False

因为蛇与苹果之间有交互关系,如果蛇吃到苹果,那么蛇的身体会增加一格,也就是此次循环不删除列表的最后一个元素,所以定义了一格标志位。

在主循环中,与监测按键平级的地方,放入蛇与苹果关系检查。

        if apple_location in snake:
            apple, apple_location, apple_left, apple_top = create_new_apple(snake)
            apple_was_eaten = True
            my_score  = 1

无论🐍的那个部分碰到苹果,都算迟到苹果,也可以考虑只有舌头碰到才算,这根据自己喜好吧。碰到苹果后,苹果消失,得分等等…

还需要修改删除最后一个列表元素位置,同时因为蛇的身体会变长了,所以单纯的碰到边界游戏才结束,已经不够了,我们还需要加入如果蛇头碰到自己的身体,游戏还是要结束。

        if snake[0] in snake[1:]:
            snake = create_new_snake()
            #print(snake)
        elif is_right_direction(snake, new_body_location[0], new_body_location[1]):
            snake.insert(0, new_body_location)
            if not apple_was_eaten:
                del snake[-1]
            else:
                apple_was_eaten = False

如果不想结束的太突然,祭出万年不变的结束动画。

#游戏结束时特效
def game_over_animation(color=white, animation_speed=50):
    orig_surf = display.copy()
    flash_surf = pygame.Surface(display.get_size())
    flash_surf = flash_surf.convert_alpha()
    r, g, b = color
    for i in range(3):
        for start, end, step in ((0, 255, 1), (255, 0, -1)):
            for alpha in range(start, end, animation_speed * step):
                # 先铺一层新的界面,包含老界面所有内容
                display.blit(orig_surf, (0, 0))
                # flash界面填充颜色,开始很淡,越来越浓,然后越来越淡
                flash_surf.fill((r, g, b, alpha))
                # 把flash界面加载到display中
                display.blit(flash_surf, (0, 0))
                # draw_game_board(maze)
                # 刷新看效果
                pygame.display.update()
                fps_clock.tick(fps)

把动画放到程序中。即可欣赏结束动画。因为结束动画使用alpha时用到了颜色的RGB三色,这里需要把while的定义改为三色(255, 255, 255),而不是’white’。

还可以加入得分系统。

def make_score():
    score = pygame.font.Font('Kaiti.ttc', 20)
    score_surf = score.render('得分: %d' % my_score, True, text_color, bg_color)
    score_rect = score_surf.get_rect()
    score_rect.topleft = (screen_width-100, y_margin/8)
    return score_surf, score_rect

这个Kaiti.ttc字体是我从苹果系统字体里导出到工程里的,目前发现如果想要显示中文,这样比较方便,pygame自带的字体中,不知道那些可以正常显示。

在循环中加入

display.blit(score_display, score_rect)

然后运行游戏

虽然简陋,但是难看的贪食蛇完成了。我们还可以进一步增加难度,根据得分的增加,提高fps率,也就是提高了贪食蛇的移动速度。这个就不提了。还可以增加开始结束画面,暂停功能,声音,音效等等…

如果增加了这些,就不符合简陋的定义了,所以就不增加了,本身这些也太简单了…

到此这篇关于python贪吃蛇核心功能实现的文章就介绍到这了,更多相关python贪吃蛇内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

python贪吃蛇核心功能实现下的更多相关文章

  1. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  3. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  4. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  5. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  8. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  9. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  10. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部