第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂

| 40页
| 155人阅读
| 3人下载
精品

内容正文:

第七单元 7.3 项目3 节日活动对对碰 Python程序设计基础 同步精品课堂 高等教育出版社 任务一 Pygame基础和屏幕设置 任务二 图片资源加载与网格布局 任务三 交互与匹配逻辑 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学目标 一 1、掌握Pygame库的窗口创建和时间处理等操作 2、理解和掌握Pygame模块的常用函数的使用 3、掌握图片资源的加载与网格布局操作 4、理解图片的管理和分配操作 教学重难点 二 教学重点: 1、Pygame模块的常用函数的使用 2、图片资源的加载与网格布局操作 教学难点: Pygame模块的常用函数的使用 导入新课 三 中国传统节日蕴含着悠久的历史和丰富的文化底蕴。春节贴春联、包饺子,端午节赛龙舟、包粽子,中秋节赏月、吃月饼……每个节日都有独特的习俗 今天,我们一起来开发一款“对对碰”游戏, 通过匹配节日图案与习俗图案,在娱乐中学习传统文化。 任务一 Pygame基础和屏幕设置 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 1、Pygame简介 Pygame 是基于 SDL 的开源 Python 2D 游戏库,免费、跨平台、易学,适合做小游戏与多媒体交互项目。通过“pip install pygame”安装。 图形渲染:窗口创建、2D 图像 / 精灵绘制、缩放 / 旋转 / 透明混合、字体渲染、基础图形(点 / 线 / 矩形 / 圆)。 音频播放:WAV/OGG/MP3 音效与背景音乐,支持混音与音量控制。 输入处理:键盘、鼠标、游戏手柄事件监听与状态读取。 游戏工具:精灵(Sprite)与精灵组、矩形碰撞检测、帧率控制、资源管理。 跨平台:Windows/macOS/Linux;可通过 Pygame for Android 打包安卓应用。 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 2、Pygame的核心函数 函数 功能 pygame.init() 初始化Pygame所有模块 pygame.display.set_mode((w,h)) 创建游戏窗口 pygame.display.set_caption(标题) 设置窗口标题 screen.fill(颜色) 填充背景色 pygame.display.flip() 更新屏幕显示 pygame.event.get() 获取所有事件 pygame.quit() 退出Pygame 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 3、Pygame程序的基本结构 步骤1:导入模块和初始化 import pygame; pygame.init() 步骤2:创建窗口 screen = pygame.display.set_mode() 步骤3:游戏主循环 while running: 处理事件 → 更新逻辑 → 绘制画面 → 刷新 步骤4:退出游戏 pygame.quit(); sys.exit() 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、常用RGB颜色模型 RGB颜色由(红, 绿, 蓝)三个值组成,范围0-255 白色 (255, 255, 255) 黑色 (0, 0, 0) 红色 (255, 0, 0) 绿色 (0, 255, 0) 蓝色 (0, 0, 255) 浅绿色 (199, 224, 203) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 5、实操任务一 正确导入pygame和sys 初始化pygame 创建窗口并设置标题 实现游戏主循环和退出事件 运行后窗口能正常显示且能关闭 创建Pygame窗口,尺寸为600×600,标题为“对对碰游戏”,背景色为浅蓝色(173, 216, 230) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 5、实操任务一 import pygame import sys pygame.init() screen_width, screen_height = 800, 800 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("节日活动对对碰") bg_color = (199, 224, 203) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill(bg_color) pygame.display.flip() pygame.quit() sys.exit() 初始化 创建窗口 定义背景色(浅绿色) 窗口关闭按钮事件类型,退出游戏 用指定颜色填充整个窗口 更新整个屏幕(双缓冲机制) 任务二 图片资源加载与网格布局 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 1、Pygame图片处理函数 pygame.image.load(路径):加载图片,返回Surface对象。 如img = pygame.image.load('a.png') pygame.transform.scale(图片, (宽,高)):缩放图片。 如scaled = transform.scale(img, (100,100)) os.path.join(路径, 文件名):跨平台路径拼接。 如os.path.join('images', 'a.png') 新知讲授 四 2、图片资源加载 import os image_folder = 'images' tile_size = 180 # 每个格子的大小 images_group1 = [] images_group2 = [] for i in range(9): path = os.path.join(image_folder, f'imageA{i+1}.png') img = pygame.image.load(path) scaled_img = pygame.transform.scale(img, (tile_size, tile_size)) images_group1.append(scaled_img) for i in range(9): path = os.path.join(image_folder, f'imageB{i+1}.png') img = pygame.image.load(path) scaled_img = pygame.transform.scale(img, (tile_size, tile_size)) images_group2.append(scaled_img) 使用os.path.join()可以写出跨平台兼容的代码。 Windows操作系统的路径分隔符为”\“ Linux/Mac操作系统的路径分隔符为”/“ 加载第一组图片 加载第二组图片 新知讲授 四 3、实操任务二 创建images文件夹,放入2张测试图片,编写代码加载并显示一张图片到窗口中央 使用os.path.join()拼接路径 加载图片并缩放到100×100像素 在主循环中使用screen.blit(img, (x, y))绘制图片 图片显示在窗口中央 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——①4×4网格布局思路与网格坐标计算 公式:x = col × tile_size + margin y = row × tile_size + margin 窗口宽度 = 800,格子大小 = 180 边距 = (800 - 4×180) / 2 = 40 第0行第0列 坐标 (40, 40) 第0行第1列 坐标 (220, 40) 第0行第2列 坐标 (400, 40) 第0行第3列 坐标 (580, 40) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——①4×4网格布局思路与网格坐标计算 (0,0) (1,0) (2,0) (3,0) (0,1) (1,1) (2,1) (3,1) (0,2) (1,2) (2,2) (3,2) (0,3) (1,3) (2,3) (3,3) margin=40 row=0 row=1 row=2 row=3 每个格子:宽=180,高=180 坐标 = (col×180+40, row×180+40) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——②网格数据结构设计 # 网格列表,每个元素是一个元组:(图片, 图片ID, 位置) grid = [] for row in range(4): for col in range(4): x = col * tile_size + margin y = row * tile_size + margin # 暂用占位图片,后续替换为真实图片 grid.append((placeholder_img, -1, (x, y))) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——③图片配对与图片池构建 import random image_pairs = list(zip(images_group1, images_group2)) # image_pairs = [(imgA1, imgB1), (imgA2, imgB2), ...] image_pool = [] for id_num, (img1, img2) in enumerate(image_pairs): image_pool.append((img1, id_num)) # A图,ID=id_num image_pool.append((img2, id_num)) # B图,ID=id_num random.shuffle(image_pool) 步骤1:将两组图片配对 步骤2:构建图片池(每对拆成两张独立图片,并分配相同ID) 步骤3:打乱顺序(每次游戏图片位置不同) 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——④将图片池分配到网格 # 确保图片数量足够(需要16张,共18张,足够) grid = [] for row in range(4): for col in range(4): # 从图片池中取出一张图片 img, img_id = image_pool[row * 4 + col] x = col * tile_size + margin y = row * tile_size + margin grid.append([img, img_id, (x, y)]) # 使用列表便于修改 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 4、网格布局——⑤绘制网格函数 def draw_grid(): screen.fill(bg_color) # 清空背景 for img, img_id, pos in grid: if img is not None: # 图片未被移除 screen.blit(img, pos) pygame.display.flip() # 刷新屏幕 新知讲授 四 5、实操任务三 完成4×4网格布局,显示所有图片 计算边距使网格居中 构建图片池并随机打乱 将图片分配到网格中 编写draw_grid()函数并调用 任务三 交互与匹配逻辑 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 1、匹配逻辑 游戏状态 selected = None (当前选中的图片索引) 玩家单击图片 selected == None (第一次单击) 记录selected= 当前索引 selected != None (第二次单击) 比较两张图片的ID 同一张图片 (忽略) ID不同 (不匹配) ID相同 (匹配) selected不变 (但取消高亮) 两张图片设为None 匹配数+1 selected = None 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 2、代码实现——①获取鼠标单击位置 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN: mouse_x, mouse_y = pygame.mouse.get_pos() # 判断单击了哪个图片 for i, (img, img_id, (x, y)) in enumerate(grid): if img is not None: if x <= mouse_x <= x + tile_size and y <= mouse_y <= y + tile_size: # 单击了第i张图片 handle_click(i) 判断鼠标是否点在图片区域内 机位固定:摄像机本身不移动(如不推、拉、摇、移)。 新知讲授 四 2、代码实现——②匹配逻辑实现 selected = None # 全局选中的图片索引 def handle_click(clicked_index): global selected if selected is None: selected = clicked_index # 选中当前图片 return if selected == clicked_index: selected = None # 取消选中 return img1, id1, pos1 = grid[selected] img2, id2, pos2 = grid[clicked_index] if id1 == id2: # 匹配成功,移除两张图片 grid[selected] = (None, id1, pos1) grid[clicked_index] = (None, id2, pos2) # 匹配失败,什么都不做 selected = None # 无论成功失败,清除选中状态 通过配对ID判断两张图片是否属于同一组, 而不是直接比较图片对象。 新知讲授 四 3、实操任务四 实现鼠标单击匹配功能 检测鼠标单击事件 判断单击了哪张图片 实现选中状态(用变量存储选中的图片索引) 比较两次单击图片的ID,相同则移除 在draw_grid()中可视化选中效果(边框) 师生互动 五 1、pygame.display.flip()和 pygame.display.update() 有什么区别? 2、在4×4网格中,如何计算第2行第3列图片的屏幕显示坐标?(其中边距为40,格子为180) 3、鼠标单击图片时,程序如何判断单击了哪一张图片? 答案: 1、flip() 更新整个窗口,update() 可只更新指定区域。简单游戏用 flip() 更方便。 2、x = 40 + 2×180 = 400,y = 40 + 1×180 = 220。公式:x = 边距 + 列×格宽,y = 边距 + 行×格高。 3、遍历网格,用碰撞检测判断鼠标坐标是否在图片区域内:x≤mx≤x+宽 且 y≤my≤y+高。 随堂练习 六 1 、下列( )函数用于将图片绘制到屏幕上。 A. screen.draw() B. screen.image() C. screen.blit() D. screen.render() 答案:C 解析:screen.blit(source, dest)将源图像绘制到屏幕的指定位置。 随堂练习 六 2 、在Pygame中,用于更新整个屏幕显示的函数是( ) A. screen.update() B. pygame.display.update() C. pygame.display.flip() D. screen.refresh() 答案:C 解析:pygame.display.flip()更新整个屏幕的内容,确保所有修改立即显示。 随堂练习 六 3 、下列( )函数用于加载图片文件。 A. pygame.load.image() B. pygame.image.load() C. pygame.graphics.load() D. pygame.sprite.load() 答案:B 解析:pygame.image.load(file)加载图片文件并返回Surface对象。 随堂练习 六 4 、在RGB颜色模型中,(255, 0, 0)表示( )。 A. 绿色 B. 蓝色 C. 红色 D. 黑色 答案:C 解析:RGB模型中(255, 0, 0)表示红色,红色分量最大,绿蓝为0。 随堂练习 六 5 、(多项选择题)( )是Pygame模块的常用功能。 A. 图形绘制 B. 声音处理 C. 数据库操作 D. 用户输入处理 答案:ABD 解析:Pygame支持图形、声音、输入处理,但不包含数据库操作。 随堂练习 六 6 、(多项选择题)( )函数属于Pygame的事件处理相关。 A. pygame.event.get() B. pygame.mouse.get_pos() C. pygame.display.flip() D. pygame.QUIT 答案:ABD 解析:pygame.QUIT是事件类型,event.get()获取事件,mouse.get_pos()获取鼠标位置;display.flip()是屏幕更新函数。 随堂练习 六 7、(是非选择题)pygame.QUIT事件在用户按下键盘时触发。 A.正确 B.错误 答案:B 解析:pygame.QUIT在用户点击窗口关闭按钮时触发,键盘事件是KEYDOWN。 随堂练习 六 8、(是非选择题pygame.font.SysFont('SimHei', 58)中的58表示字体颜色。 A.正确 B.错误 答案:B 解析:58表示字体大小(像素),颜色在render()中设置。 随堂练习 六 9、Pygame中使用 方法将 区域填充为指定的颜色,为后续的图像绘制、 等操作提供了干净的背景。为了设定统一的屏幕风格,通常会预定义 ,并在每次刷新屏幕时 ,确保用户界面的一致性。 答案:fill() 整个屏幕 文字显示 颜色变量 应用颜色填充 解析:Pygame中使用fill()方法将整个屏幕区域填充为指定的颜色,为后续的图像绘制、文字显示等操作提供了干净的背景。为了设定统一的屏幕风格,通常会预定义颜色变量,并在每次刷新屏幕时应用颜色填充,确保用户界面的一致性。 课堂小结 七 谢谢 $

资源预览图

第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第1页
1
第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第2页
2
第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第3页
3
第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第4页
4
第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第5页
5
第七单元 7.3 项目3 节日活动对对碰(课件)-《Python程序设计基础》(高等教育出版社)同步精品课堂-第6页
6

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。