python实现公司年会抽奖程序
本文实例为大家分享了python实现年会抽奖程序的具体代码,供大家参考,具体内容如下
发一下自己写的公司抽奖程序。
需求:公司年会要一个抽奖程序,转盘上的每一个人名是随机中奖的,中奖后的人不可以再次中奖,按住抽奖,就会一直在转,放开后,要再转一两圈才停。
刚好自己在学pythoncocos2d,就用这个刚学的东东,直接上源码
#coding:utf-8 # importsys #importos #sys.path.insert(0,os.path.join(os.path.dirname(__file__),'../..')) #解决程序中要显示中文问题 reload(sys) sys.setdefaultencoding('utf8') frompygletimportimage,font frompyglet.glimport* frompyglet.windowimportkey fromcocos.actionsimport* fromcocos.directorimportdirector fromcocos.layerimportLayer fromcocos.layerimportColorLayer fromcocos.sceneimportScene fromcocos.spriteimportSprite fromcocos.textimport* fromcocos.menuimport* importrandom fromcocos.audio.effectimportEffect consts_window={ "width":680, "height":700, "vsync":True, "resizable":True, 'audio_backend':'sdl' } defget_sprite_test(index): d=tests[index] returnScene(d(index)) classSpriteLayer(Layer): is_event_handler=True#:enablepyglet'sevents def__init__(self,index=1): super(SpriteLayer,self).__init__() self.index=index self.top_text="广州德瀚信息信息科技有限公司-年会抽奖" self.image=pyglet.resource.image('r1.png',0.01) #self.image=image.AnimationFrame(image.load('r1.png'),0.1) self.image.anchor_x=self.image.width/2 self.image.anchor_y=self.image.height/2 self.rimage=pyglet.resource.image('r2.png',0.01) #self.rimage=image.AnimationFrame(image.load('r2.png'),0.1) self.rimage.anchor_x=self.image.width/2 self.rimage.anchor_y=self.image.height/2 self.bgimage=pyglet.resource.image('bg1.png') self.bgimage.anchor_x=self.image.width/2 self.bgimage.anchor_y=self.image.height/2 self.pressbgimage=pyglet.resource.image('bg2.png') self.pressbgimage.anchor_x=self.image.width/2 self.pressbgimage.anchor_y=self.image.height/2 self.prizeimage=pyglet.resource.image('name.png') self.prizeimage.anchor_x=self.image.width/2 self.prizeimage.anchor_y=self.image.height/2 defon_key_release(self,keys,mod): #LEFT:gotopreviousscene #RIGTH:gotonextscene #ENTER:restartscene ifkeys==key.LEFT: self.index-=1 ifself.index<1: self.index=len(tests) elifkeys==key.RIGHT: self.index+=1 ifself.index>len(tests): self.index=1 ifkeysin(key.LEFT,key.RIGHT): director.replace(get_sprite_test(self.index)) returnTrue classPrizeMenu(Menu): def__init__(self): super(PrizeMenu,self).__init__() self.menu_valign=BOTTOM self.menu_halign=RIGHT self.font_item['color']=(0,0,0,255) self.font_item_selected['color']=(32,16,32,255) #printdir(self) #thenaddtheitems items=[ (MenuItem('一等奖',self.prize_go)), (MenuItem('二等奖',self.prize_go)), (MenuItem('三等奖',self.prize_go)), (MenuItem('参与奖',self.prize_go)), ] #self.create_menu(items,selected_effect=zoom_in(), #unselected_effect=zoom_out()) self.create_menu(items,shake(),shake_back()) defon_quit(self): pyglet.app.exit() defprize_go(self): s=self.parent ifs.is_begin: s.top_notice.element.text="" else: #s.stop_num=1 s.go_prize() #defmain(): #pyglet.font.add_directory('.') #director.init(resizable=True) #director.run(Scene(PrizeMenu())) #if__name__=='__main__': #main() classStartPrize(SpriteLayer): def__init__(self,index): super(StartPrize,self).__init__(index) self.current_num=0#当前位置 self.is_begin=False#是否已经开始 self.prize_cycle=0#转动圈数 self.prize_speed=0.05#初始速度 self.prize_speed_slow=0.3#慢速度 self.stop_num=0#停止的位置 self.alread_get_prize=[]#已经得奖的人 self.start_slow=False self.can_stop=False self.press_go=False self.sprite=Sprite(self.image) #self.sprite=Sprite(image.Animation([image.AnimationFrame(image.load('r1.png'),0.001)])) self.alread_prize_sprite=Sprite(self.rimage) self.bgsprite=Sprite(self.bgimage) self.pressbgsprite=Sprite(self.pressbgimage) self.prizesprite=Sprite(self.prizeimage) self.top_label=Label(self.top_text) #注意是要有个element self.top_label.element.x=-250 self.top_label.element.y=350 self.top_label.element.color=(0,0,0,255) self.top_label.element.font_size=20 self.top_notice=Label("点击中间开始抽奖") self.top_notice.element.x=120 self.top_notice.element.y=300 self.top_notice.element.color=(255,0,0,255) self.top_notice.element.font_size=20 self.pressbgsprite.do(Hide()) self.alread_prize_sprite.do(Hide()) #self.sprite.do(Hide()) defon_enter(self): super(StartPrize,self).on_enter() bgcolor=ColorLayer(255,255,255,255,consts_window['width'],consts_window['height']) bgcolor.position=(-320,-320) #背景颜色 self.add(bgcolor) #标题 self.add(self.top_label) self.add(self.top_notice) #转动的背景图 self.add(self.sprite,z=3) self.add(self.alread_prize_sprite,z=3) #人名图 self.add(self.prizesprite,z=4) #背景图 self.add(self.bgsprite,z=1) self.add(self.pressbgsprite,z=1) self.position=320,320 #menu=PrizeMenu() #menu.position=(-320,-320) #self.add(menu) #self.sprite.do(Repeat(Rotate(360,4))) defon_key_press(self,keys,mod): super(StartPrize,self).on_key_release(keys,mod) ifkeys==key.ENTER: ifself.is_begin: self.top_notice.element.text="正在抽奖中。。" else: self.press_go=True self.go_prize() returnTrue defon_key_release(self,keys,mod): super(StartPrize,self).on_key_release(keys,mod) ifkeys==key.ENTER: ifself.press_go: self.prize_cycle=0 self.can_stop=True self.press_go=False returnTrue ifkeys==key.S: #self.stop_prize() returnTrue defon_mouse_press(self,x,y,buttons,modifiers): px,py=director.get_virtual_coordinates(x,y) #printpx,py ifpx>188andpx<450andpy>188andpy<450: ifself.is_begin: self.top_notice.element.text="正在抽奖中。。" else: self.press_go=True self.go_prize() defon_mouse_release(self,x,y,buttons,modifiers): px,py=director.get_virtual_coordinates(x,y) ifself.press_go: self.prize_cycle=0 self.can_stop=True self.press_go=False defrotate_select(self,dt): if(self.current_num>=24): self.current_num=0 self.prize_cycle+=1 if(self.prize_cycle>1andself.can_stop): if(notself.start_slow): #减速 self.unschedule(self.rotate_select) self.schedule_interval(self.rotate_select,self.prize_speed_slow) self.start_slow=True #printself.alread_get_prize #print"stopnum",self.stop_num #print"prize_cycle",self.prize_cycle #print"current_num",self.current_num #printself.current_num #注意rotate_select是要两个参数的 self.sprite.rotation=self.sprite.rotation+15 self.alread_prize_sprite.rotation=self.alread_prize_sprite.rotation+15 ifself.current_numinself.alread_get_prize: self.sprite.do(Hide()) self.alread_prize_sprite.do(Show()) else: self.alread_prize_sprite.do(Hide()) self.sprite.do(Show()) effect=Effect('1.wav') effect.play() if(self.prize_cycle>2andself.stop_num==self.current_numandself.can_stop): self.stop_prize() returnTrue self.current_num+=1 defget_random(self): r=random.randint(0,23) ifrinself.alread_get_prize: r=self.get_random() returnr defgo_prize(self): self.current_num=0 self.sprite.rotation=0 self.alread_prize_sprite.rotation=0 self.prize_cycle=0 self.stop_num=self.get_random() #self.stop_num=0 ifself.stop_numinself.alread_get_prize: self.top_notice.element.text="error,alreadgetprize" returnFalse self.top_notice.element.text="正在抽奖中。。" self.start_slow=False self.can_stop=False self.is_begin=True #定时器 self.schedule_interval(self.rotate_select,self.prize_speed) #self.schedule(self.rotate_select) self.bgsprite.do(Hide()) self.pressbgsprite.do(Show()) defstop_prize(self): self.alread_get_prize.append(self.current_num) self.is_begin=False effect=Effect('2.wav') effect.play() self.top_notice.element.text="" self.pressbgsprite.do(Hide()) self.bgsprite.do(Show()) self.unschedule(self.rotate_select) tests={ 1:StartPrize, } defmain(): director.init(**consts_window) #director.show_FPS=True director.run(get_sprite_test(1)) if__name__=='__main__': main()
PrizeMenu这个本来是想要显示要抽哪个奖的,后来需求中不需要了,就没有继续完善。
开发用的是pythoncocos2d,还要装pyglet,最坑爹的是还要装pygame,cocos2d的音效竟然是用pygame的。
因为是name.png是公司同事的姓名,所以就涂黑了,尊重隐私
下载链接:年会抽奖
dehan_prize_run下的prize.exe就可以运行,用py2exe打包成exe的。。。
prize_src.zip是源码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。