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

情人节到了,是时候拿出祖传小程序了?

时间:2023-03-26 13:01:32 Python

原文链接https://mp.weixin.qq.com/s/wM...看效果展示视频:https://zhuanlan.zhihu.com/p/...原理介绍原理类似到之前的代码,但是之前的代码丑,效果也丑(每次当月看上个月的代码,都觉得代码好丑。更何况这么“古”》代码,不知道大家是不是这样认为T_T)。具体来说,首先我们定义一个按钮类,其功能是根据初始化参数在界面上生成一个按钮,按钮是否可以点击也是由传入的初始化参数决定的。具体代码实现如下:'''函数:Button类InitialArgs:--x,y:按钮左上角的坐标--width,height:按钮的宽高--text:按钮显示的文字--fontpath:字体路径--fontsize:字体大小--fontcolor:字体颜色--bgcolors:按钮背景颜色--is_want_to_be_selected:按钮是否要被播放器选中--screensize:软件屏幕大小'''classButton(pygame.sprite.Sprite):def__init__(self,x,y,width,height,text,fontpath,fontsize,fontcolor,bgcolors,edgecolor,edgesize=1,is_want_to_be_selected=True,screensize=None,**kwargs):pygame。sprite.Sprite.__init__(self)self.rect=pygame.Rect(x,y,width,height)self.text=textself.font=pygame.font.Font(fontpath,fontsize)self.fontcolor=fontcolorself.bgcolors=bgcolorsself.edgecolor=edgecolorself.edgesize=edgesize自我。is_want_tobe_selected=is_want_to_be_selectedself.screensize=screensize'''根据各种情况自动将按钮绑定到屏幕'''defdraw(self,screen,mouse_pos):#鼠标在按钮范围内ifself.rect.Collidepoint(mouse_pos):#--不想被选中self.is_want_tobe_selected:whileself.rect.collidepoint(mouse_pos):self.rect.left,self.rect.top=random.randint(0,self.screensize[0]-self.rect.width),random.randint(0,self.screensize[1]-self.rect.height)pygame.draw.rect(screen,self.bgcolors[0],self.rect,0)pygame.draw.rect(screen,self.edgecolor,self.rect,self.edgesize)#鼠标不在按钮范围内else:pygame.draw.rect(screen,self.bgcolors[1],self.rect,0)游戏。draw.rect(screen,self.edgecolor,self.rect,self.edgesize)text_render=self.font.render(self.text,True,self.fontcolor)fontsize=self.font.size(self.text)屏幕。blit(text_render,(self.rect.x+(self.rect.width-fontsize[0])/2,self.rect.y+(self.rect.height-fontsize[1])/2))实际上是在看鼠标当前位置是否在按键范围内?如果是并且设置阻止用户点击按钮,按钮的位置将自动移动,使鼠标位置不在移动按钮的范围内然后写一个主循环,让界面大小、配色、布局更分散一点:'''mainfunction'''defmain():#Initializepygame.init()screen=pygame.display.set_mode(cfg.SCREENSIZE,0,32)pygame.display.set_icon(pygame.image.load(cfg.ICON_IMAGE_PATH))pygame.display.set_caption('来自喜欢你的小哥哥')#背景音乐pygame.mixer.music.load(cfg.BGM_PATH)pygame.mixer.music.play(-1,30.0)#biulove的背景图bg_image=pygame.image.load(cfg.BG_IMAGE_PATH)bg_image=pygame.transform.smoothscale(bg_image,(150,150))#实例化两个按钮button_yes=Button(x=20,y=cfg.SCREENSIZE[1]-70,width=120,height=35,text='OK',fontpath=cfg.FONT_PATH,fontsize=15,fontcolor=cfg.BLACK,edgecolor=cfg.SKYBLUE,edgesize=2,bgcolors=[cfg.DARKGRAY,cfg.GAINSBORO],is_want_to_be_selected=True,screensize=cfg.SCREENSIZE)button_no=按钮(x=cfg.SCREENSIZE[0]-140,y=cfg.SCREENSIZE[1]-70,width=120,height=35,text='算了',fontpath=cfg.FONT_PATH,fontsize=15,fontcolor=cfg.BLACK,edgecolor=cfg.DARKGRAY,edgesize=1,bgcolors=[cfg.DARKGRAY,cfg.GAINSBORO],is_want_to_be_selected=False,screensize=cfg.SCREENSIZE)#是否点击OK按钮is_agree=False#主循环clock=pygame.time.Clock()whileTrue:#--backgroundimagescreen.fill(cfg.WHITE)screen.blit(bg_image,(cfg.SCREENSIZE[0]-bg_image.get_height(),0))#--mouseeventcaptureforeventinpygame.event.get():ifevent.type==pygame.QUIT:#----在点击确定按钮之前不要退出程序ifis_agree:pygame.quit()sys.exit()elifevent.type==pygame.MOUSEBUTTONDOWN和event.button:ifbutton_yes.rect.collidepoint(pygame.mouse.get_pos()):button_yes.is_selected=Trueroot=Tk()root.withdraw()messagebox.showinfo('','???什么????')root.destroy()is_agree=True#--显示文字showText(screen=screen,text='小姐姐,我观察你很久了',position=(40,50),fontpath=cfg.FONT_PATH,fontsize=25,fontcolor=cfg.BLACK,is_bold=False)showText(screen=screen,text='做我女朋友怎么样?',position=(40,100),fontpath=cfg.FONT_PATH,fontsize=25,fontcolor=cfg.BLACK,is_bold=True)#--displayButtonbutton_yes.draw(screen,pygame.mouse.get_pos())button_no.draw(screen,pygame.mouse.get_pos())#--刷新pygame.display.update()clock.tick(60)没有关键点,代码是什么意思?自己看评论。T_T记得立个flag。在对方点击“确定”按钮之前,不要让对方关闭这个小程序~完整源码https://github.com/CharlesPik..。