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采用getopt解析命令行输入参数实例
Sep 30 Python
Python入门篇之数字
Oct 20 Python
Python中的异常处理学习笔记
Jan 28 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
python正则表达式的使用
Jun 12 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
判断Python中的Nonetype类型
May 25 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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 array的学习笔记
2012/05/10 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
javascript multibox 全选
2009/03/22 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
解析python的局部变量和全局变量
2019/08/15 Python
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
学校领导班子四风问题整改意见
2014/10/02 职场文书
平安建设汇报材料
2014/12/29 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
给朋友的赠语
2015/06/23 职场文书
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python