教你用322行Python代码编写贪吃蛇

这篇具有很好参考价值的文章主要介绍了教你用322行Python代码编写贪吃蛇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

安装和导入 

规则

初始化

设定Surface,变量和显示数字的坐标 

函数

线程 

主要部分

总结

源码下载 


教你用322行Python代码编写贪吃蛇

 贪吃蛇是一个很常见的小游戏,我们如何用Python去实现呢。


安装和导入 

pip install pygame
pip install keyboard
pip install pickledb

通过命令提示符安装所需模块。(以上非Python代码)

#导入
import pygame, keyboard, random, threading, time, pickledb

这个程序用到了pygame作为显示模块,keyboard捕获键盘操,pickledb记录最高纪录。


规则

#显示规则
print()
print('方向键控制方向')
print('\'esc\'退出')
print('\'alt\'暂停')
print('\'space\'继续')
print('每吃掉一个莓果,蛇身长长一格')
print('撞到蛇身或窗口边缘即为死亡')
print('死亡后\'esc\'退出,\'enter\'再来一局')

初始化

#初始化
pygame.init()

#设定窗口
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Greedy Snake')

 执行以上代码就设定好了贪吃蛇的窗口。


设定Surface,变量和显示数字的坐标 

#设定蛇身
body = pygame.Surface((20, 20))
body.fill('yellow')

#设定莓果
berries = pygame.Surface((20, 20))
berries.fill('red')

#设定数字方块(用于显示数字)
block = pygame.Surface((4, 4))
#设定变量
T = 0
db = pickledb.load('Mark.db', False)
HI = db.get('HiMark')
B = False

函数

def keyname(key) :
    #键盘捕获
    global KEY
    KEY = key.name
keyboard.on_press(keyname)

用on_press绑定了keyname后,当键盘按下时会执行keyname函数。(key.name是按键的名称)

def snake() :
    #显示蛇身
    global path
    for xy in path :
        screen.blit(body, xy)

def food() :
    #显示食物
    global fx, fy
    screen.blit(berries, (fx, fy))

def eat() :
    #检测是否吃掉食物
    if (x, y) == (fx, fy) :
        return True
    else :
        return False

def crash() :
    #检测是否碰撞
    if path.count((x, y)) != 0 :
        return True
    elif x < 0 or x > 480 or y < 0 or y > 480 :
        return True
    else :
        return False

def count() :
    #计时线程函数
    global T
    while True :
        if B :
            time.sleep(1)
            T += 1

def timer() :
    #显示时间
    global T, number
    a = T // 100
    b = T % 100 // 10
    c = T % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 6, 10
    block.fill('white')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32

def mark() :
    #显示分数
    global M, number
    a = M // 100
    b = M % 100 // 10
    c = M % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 395, 10
    block.fill('white')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32

def hi() :
    #显示最高纪录
    global HI, number
    a = HI // 100
    b = HI % 100 // 10
    c = HI % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 263, 10
    block.fill('grey')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32

线程 

#启动计时线程
time_count_thread = threading.Thread(target = count)
time_count_thread.start()

 线程可以在主线程的运行过程中运行,起到计时的作用。


主要部分

以下就是程序的主要部分,实现了对按键名称进行判断、蛇的移动、蛇吃掉食物后的生长和判断死亡。

while True :
    #变量初始化
    KEY = 'up'
    lKEY = KEY
    x, y = 240, 240
    path = []
    path.append((x, y))
    fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
    while path.count((fx, fy)) != 0 :
        fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
    T = 0
    M = 0
    B = True

    while True :
        time.sleep(0.1)

        #检测是否按下退出按钮
        for event in pygame.event.get() :
            if event.type == pygame.QUIT :
                pygame.quit()
                exit()
        
        #检测键盘按键
        if (KEY == 'up' and lKEY != 'down') or (KEY == 'w' and lKEY != 's') :
            y -= 20
            lKEY = KEY
        elif (KEY == 'down' and lKEY != 'up') or (KEY == 's' and lKEY != 'w')  :
            y += 20
            lKEY = KEY
        elif (KEY == 'left' and lKEY != 'right') or (KEY == 'a' and lKEY != 'd')  :
            x -= 20
            lKEY = KEY
        elif (KEY == 'right' and lKEY != 'left') or (KEY == 'd' and lKEY != 'a')  :
            x += 20
            lKEY = KEY
        elif KEY == 'alt' or KEY == 'right alt' :
            B = False
            while True :
                pygame.event.wait()
                if KEY == 'space' :
                    KEY = lKEY
                    B = True
                    break
                elif KEY == 'esc' :
                    pygame.quit()
                    if M > HI :
                        HI = M
                        db.set('HiMark', HI)
                        db.dump()
                    exit()
            continue
        elif KEY == 'esc' :
            pygame.quit()
            if M > HI :
                HI = M
                db.set('HiMark', HI)
                db.dump()
            exit()
        else :
            KEY = lKEY
            continue

        #检测是否碰撞或吃掉食物
        if crash() :
            break
        if eat() :
            M += 1
            fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
            while path.count((fx, fy)) != 0 :
                fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
        else :
            del path[0]
        
        #更新屏幕内容
        path.append((x, y))
        screen.fill('black')
        snake()
        food()
        timer()
        mark()
        hi()
        pygame.display.flip()

    #保存最高纪录
    if M > HI :
        HI = M
        db.set('HiMark', HI)
        db.dump()
    
    B = False

    #检测是否退出或再来一局
    while True :
        event = pygame.event.wait()
        if event.type == pygame.QUIT :
            pygame.quit()
            exit()
        elif KEY == 'esc' :
            pygame.quit()
            exit()
        elif KEY == 'return' or KEY == 'enter' :
            break

总结

如果你将以上所有的代码按顺序编写在一些,就可以运行完整的贪吃蛇了。这些代码都很简单,适合初学者学习。

希望这篇文章对您有帮助,感谢浏览。

源码下载 

GitHub源码文章来源地址https://www.toymoban.com/news/detail-408199.html

到了这里,关于教你用322行Python代码编写贪吃蛇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你用python一键抢12306火车票(附代码)

    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕… 然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难! 那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票! 城市cookie可根据具体需求自

    2024年02月15日
    浏览(49)
  • 手把手教你用SQLServer连接Visual Studio2019并编写一个学生信息管理页面

    目录 安装SQLServer 创建新项目 建数据库建表 窗体设计 代码实现  整体效果 ​ 用SQLServer连接Visual Studio,首先需要下载SQLServer app。 下载教程,我之前写过,可以点击如下链接先下载安装SQLServer: SQL Server(express)安装教程 安装好SQL之后,打开VisualStudio2019,新建一个window项目 ,步

    2024年02月12日
    浏览(38)
  • 前端编写贪吃蛇游戏-附详细代码

    当我们在前端编写贪吃蛇游戏时,可以按照以下步骤进行: 先看截图: 设置游戏板:创建一个HTML元素作为游戏板,可以使用 div 元素,并为其设置合适的样式。 绘制蛇和食物:使用JavaScript代码在游戏板上绘制蛇和食物。可以使用CSS样式设置蛇和食物的样式。 移动蛇:编写

    2024年02月10日
    浏览(34)
  • 手把手教你用代码画架构图

    作者:京东物流 覃玉杰 本文将给大家介绍一种简洁明了软件架构可视化模型——C4模型,并手把手教大家如何使用 代码 绘制出精美的C4架构图。 阅读本文之后,读者画的架构图将会是这样的: 注:该图例仅作绘图示例使用,不确保其完整性、可行性。 C4是软件架构可视化

    2024年02月04日
    浏览(41)
  • 保姆级教学,教你用配置SSH拉取github代码

    ⚡️git版本2.37 🌋window10/11 SSH 拉取 GitHub 上的代码具有许多优点,如数据安全性、身份验证的便利性、访问权限的控制和速度的提升。对于频繁与 GitHub 交互的开发者来说,使用 SSH 是一个值得考虑的选择。 下面请花费10分钟时间配置一下吧 因为还未配置是无效的 (名称为

    2024年02月11日
    浏览(34)
  • 小白指南:手把手教你用低代码开发一个应用页面

    原文链接: 小白指南:手把手教你用低代码开发一个应用页面,点击链接查看更多技术内容; 一、什么是低代码开发 在了解低代码开发之前,我们先看看使用低代码开发的效果。 低代码开发效果示例 低代码开发是DevEco Studio为HarmonyOS开发者提供的可视化页面的开发方式,具

    2024年02月09日
    浏览(29)
  • 教你用python写RSA加密算法

    RSA加密算法是一种非对称加密算法,即使用不同的密钥进行加密和解密。它是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年提出的,是目前最广泛使用的公钥加密算法之一 。 RSA加密算法的原理是基于数论中的一个难题:

    2024年02月09日
    浏览(37)
  • Python编写游戏——贪吃蛇(含源码)

    程序运行截图:   微信扫码,“贪吃蛇”领取 腾讯文档-在线文档 https://docs.qq.com/doc/DU3lOZHhyQk9BRWVu  部分代码段:

    2024年02月14日
    浏览(31)
  • 实战! 30分钟教你用SoFlu软件机器人搭建完成低代码平台

    最近几年,“低代码”俨然成了热门话题,各大云厂商都在加码。作为普通企业的我们是否有也可以深度定制一套自己的“低代码”平台呢? 答案是肯定的,目前主流的就是自建和外购两种方式,随着低代码的发展和广泛应用,这两种方式的不足之处也日益凸显。 外购:贵

    2024年02月14日
    浏览(29)
  • 几行代码,轻松教你用Java 将 Word 文档转换为 HTML

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像

    2024年02月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包