用python写一个贪吃蛇
时间: 2024-01-07 17:05:12 浏览: 14
好的,我可以为您提供关于Python编写贪吃蛇的相关信息。贪吃蛇是一种经典的游戏,它有许多变体和实现方式。您可以使用Python的Pygame库来实现一个简单的贪吃蛇游戏。下面是一个示例代码:
```python
import pygame
import random
# 初始化游戏
pygame.init()
# 定义颜色
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
# 设置游戏窗口和标题
screen_width = 640
screen_height = 480
game_display = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Snake Game")
# 定义贪吃蛇和食物的大小
block_size = 10
# 定义游戏时钟
clock = pygame.time.Clock()
def snake(block_size, snake_list):
# 循环遍历蛇的每一部分,并将其绘制在屏幕上
for block in snake_list:
pygame.draw.rect(game_display, white, [block[0], block[1], block_size, block_size])
def message_to_screen(msg, color):
# 定义一个居中显示文本的函数,用来显示游戏结束时的信息
font = pygame.font.SysFont(None, 25)
text = font.render(msg, True, color)
game_display.blit(text, [screen_width/2, screen_height/2])
def game_loop():
# 初始化蛇头的位置和速度
lead_x = screen_width/2
lead_y = screen_height/2
lead_x_change = 0
lead_y_change = 0
# 初始化蛇的长度和列表
snake_list = []
snake_length = 1
# 初始化食物的位置
food_x = round(random.randrange(0, screen_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, screen_height - block_size) / 10.0) * 10.0
# 设置游戏循环标志
game_exit = False
game_over = False
while not game_exit:
while game_over == True:
game_display.fill(black)
message_to_screen("Game over, press Q to quit or C to play again", red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_exit = True
game_over = False
elif event.key == pygame.K_c:
game_loop()
# 监听事件,以退出游戏或改变蛇的速度和方向
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
lead_x_change = -block_size
lead_y_change = 0
elif event.key == pygame.K_RIGHT:
lead_x_change = block_size
lead_y_change = 0
elif event.key == pygame.K_UP:
lead_y_change = -block_size
lead_x_change = 0
elif event.key == pygame.K_DOWN:
lead_y_change = block_size
lead_x_change = 0
# 判断是否碰到屏幕边缘
if lead_x >= screen_width or lead_x < 0 or lead_y >= screen_height or lead_y < 0:
game_over = True
# 更新蛇的位置
lead_x += lead_x_change
lead_y += lead_y_change
# 渲染蛇和食物
game_display.fill(black)
pygame.draw.rect(game_display, red, [food_x, food_y, block_size, block_size])
snake_head = []
snake_head.append(lead_x)
snake_head.append(lead_y)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for each_segment in snake_list[:-1]:
if each_segment == snake_head:
game_over = True
snake(block_size, snake_list)
pygame.display.update()
# 判断是否吃到食物,如果吃到,则增加蛇的长度
if lead_x == food_x and lead_y == food_y:
food_x = round(random.randrange(0, screen_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, screen_height - block_size) / 10.0) * 10.0
snake_length += 1
# 设置游戏的帧率
clock.tick(20)
# 结束游戏
pygame.quit()
quit()
game_loop()
```
请注意,这只是一个简单的实现,您可以根据自己的需求和喜好进行修改和扩展。希望能对您有所帮助!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![dta](https://img-home.csdnimg.cn/images/20210720083646.png)