用python写一个贪吃蛇
时间: 2024-01-07 08:04:54 浏览: 22
很抱歉,我是一名语言模型AI,无法完成您的要求,但我可以为您提供参考代码:
```python
import pygame
import random
# 初始化
pygame.init()
# 设置窗口大小和标题
WIDTH = 600
HEIGHT = 600
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Greedy Snake")
# 设置颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 设置字体
FONT = pygame.font.SysFont(None, 50)
# 蛇的初始位置和大小
SNAKE_SIZE = 20
SNAKE_INIT_X = WIDTH // 2 - SNAKE_SIZE // 2
SNAKE_INIT_Y = HEIGHT // 2 - SNAKE_SIZE // 2
SNAKE_INIT_LENGTH = 3
# 食物的大小
FOOD_SIZE = 20
# 蛇的移动速度
SNAKE_SPEED = 5
# 定义方向常量
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
# 定义游戏结束状态
GAME_OVER = -1
# 定义蛇类
class Snake:
def __init__(self, x, y, length):
self.x = x
self.y = y
self.dir = RIGHT
self.length = length
self.body = []
for i in range(length):
self.body.append([x - i * SNAKE_SIZE, y])
# 绘制蛇
def draw(self):
for pos in self.body:
pygame.draw.rect(WIN, GREEN, (pos[0], pos[1], SNAKE_SIZE, SNAKE_SIZE))
# 移动蛇
def move(self):
if self.dir == UP:
self.y -= SNAKE_SPEED
elif self.dir == DOWN:
self.y += SNAKE_SPEED
elif self.dir == LEFT:
self.x -= SNAKE_SPEED
elif self.dir == RIGHT:
self.x += SNAKE_SPEED
self.body.insert(0, [self.x, self.y])
if len(self.body) > self.length:
self.body.pop()
# 改变蛇的方向
def change_dir(self, dir):
if dir == UP and self.dir != DOWN:
self.dir = UP
elif dir == DOWN and self.dir != UP:
self.dir = DOWN
elif dir == LEFT and self.dir != RIGHT:
self.dir = LEFT
elif dir == RIGHT and self.dir != LEFT:
self.dir = RIGHT
# 获取蛇头的位置
def get_head_pos(self):
return self.body[0]
# 获取蛇的身体部分
def get_body(self):
return self.body[1:]
# 检查蛇是否吃到食物
def check_eat_food(self, food):
if self.get_head_pos()[0] == food.x and self.get_head_pos()[1] == food.y:
self.length += 1
return True
return False
# 检查蛇是否撞到墙壁或自己的身体
def check_hit_wall_or_self(self):
if self.get_head_pos()[0] < 0 or self.get_head_pos()[0] > WIDTH - SNAKE_SIZE \
or self.get_head_pos()[1] < 0 or self.get_head_pos()[1] > HEIGHT - SNAKE_SIZE:
return True
for pos in self.get_body():
if self.get_head_pos()[0] == pos[0] and self.get_head_pos()[1] == pos[1]:
return True
return False
# 定义食物类
class Food:
def __init__(self):
self.x = random.randint(0, WIDTH - FOOD_SIZE)
self.y = random.randint(0, HEIGHT - FOOD_SIZE)
# 绘制食物
def draw(self):
pygame.draw.rect(WIN, RED, (self.x, self.y, FOOD_SIZE, FOOD_SIZE))
# 绘制游戏结束界面
def draw_game_over():
WIN.fill(WHITE)
text = FONT.render("Game Over!", True, BLACK)
text_rect = text.get_rect(center=(WIDTH // 2, HEIGHT // 2))
WIN.blit(text, text_rect)
pygame.display.update()
# 主函数
def main():
# 创建蛇和食物对象
snake = Snake(SNAKE_INIT_X, SNAKE_INIT_Y, SNAKE_INIT_LENGTH)
food = Food()
# 游戏循环
clock = pygame.time.Clock()
running = True
while running:
# 设置帧率
clock.tick(30)
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake.change_dir(UP)
elif event.key == pygame.K_DOWN:
snake.change_dir(DOWN)
elif event.key == pygame.K_LEFT:
snake.change_dir(LEFT)
elif event.key == pygame.K_RIGHT:
snake.change_dir(RIGHT)
# 移动蛇
snake.move()
# 检查蛇是否吃到食物
if snake.check_eat_food(food):
food = Food()
# 检查游戏是否结束
if snake.check_hit_wall_or_self():
draw_game_over()
running = GAME_OVER
# 绘制背景和蛇和食物
WIN.fill(WHITE)
snake.draw()
food.draw()
pygame.display.update()
# 退出游戏
pygame.quit()
if __name__ == '__main__':
main()
```
注意:以上代码仅供参考,具体实现方式可能有所不同。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)