python实现公司年会抽奖程序


Posted in Python onJanuary 22, 2019

本文实例为大家分享了python实现年会抽奖程序的具体代码,供大家参考,具体内容如下

发一下自己写的公司抽奖程序。

需求:公司年会要一个抽奖程序,转盘上的每一个人名是随机中奖的,中奖后的人不可以再次中奖,按住抽奖,就会一直在转,放开后,要再转一两圈才停。

刚好自己在学python cocos2d,就用这个刚学的东东,直接上源码

# coding:utf-8
# 
import sys
# import os
# sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..'))
# 解决程序中要显示中文问题
reload(sys) 
sys.setdefaultencoding('utf8')
from pyglet import image, font
from pyglet.gl import *
from pyglet.window import key
 
from cocos.actions import *
from cocos.director import director
from cocos.layer import Layer 
from cocos.layer import ColorLayer 
from cocos.scene import Scene
from cocos.sprite import Sprite
from cocos.text import *
from cocos.menu import *
 
import random
from cocos.audio.effect import Effect
consts_window = { 
 "width": 680,
 "height": 700,
 "vsync": True,
 "resizable": True, 
 'audio_backend':'sdl' 
 }
 
 
 
 
def get_sprite_test( index ):
 d = tests[index]
 return Scene( d( index ) )
 
class SpriteLayer( Layer ):
 
 is_event_handler = True #: enable pyglet's events
 
 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
 
 def on_key_release( self, keys, mod ):
 # LEFT: go to previous scene
 # RIGTH: go to next scene
 # ENTER: restart scene
 if keys == key.LEFT:
  self.index -= 1
  if self.index < 1:
  self.index = len( tests )
 elif keys == key.RIGHT:
  self.index += 1
  if self.index > len( tests ):
  self.index = 1
 
 if keys in (key.LEFT, key.RIGHT):
  director.replace( get_sprite_test( self.index ) )
  return True
 
class PrizeMenu(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)
 # print dir(self)
 
 # then add the items
 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())
 
 def on_quit( self ):
 pyglet.app.exit()
 def prize_go( self ):
 s = self.parent
 if s.is_begin:
  s.top_notice.element.text=""
 else:
  # s.stop_num = 1
  s.go_prize()
 
# def main():
 
# pyglet.font.add_directory('.')
 
# director.init( resizable=True)
# director.run( Scene( PrizeMenu() ) )
 
# if __name__ == '__main__':
# main()
 
 
class StartPrize( 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())
 
 
 
 def on_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 ) ))
 
 def on_key_press( self, keys, mod ):
 super(StartPrize,self).on_key_release(keys, mod)
 if keys == key.ENTER:
  if self.is_begin:
  self.top_notice.element.text="正在抽奖中。。"
  else:
  self.press_go = True
  self.go_prize()
  return True
 
 def on_key_release( self, keys, mod ):
 super(StartPrize,self).on_key_release(keys, mod)
 if keys == key.ENTER:
  if self.press_go:
  self.prize_cycle = 0
  self.can_stop = True
  self.press_go = False
  return True
 if keys == key.S:
  # self.stop_prize() 
  return True
 def on_mouse_press (self, x, y, buttons, modifiers):
 px,py = director.get_virtual_coordinates (x, y)
 # print px,py
 if px > 188 and px<450 and py>188 and py<450:
  if self.is_begin:
  self.top_notice.element.text="正在抽奖中。。"
  else:
  self.press_go = True
  self.go_prize()
 def on_mouse_release (self, x, y, buttons, modifiers):
 px,py = director.get_virtual_coordinates (x, y)
 if self.press_go:
  self.prize_cycle = 0
  self.can_stop = True
  self.press_go = False
 
 
 
 def rotate_select(self,dt): 
 
 
 if (self.current_num >= 24):
  self.current_num = 0
  self.prize_cycle += 1 
 
  
 if ( self.prize_cycle > 1 and self.can_stop):
  if( not self.start_slow ):
  # 减速
  self.unschedule(self.rotate_select)
  self.schedule_interval(self.rotate_select, self.prize_speed_slow)
  self.start_slow = True 
 
 # print self.alread_get_prize
 # print "stopnum" , self.stop_num
 # print "prize_cycle" , self.prize_cycle
 # print "current_num" , self.current_num
 # print self.current_num
 # 注意rotate_select是要两个参数的 
 self.sprite.rotation=self.sprite.rotation+15
 self.alread_prize_sprite.rotation = self.alread_prize_sprite.rotation+15
 
 if self.current_num in self.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 > 2 and self.stop_num == self.current_num and self.can_stop):
  self.stop_prize() 
  return True
 
 
 
 self.current_num += 1
 
 def get_random(self):
 r = random.randint(0,23) 
 if r in self.alread_get_prize:
  r = self.get_random()
 return r 
 
 
 
 
 def go_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
 
 if self.stop_num in self.alread_get_prize:
  self.top_notice.element.text="error, alread get prize"
  return False 
 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())
 
 def stop_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,
}
 
def main():
 director.init(**consts_window) 
 # director.show_FPS = True
 director.run( get_sprite_test( 1 ) )
if __name__ == '__main__':
 main()

PrizeMenu这个本来是想要显示要抽哪个奖的,后来需求中不需要了,就没有继续完善。

开发用的是python cocos2d, 还要装pyglet, 最坑爹的是还要装pygame, cocos2d的音效竟然是用pygame的。

因为是name.png是公司同事的姓名,所以就涂黑了,尊重隐私

下载链接:年会抽奖

dehan_prize_run下的prize.exe就可以运行,用py2exe打包成exe的。。。
prize_src.zip是源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的各种排序算法代码
Mar 04 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python实现通讯录功能
Feb 22 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
Python变量类型知识点总结
Feb 18 Python
python使用PyQt5的简单方法
Feb 27 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python绘制随机网络图形示例
Nov 21 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
Python列表推导式实现代码实例
Sep 09 Python
对python函数签名的方法详解
Jan 22 #Python
python实现大转盘抽奖效果
Jan 22 #Python
Python函数返回不定数量的值方法
Jan 22 #Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 #Python
Python Pillow Image Invert
Jan 22 #Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 #Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 #Python
You might like
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP时间和日期函数详解
2015/05/08 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
JavaScript实现数值自动增加动画
2017/12/28 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
JS实现图片切换特效
2019/12/23 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Linux下python制作名片示例
2018/07/20 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
详解Python 切片语法
2019/06/10 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
解决django FileFIELD的编码问题
2020/03/30 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
大学优秀班集体申报材料
2014/05/23 职场文书
宣传活动总结范文
2014/07/01 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
交流会主持词
2015/07/02 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
合作协议书格式范本
2016/03/21 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android