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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python双向链表实现实例代码
Nov 21 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
python制作抖音代码舞
Apr 07 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
Python如何使用ElementTree解析xml
Oct 12 Python
python Scrapy爬虫框架的使用
Jan 21 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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
理解和运用PHP中的多态性[译]
2011/08/02 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP实现验证码校验功能
2017/11/16 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python中生成Epoch的方法
2017/04/26 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
Python元组常见操作示例
2019/02/19 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
宿舍卫生检讨书
2014/01/16 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
运动员代表致辞
2015/07/29 职场文书
2016教师国培研修感言
2015/12/08 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
php字符串倒叙
2021/04/01 PHP