你能帮我用python写一个贪吃蛇代码嘛
时间: 2023-05-25 22:03:58 浏览: 52
当然可以!
下面是一个简单的贪吃蛇游戏的Python代码,你可以根据需要进行修改和完善。
```
import pygame
import random
# 游戏窗口大小
WIDTH = 500
HEIGHT = 500
# 贪吃蛇方格大小
GRID_SIZE = 20
# 初始化 pygame
pygame.init()
# 设置游戏窗口
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Snake Game')
# 设置游戏时钟
clock = pygame.time.Clock()
# 随机生成食物的位置
def generate_food(s):
# 随机生成一个位置
x = random.randint(0, WIDTH - GRID_SIZE) // GRID_SIZE * GRID_SIZE
y = random.randint(0, HEIGHT - GRID_SIZE) // GRID_SIZE * GRID_SIZE
# 如果这个位置和蛇的身体重合,重新生成
if (x, y) in s:
return generate_food(s)
return (x, y)
# 画出游戏区域
def draw_grid():
for x in range(0, WIDTH, GRID_SIZE):
for y in range(0, HEIGHT, GRID_SIZE):
rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE)
pygame.draw.rect(window, (255, 255, 255), rect, 1)
# 画出蛇的身体
def draw_snake(s):
for x, y in s:
rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE)
pygame.draw.rect(window, (0, 255, 0), rect)
# 游戏结束画面
def draw_game_over():
font = pygame.font.Font(None, 50)
text = font.render("Game Over", True, (255, 0, 0))
rect = text.get_rect()
rect.center = (WIDTH // 2, HEIGHT // 2)
window.blit(text, rect)
# 主游戏循环
def main():
# 初始蛇的位置和方向
snake = [(100, 100), (80, 100), (60, 100)]
direction = pygame.K_RIGHT
# 随机生成第一个食物的位置
food = generate_food(snake)
score = 0
# 游戏循环
while True:
# 事件循环
for event in pygame.event.get():
# 关闭窗口
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 获取按键事件
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != pygame.K_DOWN:
direction = pygame.K_UP
elif event.key == pygame.K_DOWN and direction != pygame.K_UP:
direction = pygame.K_DOWN
elif event.key == pygame.K_LEFT and direction != pygame.K_RIGHT:
direction = pygame.K_LEFT
elif event.key == pygame.K_RIGHT and direction != pygame.K_LEFT:
direction = pygame.K_RIGHT
# 移动蛇的身体
head = snake[0]
if direction == pygame.K_UP:
new_head = (head[0], head[1] - GRID_SIZE)
elif direction == pygame.K_DOWN:
new_head = (head[0], head[1] + GRID_SIZE)
elif direction == pygame.K_LEFT:
new_head = (head[0] - GRID_SIZE, head[1])
elif direction == pygame.K_RIGHT:
new_head = (head[0] + GRID_SIZE, head[1])
# 判断是否撞墙或者撞到自己的身体
if new_head[0] < 0 or new_head[0] >= WIDTH or \
new_head[1] < 0 or new_head[1] >= HEIGHT or \
new_head in snake:
draw_game_over()
pygame.display.update()
pygame.time.wait(2000)
return score
# 更新蛇的位置和食物的位置
snake.insert(0, new_head)
if new_head == food:
food = generate_food(snake)
score += 1
else:
snake.pop()
# 画出游戏区域和蛇的身体和食物
window.fill((0, 0, 0))
draw_grid()
draw_snake(snake)
pygame.draw.rect(window, (255, 0, 0), (food[0], food[1], GRID_SIZE, GRID_SIZE))
pygame.display.update()
# 设置游戏帧率
clock.tick(10)
# 程序入口
if __name__ == '__main__':
score = main()
print('Your score: %d' % score)
```
希望能对你有所帮助!