当前位置: 首页 > 后端技术 > Python

2021年南方今年的第一场雪是Python

时间:2023-03-25 21:55:21 Python

大家好,2021年即将结束,北方今年的第一场雪已经下了。不过南方还没有开始下雪,所以想用Python给想去南方看雪的朋友下一场雪~先介绍下用到的工具:用pygame实现,Python版是3.8。首先,执行以下命令安装pygamepipinstallpygame然后创建一个Python源文件,编写如下代码做一些初始化工作importsysimportrandomimportpygamepygame.init()clock=pygame.time.Clock()bg_size=width,height=1200,750screen=pygame.display.set_mode(bg_size)bg=pygame.image.load('bg.jpg')clock后面会用来设置帧率,bg_size是应用窗口大小(width和高度),屏幕是创建的屏幕(应用程序窗口),可以向其添加元素。bg是用作窗口背景图像的加载图像。要制作雪花效果,实际上有两个步骤。第一步是定义雪花,第二步是让雪花动起来。1.定义雪花雪花的定义比较简单,我们直接用大圆圈和小圆圈代替即可。定义一个圆需要一个圆心和一个半径,这一步我们还要定义移动距离。写一个函数,批量生成圆defget_snows_circle(pic_num):"""生成一个数组,返回一些雪花,其中包括雪花在屏幕上的位置、半径、运动的x、y坐标:parampic_num:初始化了多少雪花:return:包含雪花属性的数组"""snows=[]foriinrange(pic_num):x_pos=random.randint(0,width)#雪花在屏幕上的x坐标y_pos=random.randint(0,height)#雪花在屏幕上的y坐标radius=random.randint(2,4)#雪花的半径x_delta=random.randint(-1,1)#雪花的距离向x轴方向移动y_delta=random.randint(4,6)#Snows.append([[x_pos,y_pos],[x_delta,y_delta],radius])returnsnows2.让雪花动起来的思路比较简单。当雪花第一次出现在屏幕后,我们根据x_delta和y_delta调整雪花的中心,然后刷新屏幕,这时候雪花会移动到一个新的位置,然后我们移动中心圆圈内,雪花可以继续移动,重复这个步骤,就可以实现下面的雪花效果。上面的过程可以用一个for循环来完成。snow_pics=get_snows_circle(250)whileTrue:foreventinpygame.event.get():#监听是否有退出事件,固定写法ifevent.type==pygame.QUIT:sys.exit()screen.blit(bg,(0,0))#为snow_pics中的snow_info设置背景图像:pos=snow_info[0]pos_delta=snow_info[1]pygame.draw.circle(screen,(255,255,255),pos,snow_info[2])#在屏幕上画雪花screen.blit(snow_info[2],pos)Movepos[0]+=pos_delta[0]pos[1]+=pos_delta[1]ifpos[1]>height:#Exceeds屏幕的高度,重置起始位置pos[0]=random.randint(0,width)pos[1]=random.randint(-50,-30)#设置y坐标为负值初始雪花会在屏幕外pygame.display.flip()#刷新屏幕clock.tick(30)#每秒不超过30帧,雪花落地会更顺畅调用get_snows_circle(250)生成250个雪花,后面跟着一个while循环用于刷新屏幕。对于snow_pics中的snow_info:代码是我们开始的代码,显示250个雪花,然后调整它们的中心。其他代码都有注释,这里不再赘述。3.添加音乐有点不同。pygame中添加音乐的方式也很简单。只需执行以下两行代码。我用的声音pygame.mixer.music.play()是《雪落下的声音》的伴奏版,非常好听。4.在另一个版本中,除了圆圈,还可以使用现成的图标来实现雪花。比如我用它来实现第一个版本。效果如下。个人觉得圆形更好看,虽然图标比圆形好看,但是过于方正反而显得整个画面很死板。这个因人而异,也可以把背景图换成甜美的照片来一段程序员式的浪漫。