用python写一个简单的贪吃蛇游戏

时间: 2023-07-04 18:21:04 浏览: 52
好的,这里提供一个基于 Python3 和 Pygame 的简单贪吃蛇游戏代码: ```python import pygame import random # 定义一些常量 SCREEN_WIDTH = 480 SCREEN_HEIGHT = 480 BLOCK_SIZE = 20 SNAKE_INIT_POS = [(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)] FONT_SIZE = 24 FONT_COLOR = (255, 255, 255) # 初始化 Pygame pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("贪吃蛇") # 定义字体 font = pygame.font.SysFont(None, FONT_SIZE) # 定义颜色 white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) # 定义游戏对象 class Snake: def __init__(self): self.body = SNAKE_INIT_POS[:] self.direction = "right" self.grow = False def move(self): # 计算新的蛇头位置 x, y = self.body[0] if self.direction == "up": y -= BLOCK_SIZE elif self.direction == "down": y += BLOCK_SIZE elif self.direction == "left": x -= BLOCK_SIZE elif self.direction == "right": x += BLOCK_SIZE # 插入新的蛇头 self.body.insert(0, (x, y)) # 如果不需要增长,删除最后一个方块 if not self.grow: self.body.pop() else: self.grow = False def grow_snake(self): self.grow = True def is_collided(self, x, y): # 判断蛇是否碰到了自己 for block in self.body[1:]: if block == (x, y): return True # 判断蛇是否碰到了边界 if x < 0 or x >= SCREEN_WIDTH or y < 0 or y >= SCREEN_HEIGHT: return True return False def draw(self): for x, y in self.body: pygame.draw.rect(screen, green, (x, y, BLOCK_SIZE, BLOCK_SIZE)) class Food: def __init__(self): self.x, self.y = self.generate_new_pos() def generate_new_pos(self): x = random.randint(0, SCREEN_WIDTH // BLOCK_SIZE - 1) * BLOCK_SIZE y = random.randint(0, SCREEN_HEIGHT // BLOCK_SIZE - 1) * BLOCK_SIZE return x, y def draw(self): pygame.draw.rect(screen, red, (self.x, self.y, BLOCK_SIZE, BLOCK_SIZE)) # 初始化游戏对象 snake = Snake() food = Food() # 游戏循环 clock = pygame.time.Clock() while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP and snake.direction != "down": snake.direction = "up" elif event.key == pygame.K_DOWN and snake.direction != "up": snake.direction = "down" elif event.key == pygame.K_LEFT and snake.direction != "right": snake.direction = "left" elif event.key == pygame.K_RIGHT and snake.direction != "left": snake.direction = "right" # 移动蛇 snake.move() # 判断是否吃到食物 if snake.body[0] == (food.x, food.y): snake.grow_snake() food.x, food.y = food.generate_new_pos() # 判断是否游戏结束 if snake.is_collided(snake.body[0][0], snake.body[0][1]): screen.fill(black) text = font.render("Game Over!", True, FONT_COLOR) text_rect = text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)) screen.blit(text, text_rect) pygame.display.update() pygame.time.wait(2000) pygame.quit() quit() # 绘制游戏对象 screen.fill(black) snake.draw() food.draw() pygame.display.update() # 控制帧率 clock.tick(10) ``` 这个贪吃蛇游戏使用 Pygame 库来实现,可以在终端或者 Pycharm 等 Python 开发环境中运行。通过按键来控制蛇的方向,蛇碰到边界或者自己时游戏结束。

相关推荐

最新推荐

recommend-type

使用Python第三方库pygame写个贪吃蛇小游戏

主要介绍了使用Python第三方库pygame写个贪吃蛇小游戏,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

一个Python工具箱,用于在PyTorch TensorFlow和JAX中创建欺骗神经网络的对抗性示例.zip

一个Python工具箱,用于在PyTorch TensorFlow和JAX中创建欺骗神经网络的对抗性示例
recommend-type

基于three.js实现一个由多个div构成的球体的运动,并以此为基础制作的一个小型游戏

【作品名称】:基于three.js实现一个由多个div构成的球体的运动,并以此为基础制作的一个小型游戏 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于three.js实现一个由多个div构成的球体的运动,并以此为基础制作的一个小型游戏
recommend-type

maven下载安装包全套软件安装

maven下载安装包全套软件安装
recommend-type

InnoSetup 自动化打包工具 支持多种语言

自动化打包工具
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。