1/6一、实践课程目的1、通过综合实践练习,能够掌握Python基础语法,能够应用Python语言编程解决某一具体领域的应用问题。2、通过综合实践练习,能够理论联系实际,提升分析问题与解决问题的能力。二、设备与环境PC机、Windows操作系统、Python3.7软件等。三、项目设计内容1、课题名称《强制表白神器》2、程序功能通过Python语句实现简单表白;通过设置按钮实现一个按钮躲避鼠标至随机点,一个按钮可以正常使用,不选择好呀无法关闭程序以达到强制表白的目的;通过turtle等导包辅助画出完整的爱心树加强表白时的浪漫气氛;音乐的添加使得被表白者情绪高涨,心防减弱,更容易接受表白。3、源程序代码importpygame#pygame是一个设计用来开发游戏的Python模块,专为电子游戏设计。包含图像、声音,在SDL库的基础上提供了各种接口,从而使用用户能够使用python语言创建各种各样的游戏或多媒体程序importrandomimporttimeimportturtle#Turtle库是Python语言中一个很流行的绘制图像的函数库,根据一组函数指令的控制,在这个平面坐标系中移动,从而在爬行的路径上绘制图形。importmultiprocessingimportsys#该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数frompygame.localsimport*importmatplotlib.pyplotasplt#坐标绘图WIDTH,HEIGHT=640,480BACKGROUND=(255,201,174)#背景颜色#按钮defbutton(text,x,y,w,h,color,screen):pygame.draw.rect(screen,color,(x,y,w,h))font=pygame.font.Font('./font/1.ttf',20)#字体样式和大小textRender=font.render(text,True,(0,0,0))textRect=textRender.get_rect()textRect.center=((x+w/2),(y+h/2))#按钮位置screen.blit(textRender,textRect)#标题deftitle(text,screen,scale,color=(255,0,0)):font=pygame.font.Font('./font/1.ttf',WIDTH//(len(text)*2))textRender=font.render(text,True,color)textRect=textRender.get_rect()textRect.midtop=(WIDTH/scale[0],HEIGHT/scale[1])screen.blit(textRender,textRect)#生成随机的位置坐标defget_random_pos():x,y=random.randint(20,620),random.randint(20,460)returnx,y#点击喜欢按钮后显示的页面2/6defshow_like_interface(text,screen,color=(255,0,0)):screen.fill(BACKGROUND)font=pygame.font.Font('./font/5.ttf',WIDTH//(len(text)))#字体属性textRender=font.render(text,True,color)textRect=textRender.get_rect()textRect.midtop=(WIDTH/2,HEIGHT/2-50)screen.blit(textRender,textRect)pygame.display.update()whileTrue:foreventinpygame.event.get():ifevent.type==QUIT:pygame.quit()sys.exit()defdraw_arc(lv):foriinrange(20):lv.right(10)lv.forward(2)#画爱心树上的爱心defdraw_love(x,y):love=turtle.Turtle()love.hideturtle()love.up()love.goto(x,y)#爱心的坐标love.color('red','pink')#上色love.speed(100000000000)#画笔的速度love.pensize(2)#画笔粗细love.down()love.begin_fill()love.left(140)#画笔自右向左移动love.forward(22)#画笔向上方移动画爱心draw_arc(love)love.left(120)draw_arc(love)love.forward(22)love.left(140)love.end_fill()#终止#爱心树干defdraw_tree(branchLen,tur):ifbranchLen5:ifbranchLen20:tur.color('green')#短树杈判断,如果是为绿色tur.pensize(random.uniform((branchLen+5)/4-2,(branchLen+6)/4+5))tur.down()tur.forward(branchLen)draw_love(tur.xcor(),tur.ycor())tur.up()tur.backward(branchLen)#树干为棕色tur.color('brown')returntur.pensize(random.uniform((branchLen+5)/4-2,(branchLen+6)/4+5))tur.down()tur.forward(branchLen)angle=random.uniform(15,45)tur.right(angle)draw_tree(branchLen-random.uniform(12,16),tur)tur.left(2*angle)draw_tree(branchLen-random.uniform(12,16),tur)tur.right(angle)tur.up()tur.backward(branchLen)#爱心树实现函数defdraw_main():Win=turtletur=turtle.Turtle()tur.hideturtle()3/6tur.speed(10000000)tur.left(90)tur.up()tur.backward(200)tur.down()tur.color(brown)#树主干颜色tur.pensize(32)tur.forward(60)draw_tree(100,tur)Win.exitonclick()#主函数defmain():pygame.init()screen=pygame.display.set_mode((WIDTH,HEIGHT),0,32)pygame.display.set_caption('FROM一个喜欢你很久的小姐姐')#窗口显示clock=pygame.time.Clock()pygame.mixer.music.load('./bg_music/1.mp3')#背景音乐存放地址加载背景音乐pygame.mixer.music.play(-1,30.0)#背景音乐循环播放,从音乐第30秒播放pygame.mixer.music.set_volume(0.25)#背景音乐音量unlike_pos_x=330unlike_pos_y=300unlike_pos_width=100unlike_pos_height=50like_pos_x=180like_pos_y=300like_pos_width=100like_pos_height=50running=Truelike_color=(255,128,255)whilerunning:#运行程序screen.fill(BACKGROUND)img=pygame.image.load(./imgs/1.png)#背景中间的图片imgRect=img.get_rect()imgRect.midtop=WIDTH//2,HEIGHT//4screen.blit(img,imgRect)foreventinpygame.event.get():#按钮随机躲避鼠标设置ifevent.type==pygame.MOUSEBUTTONDOWN:mouse_pos=pygame.mouse.get_pos()ifmouse_pos[0]like_pos_x+like_pos_width+5andmouse_pos[0]like_pos_x-5and\mouse_pos[1]like_pos_y+like_pos_height+5andmouse_pos[1]like_pos_y-5:like_color=BACKGROUNDrunning=Falsemouse_pos=pygame.mouse.get_pos()ifmouse_pos[0]unlike_pos_x+unlike_pos_width+5andmouse_pos[0]unlike_pos_x-5and\mouse_pos[1]unlike_pos_y+unlike_pos_height+5andmouse_pos[1]unlike_pos_y-5:whileTrue:unlike_pos_x,unlike_pos_y=get_random_pos()ifmouse_pos[0]unlike_pos_x+unlike_pos_width+5andmouse_pos[0]unlike_pos_x-5and\mouse_pos[1]unlike_pos_y+unlike_pos_height+5andmouse_pos[1]unlike_pos_y-5:continuebreaktitle('小哥哥,我观察你很久了',screen,scale=[2,10])title('做我男朋友好不好呀',screen,scale=[2,6])button('好呀',like_pos_x,like_pos_y,like_pos_width,like_pos_height,like_color,screen)button('算了吧',unlike_pos_x,unlike_pos_y,unlike_pos_width,unlike_pos_height,(255,128,255),screen)pygame.display.flip()#更新整个待显示的Surface对象到屏幕上pygame.display.update()#更新部分界面显示clock.tick(60)process1=multiprocessing.Process(target=draw_main)process1.start()show_like_interface('我就知道小哥哥你也喜欢我~',screen,color=(255,0,0))if__name__=='__main__':main()4/64、程序运行结果运行首界面,图4-1:图4-1首界面点击“算了吧”,“算了吧”随机移动,无法点击,并且无法关闭窗口,如图4-2:图4-2只能点击“好吧”,出现如下图4-3页面:图4-3紧接着,出现画出“表白树”的过程,如图4-4:5/6图4-4最后形成如图4-5“表白树”:图4-5“表白树”6/6四、项目设计总结此次课程设计“Python表白神器”基本完成。我更加扎实的掌握了有关Python的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知