1. 前言
贪吃蛇游戏作为经典的小游戏,不仅是很多人的童年回忆,而且也是很多新手程序员的入门练手项目之一。本文将介绍用Python实现一个简单的贪吃蛇小游戏,主要包括以下几个方面的内容:
游戏初始化
控制贪吃蛇移动
食物生成和吃食物
游戏结束判断
2. 游戏初始化
2.1 导入必要的库
在实现贪吃蛇游戏前,需要导入必要的Python库:
import pygame
import random
2.2 初始化Pygame
在实现游戏之前,需要对Pygame进行初始化,使用以下代码:
pygame.init()
2.3 设置游戏窗口和颜色
通过以下代码设置游戏窗口的大小和背景颜色:
window_size = (800,600)
game_window = pygame.display.set_mode(window_size)
pygame.display.set_caption("贪吃蛇游戏")
white = (255, 255, 255)
black = (0, 0, 0)
2.4 初始化贪吃蛇
在游戏开始时,需要初始化贪吃蛇的状态,包括位置和长度。通过以下代码初始化贪吃蛇:
snake_pos = [100,50]
snake_body = [[100,50], [90,50], [80,50]]
代码说明:
snake_pos
表示贪吃蛇头部的位置。
snake_body
表示贪吃蛇身体的位置,是一个列表。
2.5 初始化移动方向
在游戏开始时,贪吃蛇需要有一个默认的移动方向,通过以下代码设置移动方向:
direction = "RIGHT"
change_to = direction
代码说明:
direction
表示当前贪吃蛇的移动方向,默认为向右。
change_to
表示贪吃蛇需要改变的方向,初始值和 direction
相等。
3. 控制贪吃蛇移动
3.1 控制移动方向
贪吃蛇游戏需要通过键盘控制贪吃蛇移动方向,可以通过以下代码实现:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = "UP"
if event.key == pygame.K_DOWN:
change_to = "DOWN"
if event.key == pygame.K_LEFT:
change_to = "LEFT"
if event.key == pygame.K_RIGHT:
change_to = "RIGHT"
if event.key == pygame.K_ESCAPE:
pygame.quit()
quit()
代码说明:
使用pygame.KEYDOWN
检测键盘按键事件。
根据不同的按键设置移动方向。
如果按下 ESC 键则退出游戏。
3.2 实现贪吃蛇的移动
贪吃蛇游戏需要实现贪吃蛇的连续移动,通过以下代码实现贪吃蛇的移动:
if change_to == "UP" and direction != "DOWN":
direction = "UP"
if change_to == "DOWN" and direction != "UP":
direction = "DOWN"
if change_to == "LEFT" and direction != "RIGHT":
direction = "LEFT"
if change_to == "RIGHT" and direction != "LEFT":
direction = "RIGHT"
if direction == "UP":
snake_pos[1] -= 10
if direction == "DOWN":
snake_pos[1] += 10
if direction == "LEFT":
snake_pos[0] -= 10
if direction == "RIGHT":
snake_pos[0] += 10
snake_body.insert(0, list(snake_pos))
snake_body.pop()
代码说明:
根据上一步贪吃蛇需要改变的方向,更新当前贪吃蛇的移动方向。
根据当前贪吃蛇的移动方向,更新贪吃蛇头部的坐标位置。
将贪吃蛇头部的坐标位置插入到 snake_body
的第一个位置。
移除 snake_body
最后一个元素,实现贪吃蛇的移动效果。
4. 食物生成和吃食物
4.1 实现食物的生成
贪吃蛇游戏需要在场景中生成食物,而食物的位置是随机生成的,可以通过以下代码实现:
food_pos = [random.randrange(1,window_size[0]//10)*10,
random.randrange(1,window_size[1]//10)*10]
代码说明:
食物的位置需要在游戏场景的格子中随机生成。
每个格子的大小为 10x10。
使用 random.randrange(start,stop,step)
方法生成不小于 start 且小于 stop 的 step 整数倍的随机数。
4.2 判断贪吃蛇是否吃到食物
当贪吃蛇头部与食物重合时,表示贪吃蛇吃到了食物,可以通过以下代码判断是否吃到食物:
if snake_pos == food_pos:
food_pos = [random.randrange(1,window_size[0]//10)*10,
random.randrange(1,window_size[1]//10)*10]
snake_body.append(list(snake_pos))
代码说明:
判断贪吃蛇头部的位置和食物的位置是否相同。
如果相同,表示贪吃蛇吃到了食物,需要重新生成食物,同时贪吃蛇身体长度加一。
5. 游戏结束判断
贪吃蛇游戏需要在满足一定条件或者玩家选择退出游戏时结束游戏,可以通过以下代码判断是否结束游戏:
if snake_pos[0] < 0 or snake_pos[0] > window_size[0]-10:
game_over()
if snake_pos[1] < 0 or snake_pos[1] > window_size[1]-10:
game_over()
for block in snake_body[1:]:
if snake_pos == block:
game_over()
代码说明:
当贪吃蛇头部超出游戏界面边界或者和自己的身体相撞时,游戏结束。
如果不满足结束条件,则游戏可以继续进行。
6. 完整代码
下面的代码即为实现贪吃蛇游戏的完整代码:
import pygame
import random
pygame.init()
window_size = (800,600)
game_window = pygame.display.set_mode(window_size)
pygame.display.set_caption("贪吃蛇游戏")
white = (255, 255, 255)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
clock = pygame.time.Clock()
snake_pos = [100,50]
snake_body = [[100,50], [90,50], [80,50]]
food_pos = [random.randrange(1,window_size[0]//10)*10,
random.randrange(1,window_size[1]//10)*10]
direction = "RIGHT"
change_to = direction
score = 0
def game_over():
font = pygame.font.SysFont('Arial',30)
text = font.render('游戏结束', True, red)
game_window.blit(text, [window_size[0]/3, window_size[1]/3])
pygame.display.update()
pygame.time.delay(3000)
pygame.quit()
quit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = "UP"
if event.key == pygame.K_DOWN:
change_to = "DOWN"
if event.key == pygame.K_LEFT:
change_to = "LEFT"
if event.key == pygame.K_RIGHT:
change_to = "RIGHT"
if event.key == pygame.K_ESCAPE:
pygame.quit()
quit()
if change_to == "UP" and direction != "DOWN":
direction = "UP"
if change_to == "DOWN" and direction != "UP":
direction = "DOWN"
if change_to == "LEFT" and direction != "RIGHT":
direction = "LEFT"
if change_to == "RIGHT" and direction != "LEFT":
direction = "RIGHT"
if direction == "UP":
snake_pos[1] -= 10
if direction == "DOWN":
snake_pos[1] += 10
if direction == "LEFT":
snake_pos[0] -= 10
if direction == "RIGHT":
snake_pos[0] += 10
snake_body.insert(0, list(snake_pos))
if snake_pos == food_pos:
food_pos = [random.randrange(1,window_size[0]//10)*10,
random.randrange(1,window_size[1]//10)*10]
snake_body.append(list(snake_pos))
else:
snake_body.pop()
game_window.fill(white)
for pos in snake_body:
pygame.draw.rect(game_window, green, pygame.Rect(
pos[0], pos[1], 10, 10))
pygame.draw.rect(game_window, blue, pygame.Rect(
food_pos[0], food_pos[1], 10, 10))
if snake_pos[0] < 0 or snake_pos[0] > window_size[0]-10:
game_over()
if snake_pos[1] < 0 or snake_pos[1] > window_size[1]-10:
game_over()
for block in snake_body[1:]:
if snake_pos == block:
game_over()
pygame.display.update()
clock.tick(15)
7. 总结
本文介绍了如何使用Python实现贪吃蛇小游戏的核心功能,包括游戏初始化,控制贪吃蛇移动,食物生成和吃食物,游戏结束判断等。希望对初学Python的程序员们有所帮助。