Python实现简单的贪吃蛇游戏
贪吃蛇作为一个经典的小游戏,已经成为了程序员们练手的必备项目之一。今天,我们将利用Python语言来实现一个简单的贪吃蛇游戏,让大家能够快速上手,享受游戏的乐趣。
准备工作
在开始编写贪吃蛇游戏之前,我们需要先准备好开发环境,我们需要使用到的工具有:
- Python,建议使用3.6.x或以上版本
- Pygame,一个Python编写的简单游戏库
- 一个文本编辑器,例如Notepad++或Sublime Text
请确保你已经正确安装了以上工具,并且能够在命令行或终端中正常运行Python命令。
编写代码
在我们开始编写贪吃蛇游戏的代码之前,我们需要先了解一些基本概念。
游戏窗口
游戏窗口是贪吃蛇游戏的核心,所有的游戏元素都会在窗口中进行显示。在Python中,我们可以使用Pygame库创建游戏窗口。
游戏循环
游戏循环是游戏的运行核心,它会不断地进行游戏更新和绘制。在每次循环中,我们需要检测用户输入、更新游戏状态、绘制游戏界面等。
游戏元素
在贪吃蛇游戏中,我们需要定义一些游戏元素,例如蛇、食物、障碍物等。这些元素是游戏逻辑的核心,我们需要定义它们的属性和行为,以实现游戏的正常运行。
现在,我们开始编写贪吃蛇游戏的代码。
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 155, 0)
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('贪吃蛇游戏')
block_size = 10
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 25)
def snake(block_size, snake_list):
for x_y in snake_list:
pygame.draw.rect(game_display, green, [x_y[0], x_y[1], block_size, block_size])
def message_to_screen(msg, color):
screen_text = font.render(msg, True, color)
game_display.blit(screen_text, [display_width / 6, display_height / 6])
def gameLoop():
game_exit = False
game_over = False
x1 = display_width / 2
y1 = display_height / 2
x1_change = 0
y1_change = 0
snake_list = []
snake_length = 1
food_x = round(random.randrange(0, display_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, display_height - block_size) / 10.0) * 10.0
while not game_exit:
while game_over == True:
game_display.fill(white)
message_to_screen(\"游戏结束,按C键重新开始,按Q键退出游戏\", red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_exit = True
game_over = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = block_size
x1_change = 0
if x1 >= display_width or x1 < 0 or y1 >= display_height or y1 < 0:
game_over = True
x1 += x1_change
y1 += y1_change
game_display.fill(white)
pygame.draw.rect(game_display, red, [food_x, food_y, block_size, block_size])
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for segment in snake_list[:-1]:
if segment == snake_head:
game_over = True
snake(block_size, snake_list)
pygame.display.update()
if x1 == food_x and y1 == food_y:
food_x = round(random.randrange(0, display_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, display_height - block_size) / 10.0) * 10.0
snake_length += 1
clock.tick(15)
pygame.quit()
quit()
gameLoop()
代码非常简单易懂,让我们来一一解析一下。
首先,我们导入了必要的库和模块,定义了一些常用的变量和颜色。
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 155, 0)
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('贪吃蛇游戏')
block_size = 10
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 25)
然后,我们定义了一些函数和游戏逻辑。
def snake(block_size, snake_list):
for x_y in snake_list:
pygame.draw.rect(game_display, green, [x_y[0], x_y[1], block_size, block_size])
def message_to_screen(msg, color):
screen_text = font.render(msg, True, color)
game_display.blit(screen_text, [display_width / 6, display_height / 6])
def gameLoop():
game_exit = False
game_over = False
x1 = display_width / 2
y1 = display_height / 2
x1_change = 0
y1_change = 0
snake_list = []
snake_length = 1
food_x = round(random.randrange(0, display_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, display_height - block_size) / 10.0) * 10.0
while not game_exit:
while game_over == True:
game_display.fill(white)
message_to_screen(\"游戏结束,按C键重新开始,按Q键退出游戏\", red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_exit = True
game_over = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = block_size
x1_change = 0
if x1 >= display_width or x1 < 0 or y1 >= display_height or y1 < 0:
game_over = True
x1 += x1_change
y1 += y1_change
game_display.fill(white)
pygame.draw.rect(game_display, red, [food_x, food_y, block_size, block_size])
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for segment in snake_list[:-1]:
if segment == snake_head:
game_over = True
snake(block_size, snake_list)
pygame.display.update()
if x1 == food_x and y1 == food_y:
food_x = round(random.randrange(0, display_width - block_size) / 10.0) * 10.0
food_y = round(random.randrange(0, display_height - block_size) / 10.0) * 10.0
snake_length += 1
clock.tick(15)
pygame.quit()
quit()
最后,我们在主函数中调用游戏循环函数,开始运行游戏。
gameLoop()
运行游戏
现在,我们已经完成了贪吃蛇游戏的编写,让我们来看看它是如何运行的。
首先,我们需要将代码保存为.py文件,例如snake_game.py,并在命令行或终端中运行以下命令:
python snake_game.py
这样,我们就可以打开贪吃蛇游戏了。
在游戏中,我们可以通过方向键来控制蛇的运动方向,吃到食物会增加蛇的长度,如果蛇撞到边界或者自己的身体,游戏就会结束。
总结
贪吃蛇游戏是一个简单而经典的小游戏,适合初学者练习编程。通过这个项目,我们学习了如何使用Python和Pygame库来实现游戏开发的基础知识,包括游戏窗口、游戏循环、游戏元素等。
当然,在这个简单的版本中,还有很多可以拓展和改进的地方,例如添加音效、增加难度等。希望大家能够继续深入学习,探索游戏开发的更多技术,实现更加丰富和有趣的游戏。