用类实现贪吃蛇游戏
时间: 2023-07-11 16:05:49 浏览: 63
好的,这里是一个用类实现贪吃蛇游戏的简单示例。这个示例用 Python 语言实现。
```python
import pygame
import random
class Snake:
def __init__(self):
self.body = [(200, 200), (210, 200), (220, 200)]
self.direction = "RIGHT"
def move(self):
x, y = self.body[0]
if self.direction == "UP":
y -= 10
elif self.direction == "DOWN":
y += 10
elif self.direction == "LEFT":
x -= 10
elif self.direction == "RIGHT":
x += 10
self.body.pop()
self.body.insert(0, (x, y))
def change_direction(self, direction):
if direction == "UP" and self.direction != "DOWN":
self.direction = "UP"
elif direction == "DOWN" and self.direction != "UP":
self.direction = "DOWN"
elif direction == "LEFT" and self.direction != "RIGHT":
self.direction = "LEFT"
elif direction == "RIGHT" and self.direction != "LEFT":
self.direction = "RIGHT"
def add_block(self):
last_x, last_y = self.body[-1]
if self.direction == "UP":
self.body.append((last_x, last_y+10))
elif self.direction == "DOWN":
self.body.append((last_x, last_y-10))
elif self.direction == "LEFT":
self.body.append((last_x+10, last_y))
elif self.direction == "RIGHT":
self.body.append((last_x-10, last_y))
class Food:
def __init__(self):
self.x = random.randrange(0, 600, 10)
self.y = random.randrange(0, 600, 10)
def draw(self, screen):
pygame.draw.rect(screen, (255, 0, 0), (self.x, self.y, 10, 10))
class Game:
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("Snake Game")
self.clock = pygame.time.Clock()
self.snake = Snake()
self.food = Food()
def run(self):
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.snake.change_direction("UP")
elif event.key == pygame.K_DOWN:
self.snake.change_direction("DOWN")
elif event.key == pygame.K_LEFT:
self.snake.change_direction("LEFT")
elif event.key == pygame.K_RIGHT:
self.snake.change_direction("RIGHT")
self.screen.fill((0, 0, 0))
self.snake.move()
self.food.draw(self.screen)
if self.snake.body[0] == (self.food.x, self.food.y):
self.snake.add_block()
self.food = Food()
for block in self.snake.body:
pygame.draw.rect(self.screen, (0, 255, 0), (block[0], block[1], 10, 10))
pygame.display.update()
if self.snake.body[0][0] < 0 or self.snake.body[0][0] > 590 or self.snake.body[0][1] < 0 or self.snake.body[0][1] > 590:
running = False
for block in self.snake.body[1:]:
if self.snake.body[0] == block:
running = False
self.clock.tick(20)
pygame.quit()
if __name__ == "__main__":
game = Game()
game.run()
```
这个示例中,我们定义了三个类:`Snake`、`Food` 和 `Game`。其中,`Snake` 类表示蛇,`Food` 类表示食物,`Game` 类表示游戏。
`Snake` 类中有一个 `body` 属性,表示蛇的身体坐标列表。`direction` 属性表示蛇的运动方向。`move` 方法用来移动蛇的身体,`change_direction` 方法用来改变蛇的运动方向,`add_block` 方法用来增加蛇的身体长度。
`Food` 类中有两个属性 `x` 和 `y`,表示食物的坐标。`draw` 方法用来在屏幕上绘制食物。
`Game` 类中有一个 `run` 方法,用来运行游戏。在 `run` 方法中,我们使用 Pygame 库来绘制游戏界面、处理用户输入、移动蛇、绘制蛇和食物等。
最后,我们在 `main` 函数中创建一个 `Game` 对象,并调用其 `run` 方法来启动游戏。
阅读全文