首页 > 编程语言 >用python制作贪吃蛇

用python制作贪吃蛇

时间:2024-06-03 15:59:55浏览次数:14  
标签:10 python screen food 贪吃蛇 pygame position 制作 snake

python介绍

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。

Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。

像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。

现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。

Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。

下面开始用python进行游戏开发

  1. 用python制作游戏,要用到pygame库,下载方法为打开终端输入 pip install pygame  回车即可进行下载
  2. 新建项目首先引用pygame库  

    import pygame
  3. 在引入随机函数库
    import random
  4. 引入sys库用于访问与Python解释器相关的变量和函数,例如退出程序
    import sys
  5. 初始化pygame模块,准备使用pygame的功能。
    pygame.init() 
  6. 设置游戏窗口大小
    screen_width = 640  #设置屏幕的宽度和高度。
    screen_height = 480  
    screen = pygame.display.set_mode((screen_width, screen_height))  #创建游戏窗口。
  7. 设置游戏颜色
    
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255) 
    GREEN = (0, 255, 0)
    RED = (213, 50, 80)  #定义几种颜色,用于绘制蛇、食物和背景。
  8. 设置蛇的初始位置和食物的位置
    snake_position = [100, 50]
    snake_body = [[100, 50], [90, 50], [80, 50]]
    food_position = [random.randrange(1, (screen_width//10)) * 10, random.randrange(1, (screen_height//10)) * 10]
    food_spawn = [True, True]  # 用于跟踪食物是否需要重新生成
  9. 主游戏部分用一个死循环来保持窗口

下面是完整的代码以及解释

import pygame  #用于创建游戏窗口、处理图形和事件。
import sys  #用于访问与Python解释器相关的变量和函数,例如退出程序。
import random  #用于生成随机数,用于放置食物。
 
# 初始化pygame
pygame.init()  #初始化pygame模块,准备使用pygame的功能。

# 设置屏幕大小
screen_width = 640  #设置屏幕的宽度和高度。
screen_height = 480  
screen = pygame.display.set_mode((screen_width, screen_height))  #创建游戏窗口。

# 设置颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255) 
GREEN = (0, 255, 0)
RED = (213, 50, 80)  #定义几种颜色,用于绘制蛇、食物和背景。
# 设置蛇的初始位置和食物的位置
snake_position = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
food_position = [random.randrange(1, (screen_width//10)) * 10, random.randrange(1, (screen_height//10)) * 10]
food_spawn = [True, True]  # 用于跟踪食物是否需要重新生成
'''
设置蛇的初始位置和身体部分的位置。
随机生成食物的位置。
food_spawn用于标记食物是否需要重新生成。
'''
# 设置蛇的初始方向
direction = 'RIGHT'
change_to = direction
'''
初始化蛇的移动方向为向右。
change_to用于存储玩家输入的新方向。
'''
# 设置速度
speed = 15
clock = pygame.time.Clock()
'''
设置游戏的速度。
创建一个时钟对象来控制游戏的帧率。
'''
# 主游戏循环
while True:
    # 检查按键事件
    '''
主循环是游戏的核心,不断运行直到玩家退出。
事件处理:监听玩家的按键操作。
移动逻辑:根据玩家的按键更新蛇的位置。
食物生成逻辑:当蛇吃掉食物后,生成新的食物。
碰撞检测:检查蛇是否碰到边界或自己。
绘制逻辑:在屏幕上绘制蛇的身体和食物。
刷新屏幕:更新屏幕上的显示。
控制游戏速度:通过clock.tick(speed)控制游戏的帧率。
'''
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            '''
监听事件队列中的事件。
如果是退出事件,则退出游戏。
如果是按键按下事件,则根据按键更改蛇的移动方向。
'''
            if event.key == pygame.K_UP and direction != 'DOWN':
                change_to = 'UP'
            if event.key == pygame.K_DOWN and direction != 'UP':
                change_to = 'DOWN'
            if event.key == pygame.K_LEFT and direction != 'RIGHT':
                change_to = 'LEFT'
            if event.key == pygame.K_RIGHT and direction != 'LEFT':
                change_to = 'RIGHT'
            if event.key == pygame.K_q:
                pygame.event.post(pygame.event.Event(pygame.QUIT))

    # 确定蛇的方向
    direction = change_to

    # 根据方向移动蛇头
    if direction == 'UP':
        snake_position[1] -= 10
    if direction == 'DOWN':
        snake_position[1] += 10
    if direction == 'LEFT':
        snake_position[0] -= 10
    if direction == 'RIGHT':
        snake_position[0] += 10

    # 蛇身体增长机制
    snake_body.insert(0, list(snake_position))
    if snake_position == food_position and food_spawn[0]:
        food_spawn[0] = False
    else:
        snake_body.pop()

    # 食物随机生成
    if not food_spawn[0]:
        while True:
            new_food_position = [random.randrange(1, (screen_width//10)) * 10, random.randrange(1, (screen_height//10)) * 10]
            if new_food_position not in snake_body and new_food_position != food_position:
                food_position = new_food_position
                break
        food_spawn[0] = True





    # 检查蛇是否碰到边界
    if snake_position[0] < 0:
        snake_position[0] = screen_width - 10
    if snake_position[0] > screen_width - 10:
        snake_position[0] = 0
    if snake_position[1] < 0:
        snake_position[1] = screen_height - 10
    if snake_position[1] > screen_height - 10:
        snake_position[1] = 0

    # 检查蛇是否碰到自己
    if snake_position in snake_body[1:]:
        snake_body = [snake_position]  # 保留蛇头
        direction = 'STOP'  # 停止蛇的移动

    # 背景
    screen.fill(BLACK)

    # 画蛇身体
    for pos in snake_body:
        pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10))

    # 画食物
    pygame.draw.rect(screen, WHITE, pygame.Rect(food_position[0], food_position[1], 10, 10))

    # 刷新屏幕
    pygame.display.update()

    # 控制游戏速度
    clock.tick(speed)

上面的代码对贪吃蛇的游戏进行了初步的开发,实现了当蛇即使碰到了编边界也不会死亡,但当蛇头碰到身体时会回归到1的长度

标签:10,python,screen,food,贪吃蛇,pygame,position,制作,snake
From: https://blog.csdn.net/2201_75824633/article/details/139416686

相关文章

  • 今天分享一篇Python启动浏览器的文章
    1.首先是浏览器选择,因为我之前自己电脑测试,安装了Firefox浏览器,版本号:45.0.2。但是这个版本号的浏览器找不到对应的驱动,但是本人又不想卸载这个浏览器,所以转而使用谷歌浏览器进行自动化测试了。Firefox驱动下载地址:https://github.com/mozilla/geckodriver/releases,如果有需要的......
  • 【安卓ROM包中Userdata.img 的组成部分和制作方法】
    userdata.img是Android设备上的一个重要分区映像文件,通常用于存储用户数据,包括用户安装的应用程序、应用数据、用户设置和其他用户生成的内容。这个分区是设备运行时动态变化的,因此创建和管理userdata.img的方式有所不同。下面是userdata.img的主要组成部分和制作方法的详......
  • Python 将Word/ Exce/ PDF/ PPT文档转为OFD文档
    OFD(OpenFixed-layoutDocument)是我国自主制定的一种开放版式文件格式标准。OFD文档具有不易被篡改、格式独立、版式固定等特点,目前常用于政府公文、金融、电子发票等领域。如果想要通过Python将Office文档(如Word、Excel或PowerPoint)及PDF文档转换为OFD格式,可以参考本文中提供的......
  • Python基础-- 组合类型
    Python基础--组合类型Python基础--组合类型Python基础--组合类型(一)列表的特征(二)列表的创建(三)列表的访问(四)列表的操作方法(五)列表支持的运算符二、元组(一)元组特征和基本概念(一)元组和列表的对比三、字典(一)字典的特征(二)字典元素的访问(三)字典的操作......
  • Python基础---程序的控制结构
    Python基础—程序的控制结构Python基础---程序的控制结构一、程序流程成图(一)顺序结构(二)程序的分支控制结构1:单分支结构2.二分支结构3.多分支结构4.分支嵌套(三)程序的循环结构1、while循环2.while循环扩展模式3.for循环4.for循环扩展模式二、循环控制语句(一)conti......
  • grafana中制作图表的一些小问题
    1.在grafana中创建的一个表,表中有多个指标,而有些指标的标签是不一样的,比如有的是以node分组的,而一些标签中没有node,但是具体值一样的,标签名为instance,所以这里就需要将instance替换为node,否则分组不同是不能显示在一张表上的,使用label_replace(原本的promql,"node","$1","inst......
  • 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格
    原文链接:基于ArcGISPro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247605969&idx=5&sn=705796e676bf040553826afee4c59d47&chksm=fa821f36cdf596205b27296a149bf74fa762fbfd5256d2dcc08f1......
  • SMOGN算法Python实现:解决回归分析中的数据不平衡
      本文介绍基于Python语言中的smogn包,读取.csv格式的Excel表格文件,实现SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法。  在不平衡回归问题中,样本数量的不均衡性可能导致模型在预测较少类别的样本时表现较差;为了解决这个问题,可以使用SMOTE(Sy......
  • Python群发邮件的功能如何实现?怎么使用?
    Python群发邮件需要哪些库支持?如何使用Python发信?对于Python开发者来说,实现群发邮件功能是一项非常有用的技能,无论是用于营销、通知还是其他目的。AokSend将介绍如何使用Python来实现群发邮件的功能,让你轻松管理大量邮件发送。Python群发邮件:安装软件要实现群发邮件功能,我......
  • 《Python进阶》学习笔记
    《Python进阶》学习笔记部分原创,仅个人关于《Python进阶》的学习笔记importwarnings#忽略警告warnings.filterwarnings("ignore")*args的用法deftest_args(f_arg,*argv):print("第一个参数是:",f_arg)forarginargv:print("其他argv参数是:",arg)......