pygame实现贪吃蛇小游戏
时间: 2023-08-30 14:10:45 浏览: 44
好的,我可以为你提供一个简单的贪吃蛇小游戏实现。使用Pygame库,我们可以轻松地实现这个游戏。
首先,让我们导入需要的库:
```python
import pygame
import time
import random
```
接下来,我们需要定义一些常量,如窗口大小、蛇和食物大小、游戏速度等:
```python
# 定义常量
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 600
SNAKE_SIZE = 10
FOOD_SIZE = 10
SNAKE_SPEED = 15
```
然后,我们需要定义蛇和食物的类:
```python
# 定义蛇类
class Snake:
def __init__(self):
self.position = [100, 50]
self.body = [[100, 50], [90, 50], [80, 50]]
self.direction = "RIGHT"
self.changeDirectionTo = self.direction
def changeDirTo(self, dir):
if dir=="RIGHT" and not self.direction=="LEFT":
self.direction = "RIGHT"
if dir=="LEFT" and not self.direction=="RIGHT":
self.direction = "LEFT"
if dir=="UP" and not self.direction=="DOWN":
self.direction = "UP"
if dir=="DOWN" and not self.direction=="UP":
self.direction = "DOWN"
def move(self, foodPos):
if self.direction == "RIGHT":
self.position[0] += SNAKE_SIZE
if self.direction == "LEFT":
self.position[0] -= SNAKE_SIZE
if self.direction == "UP":
self.position[1] -= SNAKE_SIZE
if self.direction == "DOWN":
self.position[1] += SNAKE_SIZE
self.body.insert(0, list(self.position))
if self.position == foodPos:
return 1
else:
self.body.pop()
return 0
def checkCollision(self):
if self.position[0] > SCREEN_WIDTH-SNAKE_SIZE or self.position[0] < 0:
return 1
elif self.position[1] > SCREEN_HEIGHT-SNAKE_SIZE or self.position[1] < 0:
return 1
for bodyPart in self.body[1:]:
if self.position == bodyPart:
return 1
return 0
def getHeadPos(self):
return self.position
def getBody(self):
return self.body
# 定义食物类
class Food:
def __init__(self):
self.position = [random.randrange(1,SCREEN_WIDTH/10)*10,random.randrange(1,SCREEN_HEIGHT/10)*10]
self.color = (223,163,49)
def spawnFood(self):
self.position = [random.randrange(1,SCREEN_WIDTH/10)*10,random.randrange(1,SCREEN_HEIGHT/10)*10]
def drawFood(self, surface):
pygame.draw.rect(surface, self.color, pygame.Rect(self.position[0], self.position[1], FOOD_SIZE, FOOD_SIZE))
```
现在,我们可以在主函数中实例化蛇和食物,并在游戏循环中实现蛇的移动和碰撞检测,以及食物的生成和绘制:
```python
# 定义主函数
def main():
pygame.init()
pygame.display.set_caption("贪吃蛇")
# 设置窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 实例化蛇和食物
snake = Snake()
food = Food()
# 游戏循环
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:
snake.changeDirTo('RIGHT')
if event.key == pygame.K_LEFT:
snake.changeDirTo('LEFT')
if event.key == pygame.K_UP:
snake.changeDirTo('UP')
if event.key == pygame.K_DOWN:
snake.changeDirTo('DOWN')
# 移动蛇
foodPos = food.position
if snake.move(foodPos) == 1:
food.spawnFood()
# 检查碰撞
if snake.checkCollision() == 1:
pygame.quit()
quit()
# 绘制游戏界面
screen.fill((0,0,0))
for pos in snake.getBody():
pygame.draw.rect(screen, (0,255,0), pygame.Rect(pos[0], pos[1], SNAKE_SIZE, SNAKE_SIZE))
food.drawFood(screen)
pygame.display.update()
# 控制游戏速度
clock = pygame.time.Clock()
clock.tick(SNAKE_SPEED)
```
现在,我们可以运行这个程序,尝试一下自己的贪吃蛇小游戏了!