在编程的世界里,贪吃蛇游戏可以说是一个经典的入门级项目,它不仅能够锻炼你的编程能力,还能让你在解决问题的过程中获得乐趣,就让我们一起来如何用Python编写贪吃蛇游戏吧!
我们需要了解贪吃蛇游戏的基本规则:玩家控制一条蛇在屏幕上移动,吃掉出现的食物后蛇会变长,如果蛇撞到自己或者边界,游戏就结束了,我们的目标是编写一个程序,让蛇能够根据用户的输入移动,并且能够检测到食物和蛇身体的碰撞。
准备工作
在开始编写代码之前,我们需要安装一些必要的库,Python有一个非常流行的图形库叫做pygame,它可以帮助我们绘制图形和处理用户输入,如果你还没有安装pygame,可以通过命令行输入以下命令来安装:
pip install pygame
编写代码
我们将逐步构建贪吃蛇游戏,我们需要初始化游戏窗口和一些基本的游戏参数。
import pygame import random import sys 初始化pygame pygame.init() 设置屏幕大小 width = 800 height = 600 screen = pygame.display.set_mode((width, height)) 设置颜色 black = (0, 0, 0) white = (255, 255, 255) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213) 设置蛇和食物的尺寸 snake_block = 10 snake_speed = 15 设置时钟 clock = pygame.time.Clock() 设置字体 font_style = pygame.font.SysFont(None, 50) score_font = pygame.font.SysFont(None, 35)
我们需要定义蛇和食物的类。
蛇类
class Snake:
def __init__(self):
self.length = 1
self.positions = [((180, 300), (160, 300), (140, 300))]
self.direction = 'RIGHT'
self.skin = pygame.image.load('snake.png') # 需要一个蛇的图片文件
self.head = self.positions[0]
def get_head_position(self):
return self.head
def turn(self, point):
if self.direction == 'RIGHT' and point == 'LEFT':
pass
elif self.direction == 'LEFT' and point == 'RIGHT':
pass
elif self.direction == 'UP' and point == 'DOWN':
pass
elif self.direction == 'DOWN' and point == 'UP':
pass
else:
self.direction = point
def move(self):
if self.direction == 'RIGHT':
self.head = (self.head[0] + snake_block, self.head[1])
elif self.direction == 'LEFT':
self.head = (self.head[0] - snake_block, self.head[1])
elif self.direction == 'UP':
self.head = (self.head[0], self.head[1] - snake_block)
elif self.direction == 'DOWN':
self.head = (self.head[0], self.head[1] + snake_block)
self.positions.insert(0, self.head)
if len(self.positions) > self.length:
self.positions.pop()
食物类
class Food(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.surf = pygame.Surface((snake_block, snake_block))
self.surf.fill(white)
self.rect = self.surf.get_rect()
self.rect.x = random.randrange(1, (width // 10)) * 10
self.rect.y = random.randrange(1, (height // 10)) * 10
def draw(self):
screen.blit(self.surf, (self.rect.x, self.rect.y))我们需要处理游戏的主循环,包括事件处理、蛇的移动、食物的生成和碰撞检测。
游戏主循环
def game_loop():
game_over = False
game_close = False
# 实例化蛇和食物
snake = Snake()
food = Food()
score = 0
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_close = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
snake.turn('LEFT')
elif event.key == pygame.K_RIGHT:
snake.turn('RIGHT')
elif event.key == pygame.K_UP:
snake.turn('UP')
elif event.key == pygame.K_DOWN:
snake.turn('DOWN')
# 检查蛇是否撞墙或撞自己
if snake.get_head_position()[0] >= width or snake.get_head_position()[0] < 0 or
snake.get_head_position()[1] >= height or snake.get_head_position()[1] < 0:
game_over = True
continue
snake.move()
# 检查蛇是否吃到食物
food_rect = food.rect
head_rect = snake.get_head_position()
if food_rect.x == head_rect[0] and food_rect.y == head_rect[1]:
food.rect.x = random.randrange(1, (width // 10)) * 10
food.rect.y = random.randrange(1, (height // 10)) * 10
snake.length += 1
score += 1
# 检查蛇是否撞到自己
for block in snake.positions[1:]:
if block == snake.get_head_position():
game_over = True
continue
# 绘制游戏元素
screen.fill(blue)
for pos in snake.positions:
pygame.draw.rect(screen, green, pygame.Rect(pos[0], pos[1], snake_block, snake_block))
food.draw()
score_text = score_font.render('Score: ' + str(score), True, red)
screen.blit(score_text, (0, 10))
pygame.display.update()
clock.tick(snake_speed)
if game_close:
pygame.quit()
quit()
运行游戏
game_loop()这段代码为我们提供了一个基本的贪吃蛇游戏框架,你可以在此基础上添加更多功能,比如增加难度级别、得分系统或者自定义皮肤等,希望这个简单的教程能够帮助你迈出编程贪吃蛇游戏的第一步!



还没有评论,来说两句吧...