尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

# Python 学习记录:用 pygame 做出简易球碰撞游戏

# Python 学习记录:用 pygame 做出简易球碰撞游戏 前言昨天我开始学习 pygame从绘制图形、展示图片到用按键控制角色移动最后在老师的指导下完成了简易球碰撞游戏。第一次让画面动起来、让小球自己反弹真的特别有成就感。一、pygame 的图形绘制昨天学习了四种常用图形的绘制矩形用pygame.draw.rect()圆形用pygame.draw.circle()椭圆形用pygame.draw.ellipse()多边形用pygame.draw.polygon()。老师还演示了图片的展示用pygame.image.load()加载图片再用screen.blit()放到窗口上。演示代码游戏里的挡板和小球pygame.draw.rect(screen,white,pad_rect)# 白色挡板pygame.draw.circle(screen,red,(ball_x,ball_y),ball_r)# 红色小球运行结果黑色窗口中显示一个白色矩形挡板和一个红色圆形小球。二、键盘控制让挡板跟着按键移动我学会了用pygame.key.get_pressed()读取按键状态并用K_LEFT、K_RIGHT控制左右方向也练习了上下左右按键的用法。演示代码keyspygame.key.get_pressed()ifkeys[pygame.K_LEFT]andpad_x0:pad_x-5ifkeys[pygame.K_RIGHT]andpad_xpad_wW:pad_x5运行结果按住键盘左右方向键挡板会左右移动。这里有一个关键点移动时还要判断边界否则挡板会直接跑出窗口外面。三、球碰撞整个游戏的核心小球每帧都按照dx、dy改变坐标碰到左右墙壁或顶部就反转方向碰到挡板或砖块就反弹掉出窗口底部则回到初始位置重新开始。判断碰撞用的是pygame.Rect和colliderect()比手写坐标比较方便很多。演示代码ball_rectpygame.Rect(ball_x-ball_r,ball_y-ball_r,ball_r*2,ball_r*2)pad_rectpygame.Rect(pad_x,pad_y,pad_w,pad_h)ifball_rect.colliderect(pad_rect):dy*-1ifball_rect.colliderect(brick_rect):dy*-1is_brick_existFalse运行结果小球碰到挡板会向上反弹碰到蓝色砖块后砖块消失掉出底部后小球从初始位置重新开始。四、让游戏“活”起来的主循环游戏能一直运行靠的是while running主循环clock.tick(60)控制帧率每帧都重新填充背景、更新位置、绘制图形最后用pygame.display.flip()刷新画面。我今天踩过最深的坑就是忘记写pygame.display.flip()结果画面一直不刷新。老师提醒后我才明白绘制和刷新是两回事。运行结果一个完整的简易打砖块小游戏挡板接球、砖块被打掉、球掉落后重新开始。结尾留言昨天的学习让我发现pygame 比想象中好玩也比想象中容易“踩坑”。接下来我想给游戏加上更多砖块、计分功能还有游戏结束的画面把它做成一个真正能玩的小游戏。
返回列表