用python制作贪吃蛇游戏

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的长度

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值