用Python做贪吃蛇小游戏

本文介绍了使用Python的pygame库创建贪吃蛇小游戏的过程,详细讲解了游戏的主要结构、代码框架和关键函数,包括游戏初始化、游戏循环、贪吃蛇与食物的绘制以及移动判断等。
摘要由CSDN通过智能技术生成

简介

贪吃蛇游戏是一款经典的益智游戏,既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长。

引言

贪吃蛇小游的设计过程,以及这个系列专题的整体架构

游戏预览

游戏开始界面
游戏开始页面

游戏进行界面
游戏进行画面

游戏结束界面

游戏结束界面

结构图

结构图

代码框架图

代码框架图

代码讲解

整个程序由于是调用了大量的pygame里面的库函数

main主函数-开始工作

主要承担一些游戏窗口的初始化工作,以及调用相关函数运行游戏。代码如下:

#主函数
def main():
	pygame.init() # 模块初始化
	snake_speed_clock = pygame.time.Clock() # 利用pygame的time模块创建Pygame时钟对象
	screen = pygame.display.set_mode((windows_width, windows_height)) #利用pygame显示模块设置模式窗口宽度窗口高度
	screen.fill(white)

	pygame.display.set_caption("Python 贪吃蛇小游戏") #设置标题
	show_start_info(screen)               #欢迎信息
	while True:
		running_game(screen, snake_speed_clock)
		show_gameover_info(screen)
        

基于以上代码,咱们来做几点讲解:

  • pygame.time.Clock()
    利用pygame的time模块创建Pygame时钟对象,控制帧速率。pygame.time.Clock()会控制每个循环多长时间运行一次。

  • pygame.display.set_mode((windows_width, windows_height))
    生成windows窗口,pygame.display.set_mode(resolution=(0,0),flags=0,depth=0)。返回的是一个surface对象(surface对象是用于表示图像的图像,只要指定尺寸,就可以利用),resolution可以控制生成windows窗口的大小,flags代表的是扩展选项,

  • pygame.surface.fill(color)。对surface对象填充某一种颜色,在这里表现为窗口背景颜色的填充。

然后就运行我们游戏三个函数了

  • show_start_info(screen)
    显示欢迎信息,最终效果表现为:
    游戏开始界面

接着死循环。因为我们的游戏设置是,当GameOver以后,我们可以按任意键重新开始游戏,或者退出。因此最后不断循环判断用户是否想重新开始游戏。

  • 游戏主体running_game(screen, snake_speed_clock)
    贪吃蛇运行的主体函数。整个程序的精髓所在。

  • show_gameover_info(screen)
    贪吃蛇死了,显示GameOver,表现为:
    游戏结束界面

show_start_info()欢迎进入游戏

代码如下:

#开始信息显示
def show_start_info(screen):
	font = pygame.font.Font('myfont.ttf', 40)
	tip = font.render('按任意键开始游戏~~~', True, (65, 105, 225))
	gamestart = pygame.image.load('gamestart.png')
	screen.blit(gamestart, (140, 30))
	screen.blit(tip, (240, 550))
	pygame.display.update()

	while True:  #键盘监听事件
		for event in pygame.event.get():  # event handling loop
			if event.type == QUIT:
				terminate()     #终止程序
			elif event.type == KEYDOWN:
				if (event.key == K_ESCAPE):  #终止程序
					terminate() #终止程序
				else:
					return #结束此函数, 开始游戏
        
  • 字体显示
    先创建一个Font对象,用自己的字体。有了Font对象以后, 就可以用render方法来写字了,然后通过blit方法blit到屏幕上。

  • 图像加载
    用 pygame.image.load()加载图像获得对象,在用blit方法刷到屏幕上。做完以上事件以后,要update一下刷新一下屏幕。

  • 监听键盘
    按任意键继续或者ESC退出……

running_game-让我们开始游戏吧

running_game(screen, snake_speed_clock)是游戏主要功能,也是最精髓的一部分
代码如下:

#游戏运行主体
def running_game(screen,snake_speed_clock):
	startx = random.randint(3, map_width - 8) 	#蛇开始游戏的位置
	starty = random.randint(3, map_height - 8)
	snake_coords = [{
   'x': startx, 'y': starty},  #初始贪吃蛇
                  {
   'x': startx - 1, 'y': starty},
                  {
   'x': startx - 2, 'y': starty}]

	direction = RIGHT                     #  开始时向右移动

	food = get_random_location()          #食物随机位置

	while True:
		for event in pygame.event.get():
			if event.type == QUIT:
				terminate()
			elif event.type == KEYDOWN:
				if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
					direction = LEFT
				elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
					direction = RIGHT
				elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
					direction = UP
				elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
					direction = DOWN
				elif event.key == K_ESCAPE:
					terminate()

		move_snake(direction, snake_coords) 		#移动蛇

		ret = snake_is_alive(snake_coords)
		if not ret:
			break 								#蛇死了. 游戏结束
		snake_is_eat_food(snake_coords
使用Python创建贪吃蛇小游戏主要涉及到几个关键组件:游戏循环、事件处理、蛇的移动、食物的生成与消耗以及游戏结束的判断。以下是实现贪吃蛇小游戏的基本步骤: 1. 导入必要的模块:通常需要`pygame`这个库来帮助我们处理图形界面和游戏逻辑。 2. 初始化游戏和创建窗口:使用`pygame.init()`初始化游戏引擎,然后创建一个窗口,设置窗口大小、标题等。 3. 定义蛇的属性和食物的位置:可以创建一个列表来存储蛇身体的每个部分的位置,食物位置通常是一个坐标点。 4. 游戏主循环:游戏的主循环是游戏运行的核心,通常包含事件检测、更新游戏状态、渲染画面等步骤。 5. 事件处理:在主循环中检测键盘事件,根据按键更新蛇的移动方向。 6. 蛇的移动:根据蛇的方向更新蛇身体每一部分的位置,实现蛇的移动。 7. 检测碰撞:需要检测蛇头是否与食物或自身的其他部分发生碰撞,如果是与食物碰撞,增加长度;如果是自身碰撞或与墙壁碰撞,则游戏结束。 8. 更新画面:在每个游戏循环中重新绘制蛇、食物和更新分数等信息。 9. 游戏结束处理:当游戏结束时,显示最终得分,并提供重新开始的选项。 这只是一个大致的框架,具体的实现还需要编详细的代码。下面提供一个非常简化的示例代码框架: ```python import pygame import sys # 初始化pygame pygame.init() # 创建窗口 screen = pygame.display.set_mode((width, height)) pygame.display.set_caption('贪吃蛇小游戏') # 定义蛇和食物的数据结构 snake_pos = [(100, 100), (90, 100), (80, 100)] food_pos = (150, 100) snake_speed = [10, 0] # 游戏主循环 while True: # 事件处理 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # 键盘事件 elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: snake_speed = [0, -10] # 其他按键处理... # 更新游戏状态 snake_pos.insert(0, list(map(lambda x, y: x + y, snake_pos[0], snake_speed))) if snake_pos[0] == food_pos: # 生成新的食物位置 food_pos = ... else: # 移动蛇身 snake_pos.pop() # 检测游戏结束条件 if ...: print("游戏结束") pygame.quit() sys.exit() # 更新画面 screen.fill((0, 0, 0)) # 清屏 pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(snake_pos[0][0], snake_pos[0][1], 10, 10)) # 绘制蛇头 pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(food_pos[0], food_pos[1], 10, 10)) # 绘制食物 pygame.display.flip() # 更新屏幕显示 # 控制游戏速度 pygame.time.Clock().tick(30) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值