pygame编写贪吃蛇
时间: 2025-03-06 19:58:51 浏览: 28
`pygame`是一个用于创建游戏和其他多媒体应用程序的Python库。编写贪吃蛇这个游戏能很好地帮助您理解如何使用Pygame进行基本的游戏开发。
下面提供的是一个简化版的贪吃蛇程序结构:
首先需要安装 `pygame`, 使用命令行输入`pip install pygame`.
导入必要的模块,并初始化Pygame环境。
```python
import pygame
import time
import random
# 初始化 Pygame 环境
pygame.init()
```
设置一些常量值比如窗口大小、颜色等。
```python
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
dis_width = 600 # 游戏窗口宽度
dis_height = 400 # 游戏窗口高度
snake_block = 10 # 蛇身方块大小
...
```
定义绘制蛇体及食物位置更新等功能函数;构建主循环,监听玩家按键操作控制方向,处理碰撞检测以及判定是否吃到食物并增长长度等等逻辑内容。
完整代码会更长一点,包括以上所有功能实现细节还有其他辅助性的部分如显示分数信息之类的,在这里不再赘述了,有兴趣的话可以尝试自己动手完成整个项目或者查阅网上的开源案例作参考学习之用。
相关问题
pygame实现贪吃蛇
### 使用 Pygame 实现贪吃蛇游戏
#### 安装 Pygame 库
为了能够使用 Pygame 开发游戏,首先需要安装该库。可以通过以下命令来完成安装:
```bash
pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple
```
这会从清华大学的镜像源下载并安装最新版本的 Pygame[^4]。
#### 初始化 Pygame 和设置窗口
创建一个新的 Python 文件,在文件开头导入必要的模块,并初始化 Pygame 环境以及设定屏幕尺寸等参数:
```python
import sys, time
import random
import pygame
from pygame.locals import *
pygame.init()
fps_clock = pygame.time.Clock()
play_surface = pygame.display.set_mode((720, 460))
pygame.display.set_caption('Snake Game')
```
上述代码片段设置了游戏运行的基础环境,包括帧率控制对象 `fps_clock` 及显示表面 `play_surface` 的定义[^1]。
#### 定义颜色变量和其他常量
为了让后续编码更加简洁明了,可以提前声明一些常用的颜色值及其他固定数值作为全局变量:
```python
red_color = pygame.Color(255, 0, 0) # 游戏结束时使用的红色
black_color = pygame.Color(0, 0, 0) # 蛇的身体部分采用黑色
white_color = pygame.Color(255, 255, 255)# 食物位置标记白色方块
green_color = pygame.Color(0, 255, 0)
snake_position = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
food_position = [random.randrange(1, 72)*10, random.randrange(1, 46)*10]
food_spawn = True
direction = 'RIGHT'
change_to = direction
score = 0
```
这里不仅包含了用于绘制图形的颜色配置,还设定了初始状态下蛇的位置、长度及其移动方向;同时也随机生成了一个食物坐标点等待被吃掉[^3]。
#### 控制逻辑处理函数
编写一个名为 `main()` 的主循环函数用来持续监听键盘输入事件并对相应操作做出反应,比如改变前进路径或是退出程序:
```python
def main():
global change_to
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_RIGHT or event.key == ord('d'):
change_to = 'RIGHT'
if event.key == K_LEFT or event.key == ord('a'):
change_to = 'LEFT'
if event.key == K_UP or event.key == ord('w'):
change_to = 'UP'
if event.key == K_DOWN or event.key == ord('s'):
change_to = 'DOWN'
validate_direction_and_change(direction, change_to)
...
```
此段落展示了如何捕捉用户的按键动作以调整当前运动轨迹的方向。值得注意的是,当检测到关闭窗口请求时,则调用 `pygame.quit()` 方法释放资源后终止整个应用程序进程[^2]。
#### 更新状态与渲染画面
最后一步是在每次迭代过程中更新场景中的各个元素的状态(如蛇身增长与否),并通过绘图指令刷新屏幕上呈现的内容:
```python
...
if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:
score += 1
food_spawn = False
else:
snake_body.pop()
if not food_spawn:
food_position = [random.randrange(1, 72)*10, random.randrange(1, 46)*10]
food_spawn = True
play_surface.fill(black_color)
for pos in snake_body:
pygame.draw.rect(play_surface, green_color, Rect(pos[0], pos[1], 10, 10))
pygame.draw.rect(play_surface, white_color, Rect(food_position[0], food_position[1], 10, 10))
show_score(1, white_color, 'consolas', 20)
pygame.display.flip()
fps_clock.tick(23)
...
def show_score(choice, color, font, size):
score_font = pygame.font.SysFont(font, size)
score_surface = score_font.render('Score : {0}'.format(score), True, color)
score_rect = score_surface.get_rect()
if choice == 1:
score_rect.midtop = (80, 10)
else:
score_rect.midtop = (360, 120)
play_surface.blit(score_surface, score_rect)
```
这段代码实现了碰撞检测机制——判断是否吃到食物从而增加分数;同时负责重置新的食物位置,并且利用矩形填充的方式画出最新的地图布局给玩家查看.
用python中的pygame库编写贪吃蛇游戏
当然!以下是一个使用Python中的Pygame库编写的简单贪吃蛇游戏示例:
```python
import pygame
import time
import random
# 初始化Pygame
pygame.init()
# 设置游戏窗口尺寸
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('贪吃蛇游戏')
# 定义颜色
black = pygame.Color(0, 0, 0)
white = pygame.Color(255, 255, 255)
red = pygame.Color(255, 0, 0)
green = pygame.Color(0, 255, 0)
blue = pygame.Color(0, 0, 255)
# 设置游戏时钟
clock = pygame.time.Clock()
# 设置蛇的初始位置和大小
snake_position = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
snake_speed = 10
# 设置食物的初始位置
food_position = [random.randrange(1, (window_width//10)) * 10, random.randrange(1, (window_height//10)) * 10]
food_spawned = True
# 设置初始方向
direction = 'RIGHT'
change_to = direction
# 定义游戏结束函数
def game_over():
font_style = pygame.font.SysFont(None, 50)
message = font_style.render('游戏结束!', True, red)
window.blit(message, [window_width/2 - message.get_width()/2, window_height/2 - message.get_height()/2])
pygame.display.flip()
time.sleep(2)
pygame.quit()
quit()
# 游戏主循环
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_RIGHT or event.key == ord('d'):
change_to = 'RIGHT'
if event.key == pygame.K_LEFT or event.key == ord('a'):
change_to = 'LEFT'
if event.key == pygame.K_UP or event.key == ord('w'):
change_to = 'UP'
if event.key == pygame.K_DOWN or event.key == ord('s'):
change_to = 'DOWN'
# 防止蛇向相反方向移动
if change_to == 'RIGHT' and direction != 'LEFT':
direction = 'RIGHT'
if change_to == 'LEFT' and direction != 'RIGHT':
direction = 'LEFT'
if change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
if change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
# 根据方向移动蛇
if direction == 'RIGHT':
snake_position[0] += 10
if direction == 'LEFT':
snake_position[0] -= 10
if direction == 'UP':
snake_position[1] -= 10
if direction == 'DOWN':
snake_position[1] += 10
# 增加蛇的长度
snake_body.insert(0, list(snake_position))
# 判断是否吃到食物
if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:
food_spawned = False
else:
snake_body.pop()
# 生成新的食物
if not food_spawned:
food_position = [random.randrange(1, (window_width//10)) * 10, random.randrange(1, (window_height//10)) * 10]
food_spawned = True
# 绘制游戏窗口
window.fill(black)
for pos in snake_body:
pygame.draw.rect(window, green, pygame.Rect(pos[0], pos[1], 10, 10))
pygame.draw.rect(window, white, pygame.Rect(food_position[0], food_position[1], 10, 10))
# 判断游戏结束条件
if snake_position[0] < 0 or snake_position[0] > window_width-10 or snake_position[1] < 0 or snake_position[1] > window_height-10:
game_over()
for block in snake_body[1:]:
if snake_position[0] == block[0] and snake_position[1] == block[1]:
game_over()
# 刷新游戏窗口
pygame.display.update()
# 控制游戏速度
clock.tick(snake_speed)
```
这个示例中,我们使用Pygame库创建了一个游戏窗口,并使用不同的颜色绘制了蛇和食物。蛇的移动和食物的生成都是根据用户的键盘输入进行控制的。游戏会在蛇头碰到边界或者蛇身时结束,并显示游戏结束的提示信息。
请确保在运行代码之前已经安装了Pygame库。你可以根据自己的需求修改和扩展这个示例,添加更多的功能和特性。祝你编写愉快的贪吃蛇游戏!
阅读全文
相关推荐















