python 贪吃蛇(源代码)[通俗易懂]

python 贪吃蛇(源代码)[通俗易懂]#话不多说,直接上代码,有需要的小伙伴可以直接拿去用importpygameimportrandomimportsysimporttimefrompygame.localsimport*#从pygame模块导入常用的函数和常量#定义颜色变量black_colour=pygame.Color(0,0,0)white_colour=pygame.Color(255,255,255)red_colour=pygame.Color(255,0,0.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

#话不多说,直接上代码,有需要的小伙伴可以直接拿去用

import pygame
import random
import sys
import time
from pygame.locals import *  # 从pygame模块导入常用的函数和常量

# 定义颜色变量
black_colour = pygame.Color(0, 0, 0)
white_colour = pygame.Color(255, 255, 255)
red_colour = pygame.Color(255, 0, 0)
grey_colour = pygame.Color(150, 150, 150)


# 定义游戏结束函数
def GameOver(gamesurface):
    # 设置提示字体的格式
    GameOver_font = pygame.font.SysFont("MicrosoftYaHei", 16)

    # 设置提示字体的颜色
    GameOver_colour = GameOver_font.render('Game Over', True, grey_colour)

    # 设置提示位置
    GameOver_location = GameOver_colour.get_rect()
    GameOver_location.midtop = (320, 10)
    gamesurface.blit(GameOver_colour, GameOver_location)

    # 提示运行信息
    pygame.display.flip()

    # 等待5秒
    time.sleep(5)

    # 退出游戏
    pygame.quit()

    # 退出程序
    sys.exit()


# 定义主函数
def main():
    # 初始化pygame
    pygame.init()
    pygame.time.Clock()
    ftpsClock = pygame.time.Clock()

    # 创建一个窗口
    gamesurface = pygame.display.set_mode((640, 480))

    # 设置窗口的标题
    pygame.display.set_caption('贪吃蛇~')

    # 初始化变量
    # 初始化贪吃蛇的起始位置
    snakeposition = [100, 100]

    # 初始化贪吃蛇的长度
    snakelength = [[100, 100], [80, 100], [60, 100]]

    # 初始化目标方块的位置
    square_purpose = [300, 300]

    # 初始化一个数来判断目标方块是否存在
    square_position = 1

    # 初始化方向,用来使贪吃蛇移动
    derection = "right"
    change_derection = derection

    # 进行游戏主循环
    while True:
        # 检测按键
        for event in pygame.event.get():
            if event.type == QUIT:
                # 退出程序
                pygame.quit()
                sys.exit()

            elif event.type == KEYDOWN:
                # 判断按的键,用w,s,a,d来表示上下左右
                if event.key == K_RIGHT or event.key == ord('d'):
                    change_derection = "right"
                if event.key == K_LEFT or event.key == ord('a'):
                    change_derection = "left"
                if event.key == K_UP or event.key == ord('w'):
                    change_derection = "up"
                if event.key == K_DOWN or event.key == ord('s'):
                    change_derection = "down"
                if event.key == K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))

        # 判断移动的方向是否相反
        if change_derection == 'left' and not derection == 'right':
            derection = change_derection
        if change_derection == 'right' and not derection == 'left':
            derection = change_derection
        if change_derection == 'up' and not derection == 'down':
            derection = change_derection
        if change_derection == 'down' and not derection == 'up':
            derection = change_derection

        # 根据方向,改变坐标
        if derection == 'left':
            snakeposition[0] -= 20
        if derection == 'right':
            snakeposition[0] += 20
        if derection == 'up':
            snakeposition[1] -= 20
        if derection == 'down':
            snakeposition[1] += 20

        # 增加蛇的长度
        snakelength.insert(0, list(snakeposition))

        # 判断是否吃掉目标方块
        if snakeposition[0] == square_purpose[0] and snakeposition[1] == square_purpose[1]:
            square_position = 0
        else:
            snakelength.pop()

        # 重新生成目标方块
        if square_position == 0:
            # 随机生成x,y,扩大二十倍,在窗口范围内
            x = random.randrange(1, 32)
            y = random.randrange(1, 24)
            square_purpose = [int(x * 20), int(y * 20)]
            square_position = 1
        # 绘制pygame显示层
        gamesurface.fill(black_colour)
        for position in snakelength:
            pygame.draw.rect(gamesurface, white_colour, Rect(position[0], position[1], 20, 20))
            pygame.draw.rect(gamesurface, red_colour, Rect(square_purpose[0], square_purpose[1], 20, 20))

        # 刷新pygame显示层
        pygame.display.flip()

        # 判断是否死亡
        if snakeposition[0] < 0 or snakeposition[0] > 620:
            GameOver(gamesurface)
        if snakeposition[1] < 0 or snakeposition[1] > 460:
            GameOver(gamesurface)
        for snakebody in snakelength[1:]:
            if snakeposition[0] == snakebody[0] and snakeposition[1] == snakebody[1]:
                GameOver(gamesurface)

        # 控制游戏速度
        ftpsClock.tick(5)


if __name__ == "__main__":
    main()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python生成可执行文件linux_python运行exe程序

    python生成可执行文件linux_python运行exe程序Python生成可执行文件exe一、安装pyinstallerpipinstallpyinstaller二、使用pyinstaller命令使用示例相对路径在程序目录中,运行命令pyinstallermyscript.py则可以在当前目录生成两个文件夹dist和build,exe文件在dist文件夹中。绝对路径在程序目录中,运行命令pyinstallerC:\mys…

    2022年5月3日
    155
  • java 查看线程死锁_java 查看线程死锁

    java 查看线程死锁_java 查看线程死锁那我们怎么确定一定是死锁呢?有两种方法。1>使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打开。1)连接到需要查看的进程。2)打开线程选项卡,然后点击左下角的“检测死锁”3)jconsole就会给我们检测出该线程中造成死锁的线程,点击选中即可查看详情:从上图中我们可以看出:①在线程Thread-1中,从状态可以看出,它想申请Paper这个资源,但是这个资…

    2022年7月13日
    23
  • PHP工厂模式和抽象工厂模式

    PHP工厂模式和抽象工厂模式PHP工厂模式:php设计模式笔记,第二个是工厂模式。工厂,我们就可以联想到是一座房子,里面有N多车间,生产着不同系列的产品。我们如果是采购的话,要看什么产品,工厂很快从随便从其中一个车间拿出一个就解决,不会影响其他车间的工作,各自分工明确。在复杂的情况,也简单化了。php里面的工厂模式,也类似,由一个类,看作是工厂,在类里面构造一个对外方法接口,返回不同类型的类实例。工厂模式的好处:在复

    2022年7月25日
    6
  • C++中list用法详解[通俗易懂]

    C++中list用法详解[通俗易懂]1.关于list容器list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地

    2022年7月12日
    23
  • pandas drop参数_pandas concat函数

    pandas drop参数_pandas concat函数pandas中dropna()参数详解DataFrame.dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)1.axis参数确定是否删除包含缺失值的行或列axis=0或axis=’index’删除含有缺失值的行,axis=1或axis=’columns’删除含有缺失值的列,importpandasaspdimportnumpyasnpdf=pd.DataFrame({“name”:[‘Alfr

    2022年9月18日
    0
  • 动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]

    动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]本文是众多使用技巧中其中的一篇,全部使用技巧点击链接查看,保证你收获满满我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题,有兴趣的可以去我的主页了解更多计算机学科的精品思维导图整理本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!本文提到的所有软件和工具,可关注公众号一起学计算机点击资源获取获得本人最常用的网站就是AGE动漫,这是我用过最好的动漫网站,资源算是最全的吧,并且大多数动漫都提供百度云链接,可下载观看,…

    2022年8月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号