为了实现这个游戏,需要用到Python的pygame模块,它是一个专门用于开发游戏的模块,提供了很多方便的功能,比如窗口、图形、音效、事件处理等。
用pygame来创建一个窗口,设置游戏的背景色,画出蛇和食物,处理用户的输入,更新游戏的状态,显示分数等。
游戏思路
首先,我们需要初始化pygame,设置窗口的大小和标题,设置游戏的帧率,设置游戏的颜色和字体。
然后,我们需要设置蛇的初始位置和方向,用一个列表来存储蛇的每一节的坐标,用一个字符串来表示蛇的方向。我们还需要设置食物的初始位置,用一个元组来存储食物的坐标。我们还需要设置游戏的状态,用一个布尔值来表示游戏是否结束,用一个整数来表示分数。
接着,我们需要进入游戏的主循环,不断地处理用户的输入事件,更新游戏的状态,绘制游戏的画面,直到游戏结束。
- 在游戏的主循环中,我们需要做以下的事情:
- 处理用户的输入事件,如果用户点击了关闭按钮,退出游戏,如果用户按下了键盘,改变蛇的方向。
- 根据蛇的方向,计算蛇头的新位置,把新的蛇头加到蛇的列表里。
- 判断蛇是否撞到了边界或者自己的身体,如果是,游戏结束,跳出循环。 -
判断蛇是否吃到了食物,如果是,增加分数,随机生成一个新的食物位置,否则,去掉蛇的尾巴。 - 填充背景色,画出蛇的身体,画出食物,显示分数,更新屏幕,控制游戏的速度。
- 最后,退出pygame,结束游戏。
演示图
代码
# 导入pygame模块 import pygame # 导入random模块 import random # 初始化pygame pygame.init() # 设置窗口的大小和标题 screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption('贪吃蛇') # 设置游戏的帧率 clock = pygame.time.Clock() FPS = 10 # 设置游戏的颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) # 设置游戏的字体 font = pygame.font.SysFont('arial', 32) # 设置蛇的初始位置和方向 snake = [(400, 300), (380, 300), (360, 300)] direction = 'right' # 设置食物的初始位置 food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20) # 设置游戏的状态 game_over = False score = 0 # 游戏的主循环 while not game_over: # 处理用户的输入事件 for event in pygame.event.get(): # 如果用户点击了关闭按钮,退出游戏 if event.type == pygame.QUIT: game_over = True # 如果用户按下了键盘,改变蛇的方向 if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP and direction != 'down': direction = 'up' if event.key == pygame.K_DOWN and direction != 'up': direction = 'down' if event.key == pygame.K_LEFT and direction != 'right': direction = 'left' if event.key == pygame.K_RIGHT and direction != 'left': direction = 'right' # 根据蛇的方向,计算蛇头的新位置 head = snake[0] if direction == 'up': new_head = (head[0], head[1] - 20) if direction == 'down': new_head = (head[0], head[1] + 20) if direction == 'left': new_head = (head[0] - 20, head[1]) if direction == 'right': new_head = (head[0] + 20, head[1]) # 判断蛇是否撞到了边界或者自己的身体,如果是,游戏结束 if new_head[0] < 0 or new_head[0] > 780 or new_head[1] < 0 or new_head[1] > 580 or new_head in snake: game_over = True break # 把新的蛇头加到蛇的列表里 snake.insert(0, new_head) # 判断蛇是否吃到了食物,如果是,增加分数,否则,去掉蛇的尾巴 if new_head == food: score += 10 # 随机生成一个新的食物位置 food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20) else: snake.pop() # 填充背景色 screen.fill(BLACK) # 画出蛇的身体 for segment in snake: pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 20, 20)) # 画出食物 pygame.draw.rect(screen, RED, (food[0], food[1], 20, 20)) # 显示分数 text = font.render('Score: ' + str(score), True, WHITE) screen.blit(text, (10, 10)) # 更新屏幕 pygame.display.flip() # 控制游戏的速度 clock.tick(FPS) # 退出pygame pygame.quit()
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章