买空间服务器做网站怎么弄,找一个免费的网站,手机网站 栏目定制,hexo框架做网站Python 小游戏——贪吃蛇 文章目录 Python 小游戏——贪吃蛇项目介绍环境配置代码设计思路1. 初始化和变量定义2. 创建游戏窗口和FPS控制器3. 初始化贪吃蛇和食物的位置4. 控制贪吃蛇的方向和分数5. 主游戏循环 难点分析源代码呈现代码结果 项目介绍
贪吃蛇游戏是一款通过上下…Python 小游戏——贪吃蛇 文章目录 Python 小游戏——贪吃蛇项目介绍环境配置代码设计思路1. 初始化和变量定义2. 创建游戏窗口和FPS控制器3. 初始化贪吃蛇和食物的位置4. 控制贪吃蛇的方向和分数5. 主游戏循环 难点分析源代码呈现代码结果 项目介绍
贪吃蛇游戏是一款通过上下左右方向键控制贪吃蛇吃到豆豆以获取积分的游戏该项目使用Python语言进行实现。主要使用了Pygame库来处理图形和用户输入。
环境配置
该项目需要在Pycharm的终端中执行以下指令来安装Pygame库
pip install pygame具体步骤如下
打开你的PyCharm项目。选择顶部菜单栏中的 “View” 菜单。选择 “Tool Windows” - “Terminal” 以打开PyCharm的终端窗口。在终端窗口中输入 pip install pygame 并按回车键执行。
代码设计思路
1. 初始化和变量定义
首先我们初始化Pygame并定义一些常量包括窗口大小、贪吃蛇的速度和颜色。
import pygame
import time
import random# 初始化Pygame
pygame.init()# 定义一些常量
window_x 720
window_y 480
snake_block 10
snake_speed 15# 定义颜色
black pygame.Color(0, 0, 0)
white pygame.Color(255, 255, 255)
red pygame.Color(255, 0, 0)
green pygame.Color(0, 255, 0)
blue pygame.Color(0, 0, 255)2. 创建游戏窗口和FPS控制器
接着创建游戏窗口并设置标题同时创建FPS控制器来控制游戏的帧率。
# 创建游戏窗口
pygame.display.set_caption(Greedy Snake)
game_window pygame.display.set_mode((window_x, window_y))# FPS控制器
fps pygame.time.Clock()3. 初始化贪吃蛇和食物的位置
定义贪吃蛇的默认位置和身体以及食物的位置和生成状态。
# 定义贪吃蛇的默认位置
snake_pos [100, 50]# 定义贪吃蛇的身体
snake_body [[100, 50], [90, 50], [80, 50]]# 定义食物的位置
food_pos [random.randrange(1, (window_x // 10)) * 10, random.randrange(1, (window_y // 10)) * 10]
food_spawn True4. 控制贪吃蛇的方向和分数
设置贪吃蛇的默认移动方向和分数同时定义显示分数和结束游戏的函数。
# 设置默认方向
direction RIGHT
change_to direction# 初始化分数
score 0# 显示分数
def show_score(choice, color, font, size):score_font pygame.font.SysFont(font, size)score_surface score_font.render(Score : str(score), True, color)score_rect score_surface.get_rect()game_window.blit(score_surface, score_rect)# 结束游戏
def game_over():my_font pygame.font.SysFont(times new roman, 50)game_over_surface my_font.render(Your Score is : str(score), True, red)game_over_rect game_over_surface.get_rect()game_over_rect.midtop (window_x / 2, window_y / 4)game_window.blit(game_over_surface, game_over_rect)pygame.display.flip()time.sleep(2)pygame.quit()quit()5. 主游戏循环
在主游戏循环中处理用户输入、更新贪吃蛇的位置、检测碰撞以及显示当前状态。
# 主函数
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_UP:change_to UPelif event.key pygame.K_DOWN:change_to DOWNelif event.key pygame.K_LEFT:change_to LEFTelif event.key pygame.K_RIGHT:change_to RIGHT# 确保贪吃蛇不能反向移动if change_to UP and direction ! DOWN:direction change_toif change_to DOWN and direction ! UP:direction change_toif change_to LEFT and direction ! RIGHT:direction change_toif change_to RIGHT and direction ! LEFT:direction change_to# 移动贪吃蛇if direction UP:snake_pos[1] - 10if direction DOWN:snake_pos[1] 10if direction LEFT:snake_pos[0] - 10if direction RIGHT:snake_pos[0] 10# 增加贪吃蛇的长度snake_body.insert(0, list(snake_pos))if snake_pos[0] food_pos[0] and snake_pos[1] food_pos[1]:score 10food_spawn Falseelse:snake_body.pop()if not food_spawn:food_pos [random.randrange(1, (window_x // 10)) * 10, random.randrange(1, (window_y // 10)) * 10]food_spawn Truegame_window.fill(black)for pos in snake_body:pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], snake_block, snake_block))pygame.draw.rect(game_window, red, pygame.Rect(food_pos[0], food_pos[1], snake_block, snake_block))if snake_pos[0] 0 or snake_pos[0] window_x - snake_block:game_over()if snake_pos[1] 0 or snake_pos[1] window_y - snake_block:game_over()for block in snake_body[1:]:if snake_pos[0] block[0] and snake_pos[1] block[1]:game_over()show_score(1, white, times new roman, 20)pygame.display.update()fps.tick(snake_speed)难点分析
方向控制 确保贪吃蛇不能反向移动。这通过在检查方向变更时加入条件来实现例如当前方向是向上时不能变更为向下。 碰撞检测 需要检测贪吃蛇是否碰到边界或者自身这通过比较贪吃蛇头部的位置与边界和自身身体的位置来实现。 食物生成 随机生成食物的位置需要确保食物生成的位置不在贪吃蛇身体上。
源代码
import pygame
import time
import random# 初始化Pygame
pygame.init()# 定义一些常量
window_x 720
window_y 480
snake_block 10
snake_speed 15# 定义颜色
black pygame.Color(0, 0, 0)
white pygame.Color(255, 255, 255)
red pygame.Color(255, 0, 0)
green pygame.Color(0, 255, 0)
blue pygame.Color(0, 0, 255)# 创建游戏窗口
pygame.display.set_caption(Greedy Snake)
game_window pygame.display.set_mode((window_x, window_y))# FPS控制器
fps pygame.time.Clock()# 定义贪吃蛇的默认位置
snake_pos [100, 50]# 定义贪吃蛇的身体
snake_body [[100, 50], [90, 50], [80, 50]]# 定义食物的位置
food_pos [random.randrange(1, (window_x // 10)) * 10, random.randrange(1, (window_y // 10)) * 10]
food_spawn True# 设置默认方向
direction RIGHT
change_to direction# 初始化分数
score 0# 显示分数
def show_score(choice, color, font, size):score_font pygame.font.SysFont(font, size)score_surface score_font.render(Score : str(score), True, color)score_rect score_surface.get_rect()game_window.blit(score_surface, score_rect)# 结束游戏
def game_over():my_font pygame.font.SysFont(times new roman, 50)game_over_surface my_font.render(Your Score is : str(score), True, red)game_over_rect game_over_surface.get_rect()game_over_rect.midtop (window_x / 2, window_y / 4)game_window.blit(game_over_surface, game_over_rect)pygame.display.flip()time.sleep(2)pygame.quit()quit()# 主函数
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_UP:change_to UPelif event.key pygame.K_DOWN:change_to DOWNelif event.key pygame.K_LEFT:change_to LEFTelif event.key pygame.K_RIGHT:change_to RIGHT# 确保贪吃蛇不能反向移动if change_to UP and direction ! DOWN:direction change_toif change_to DOWN and direction ! UP:direction change_toif change_to LEFT and direction ! RIGHT:direction change_toif change_to RIGHT and direction ! LEFT:direction change_to# 移动贪吃蛇if direction UP:snake_pos[1] - 10if direction DOWN:snake_pos[1] 10if direction LEFT:snake_pos[0] - 10if direction RIGHT:snake_pos[0] 10# 增加贪吃蛇的长度snake_body.insert(0, list(snake_pos))if snake_pos[0] food_pos[0] and snake_pos[1] food_pos[1]:score 10food_spawn Falseelse:snake_body.pop()if not food_spawn:food_pos [random.randrange(1, (window_x // 10)) * 10, random.randrange(1, (window_y // 10)) * 10]food_spawn Truegame_window.fill(black)for pos in snake_body:pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], snake_block, snake_block))pygame.draw.rect(game_window, red, pygame.Rect(food_pos[0], food_pos[1], snake_block, snake_block))if snake_pos[0] 0 or snake_pos[0] window_x - snake_block:game_over()if snake_pos[1] 0 or snake_pos[1] window_y - snake_block:game_over()for block in snake_body[1:]:if snake_pos[0] block[0] and snake_pos[1] block[1]:game_over()show_score(1, white, times new roman, 20)pygame.display.update()fps.tick(snake_speed)呈现代码结果
该项目效果如图所示