首页 > 编程语言 >python之贪吃蛇

python之贪吃蛇

时间:2024-07-31 21:56:45浏览次数:10  
标签:python pygame SCREEN pos 贪吃蛇 GRID snake SIZE

废话不多说,直接上代码(确保已经安装 pygame)

import pygame
import random

# 基础设置
# 屏幕高度
SCREEN_HEIGHT = 480
# 屏幕宽度
SCREEN_WIDTH = 600
# 小方格大小
GRID_SIZE = 20

# 颜色设置
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)

# 初始化 Pygame
pygame.init()

# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("贪吃蛇游戏")

# 游戏时钟
clock = pygame.time.Clock()

# 初始蛇的位置和速度
snake_pos = [200, 100]
snake_speed = [0, 0]

# 食物的位置
food_pos = [random.randrange(1, (SCREEN_WIDTH // GRID_SIZE)) * GRID_SIZE,
            random.randrange(1, (SCREEN_HEIGHT // GRID_SIZE)) * GRID_SIZE]

# 蛇的身体列表
snake_body = [[snake_pos[0], snake_pos[1]]]

# 游戏结束标志
game_over = False

# 得分
score = 0


def draw_snake(snake_body):
    for pos in snake_body:
        pygame.draw.rect(screen, GREEN, [pos[0], pos[1], GRID_SIZE, GRID_SIZE])


def show_score(score):
    font = pygame.font.SysFont(None, 36)
    score_text = font.render("Score: " + str(score), 1, WHITE)
    screen.blit(score_text, [10, 10])


while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and snake_speed[1] != GRID_SIZE:
                snake_speed = [0, -GRID_SIZE]
            elif event.key == pygame.K_DOWN and snake_speed[1] != -GRID_SIZE:
                snake_speed = [0, GRID_SIZE]
            elif event.key == pygame.K_LEFT and snake_speed[0] != GRID_SIZE:
                snake_speed = [-GRID_SIZE, 0]
            elif event.key == pygame.K_RIGHT and snake_speed[0] != -GRID_SIZE:
                snake_speed = [GRID_SIZE, 0]

    # 根据速度移动蛇头
    snake_pos[0] += snake_speed[0]
    snake_pos[1] += snake_speed[1]

    # 如果蛇头碰到食物
    if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:
        food_pos = [random.randrange(1, (SCREEN_WIDTH // GRID_SIZE)) * GRID_SIZE,
                    random.randrange(1, (SCREEN_HEIGHT // GRID_SIZE)) * GRID_SIZE]
        score += 1
    else:
        # 移除蛇尾以模拟移动
        del snake_body[0]

    # 检查是否撞到自己或边界,游戏结束
    if [snake_pos[0], snake_pos[1]] in snake_body[1:]:
        game_over = True
    elif snake_pos[0] < 0 or snake_pos[0] >= SCREEN_WIDTH or snake_pos[1] < 0 or snake_pos[1] >= SCREEN_HEIGHT:
        game_over = True

    # 添加新的蛇头位置
    snake_body.append(list(snake_pos))

    # 绘制背景
    screen.fill(BLACK)

    # 绘制食物
    pygame.draw.rect(screen, WHITE, [food_pos[0], food_pos[1], GRID_SIZE, GRID_SIZE])

    # 绘制蛇
    draw_snake(snake_body)

    # 显示得分
    show_score(score)

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

    # 控制帧率
    clock.tick(10)

# 退出游戏
pygame.quit()

# 文字描述 主要功能技术
"""
food_pos = [random.randrange(1, (SCREEN_WIDTH // GRID_SIZE)) * GRID_SIZE,
            random.randrange(1, (SCREEN_HEIGHT // GRID_SIZE)) * GRID_SIZE]
GRID_SIZE 是单元格的大小
(SCREEN_WIDTH // GRID_SIZE)) * GRID_SIZE 先对宽度除以单元格取整取得整个宽度的单元格个数

 pygame.draw.rect(screen, GREEN, [pos[0], pos[1], GRID_SIZE, GRID_SIZE])
 画矩形,在屏幕,用什么颜色,在什么位置
 
 snake_body.append(list(snake_pos))
 增加长度
 
 pygame.display.flip()
 刷新屏幕
 
 pygame.draw.rect(screen, WHITE, [food_pos[0], food_pos[1], GRID_SIZE, GRID_SIZE])
 控制食物出现位置
"""

标签:python,pygame,SCREEN,pos,贪吃蛇,GRID,snake,SIZE
From: https://blog.csdn.net/dudnf/article/details/140833481

相关文章

  • Python - Context Managers
    withstatementHereisthesyntaxofthewithstatement:withexpressionasvar:statementsTheexpressionshouldbeacontextmanagerobject,oritshouldproduceacontextmanagerobject.Whenthiswithstatementisexecuted,thefirstthingthat......
  • python装饰器
    一前言环境:win10python3.10二函数中的函数如果定义了一个函数A,现在想在不影响函数A原先功能的情况下,新增加一些额外的功能,怎么办,下面是一个例子如上,本来原先执行test_except那句话只会打印over那句话,但现在执行test_except却会输出一些另外的东西这其中有个巧妙地东西就......
  • Python - Built-in Exceptions: Python Exceptions Class Hierarchy
     Figure20.4:Built-inexceptionsTheclassBaseExceptionisthebaseclassofallthebuilt-inexceptionclasses.FromBaseException,fourclassesnamedException,SystemExit,KeyboardInterruptandGeneratorExitarederived.Alltheremainingbuilt-in......
  • Python - Strategies to handle exceptions in your code
    Therearetwoapproachesthatcanbefollowedwhenwewanttodealwithexceptionsthatoccurduetounusualevents:LBYL-LookBeforeYouLeapEAFP-EasiertoAskforForgivenessthanPermissionIntheLBYLapproach,weavoidexceptions,whileinthe......
  • 全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函
    全网最适合入门的面向对象编程教程:29类和对象的Python实现-断言与防御性编程和help函数的使用摘要:在Python中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及assert语句的使用,同时介绍了防御性编程和help()函数......
  • Python入门知识点 10--闭包与装饰器
    一、直接与间接程序开发潜规则生活中:   有台电脑,他的硬盘空间不够了,里面的资料我不能动,也不能删,咋办   1.加装硬盘--直接解决--前提是我的电脑能加装   2.插个u盘--间接解决-->没有特别的要求,比较灵活   开发潜规则:   代码拓展-->开放-->可......
  • python log运算如何写
    Python中用于计算对数的log()方法,是Python入门基础中的必会的方法,需要的朋友可以参考下。log()方法返回x的自然对数,x>0。语法以下是log()方法的语法:import math math.log( x )注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用......
  • Python - operator module
    >>>list(map(lambdax,y:x*y,[1,2,3,4],[5,6,7,8]))[5,12,21,32]Herewehavecalledthemapfunctionandsentalambdaexpressionasfirstargument.Insteadofthelambdafunction,youcansendoperator.mul.>>>list(map(operator......
  • Python操作excel常用操作介绍,入门首选
            使用Python操作Excel文件有许多常用操作。以下是一些常见的操作及其简要描述,下面是全面详细的示例,展示如何使用Python操作Excel文件,我们将使用pandas和openpyxl库来进行各种操作。常用库pandas:用于数据分析和处理,支持读取和写入Excel文件。openpyxl:用于读......
  • Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)
    原文链接:http://tecdat.cn/?p=22862原文出处:拓端数据部落公众号如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险。金融和投资组合风险管理中的VaR?VaR是"风险价值"的缩写,是许多公司和银行用来确定其公司内部金融风险水平的工具。风险值是为......