动物世界游戏!!
时间:2014-04-29 22:31:42
收藏:0
阅读:689
前两天跟朋友说起以前玩的DUBO的“动物世界”的游戏,下载了一个android的,觉得不太爽,干脆按照以前玩的感觉自己做了一个,这个版本没有用canvas,主要用css3 的transform 属性,在手机端效率太差劲了,还望高人指点效率迷津。
说明:
1.45秒压点倒计时
2.10秒中奖反馈倒计时
3.随机中奖,先到先得
4.可以用node扩展为多人在线版本
5.效率有待优化
贴上图片:

贴上代码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
<style type="text/css">
.container{
overflow:hidden;
*zoom:1;
}
.main{
float:left;
position:relative;
width:600px;
height:600px;
border:5px solid #efefef;
border-radius: 50%;
box-shadow:3px 3px 3px #ccc;
}
.animals{
position:absolute;
top:0;
left:0;
width:600px;
height:600px;
}
.animal{
position:absolute;
width:45px;
height:45px;
background-color:#efefef;
border-radius:50%;
box-shadow:3px 3px 3px #ccc;
font-size:10px;
text-align:center;
line-height:45px;
}
.colors{
position:absolute;
top:100px;
left:100px;
}
.color{
position:absolute;
width:30px;
height:30px;
background-color:#999;
border-radius:50%;
box-shadow:3px 3px 3px #ccc;
opacity:0.3;
}
.pointer{
position:absolute;
top:100px;
left:100px;
width:400px;
height:400px;
}
.pointer span{
position:absolute;
display:block;
top:0;
left:200px;
width:5px;
height:200px;
background-color:#ff0000;
box-shadow:3px 3px 3px #ccc;
opacity:0.7;
}
.time-left{
position:absolute;
left:248px;
top:272px;
width:100px;
height:50px;
line-height:50px;
border:5px solid #333;
background-color:#fff;
color:#ff0000;
font-size:30px;
font-weight:bold;
text-align:center;
}
.operation{
margin:0 0 0 650px;
border:1px solid #ccc;
}
.masker{
position:absolute;
background-color:#ccc;
opacity:0.5;
}
.operation ul{
list-style:none;
overflow:hidden;
*zoom:1;
}
.operation ul li{
float:left;
margin:0 10px 0 0;
overflow:hidden;
*zoom:1;
}
.operation ul li .btn{
float:left;
color:#fff;
font-weight:bold;
width:100px;
height:100px;
border:1px solid #ccc;
background-color:#333;
text-align:center;
line-height:100px;
cursor:pointer;
}
.operation ul li .data{
margin:0 0 0 100px;
width:50px;
height:100px;
color:#fff;
background-color:#333;
font-weight:bold;
}
.operation ul li .data div{
color:green;
width:50px;
height:50px;
text-align:center;
line-height:50px;
border:1px solid #ccc;
}
.operation ul li .btn{
opacity:0.5;
}
.operation ul li.red .btn{
background-color:red;
}
.operation ul li.yellow .btn{
background-color:yellow;
}
.operation ul li.green .btn{
background-color:green;
}
.records{
overflow:hidden;
*zoom:1;
}
.records .coin{
float:left;
width:100px;
height:50px;
line-height:50px;
text-align:center;
background:#000;
color:green;
font-size:30px;
font-weight:bold;
margin:0 10px 0 0;
}
</style>
</head>
<body>
<div class="container">
<div class="main">
<div class="animals"></div>
<div class="colors"></div>
<div class="pointer">
<span></span>
</div>
<div class="time-left">00</div>
</div>
<div class="operation">
<div class="others"></div>
<div class="mine"></div>
<div class="records">
<span class="coin"></span>
<a href="###">充值</a>
</div>
</div>
<div class="masker"></div>
</div>
<script src="/test/common/jquery.js"></script>
<script src="/test/common/base.js"></script>
<script>
(function($){
var Lionking = DH.Base.create({
elements : {
‘.animals‘ : ‘elAnimals‘,
‘.colors‘ : ‘elColors‘,
‘.pointer‘ : ‘elPointer‘,
‘.time-left‘ : ‘elTimeleft‘,
‘.mine‘ : ‘elMine‘,
‘.operation‘ : ‘elOperation‘,
‘.masker‘ : ‘elMasker‘,
‘.coin‘ : ‘elCoin‘
},
events : {
‘click .j-btn‘ : ‘bet‘
},
tpl : {
mine : {
list : ‘<ul><%=list%></ul>‘,
item : ‘<li class="j-item <%=color%> j-mine-color-<%=colorid%>"> <div class="btn j-btn"><%=animal%></div> <div class="data j-mine-animal-<%=animalid%>"> <div class="multiple">0</div> <div class="times">0</div> </div> </li>‘
}
},
init : function(){
this.radius = 300; // 半径
this.leftTime = 45;
this.$animals = [];
this.animals = [‘panda‘, ‘lion‘, ‘monkey‘, ‘rabbit‘];
this.animalMultiple = [25, 15, 7, 5];
this.$colors = []; // 颜色元素数组
this.colors = [‘red‘, ‘yellow‘, ‘green‘]; // 颜色数组
this.colorMultiple = [10, 8, 5, 2];
this.animalsStartPos = 0;
this.pointerStartPos = 360; // 指针开始位置
this.$currentColor = null; // 当前颜色元素
this.renderMine();
this.setAnimals();
this.setColors();
this.coin = 2000;
this.win = {};
this.resetMultiple();
this.resetCoin();
this.start();
},
bet : function(e){
if(this.coin === 0){
alert(‘没有币了,请充值。‘);
return;
}
var $e = $(e.target),
$item = $e.closest(‘.j-item‘),
$times = $item.find(‘.times‘),
times = +$times.text()
;
$times.text(++times);
this.coin--;
this.resetCoin();
},
resetCoin : function(){
this.elCoin.text(this.coin);
},
renderMine : function(){
var tpl = this.tpl,
tmpl = this.tmpl,
colors = this.colors,
animals = this.animals,
list = [],
item
;
for(var i = 0, len = colors.length; i < len; i++){
item = [];
for(var j = 0, len2 = animals.length; j < len2; j++){
item.push(tmpl(tpl.mine.item, {
color : colors[i],
animal : animals[j],
colorid : i,
animalid : j
}));
}
list.push(tmpl(tpl.mine.list, {
list : item.join(‘‘)
}));
}
this.elMine.append(list.join(‘‘));
},
resetMultiple : function(){
var rnd = Math.random() * 1,
colors = this.colors,
animals = this.animals,
animalMultiple = this.animalMultiple,
colorMultiple = this.colorMultiple
;
for(var i = 0, len = colors.length; i < len; i++){
var $colors = this.el.find(‘.j-mine-color-‘ + i);
for(var j = 0, len2 = animals.length; j < len2; j++){
var multi = Math.ceil(animalMultiple[j] + colorMultiple[i] * rnd + colorMultiple[i]);
$colors.each(function(){
$(this).find(‘.j-mine-animal-‘ + j).find(‘.multiple‘).text(multi);
});
}
}
},
setAnimals : function(){
var radius = this.radius - 30,
animals = this.animals
;
for(var i = 1; i <= 36; i++){
var $animal = $(‘<div>‘).appendTo(this.elAnimals),
theta = (i - 9) * 2 * Math.PI / 36,
left = radius * Math.cos(theta),
top = radius * Math.sin(theta),
rnd = Math.floor(Math.random() * animals.length),
animal = animals[rnd]
;
left += radius + 8;
top += radius + 8;
$animal
.attr(‘data-animal‘, rnd)
.text(animal)
.addClass(‘animal‘)
.css({
left : left,
top : top
})
;
this.$animals.push($animal);
}
},
setColors : function(){
var radius = this.radius - 70;
for(var i = 1; i <= 36; i++){
var $color = $(‘<div>‘).appendTo(this.elColors),
theta = (i - 10) * 2 * Math.PI / 36,
left = radius * Math.cos(theta),
top = radius * Math.sin(theta)
;
left += radius - 46;
top += radius - 46;
$color
.addClass(‘color‘)
.css({
left : left,
top : top
})
;
this.$colors.push($color);
}
},
resetColors : function(){
var $colors = this.$colors,
$ocolors = this.el.find(‘.color‘),
colors = this.colors,
len = $colors.length,
i = 0
;
$ocolors.css({
backgroundColor : ‘#999‘
});
(function reset(){
if(i === len) return;
var rnd = Math.floor(Math.random() * colors.length),
color = colors[rnd]
;
$colors[i]
.attr(‘data-color‘, rnd)
.css({
backgroundColor : color
})
;
i++;
setTimeout(reset, 20);
}());
},
startAnimals : function(){
var self = this,
$animals = this.elAnimals,
i = this.animalsStartPos || 360,
circle = 0,
interval = 10,
stop,
animal
;
(function start(){
if(i === 0){
i = 359;
circle++;
if(circle > 1){
interval += 10;
}
if(circle === 3 && stop === undefined){
stop = Math.floor(Math.random() * 36);
}
}
animal = Math.floor(i / 10);
if(stop && animal === stop){
self.animalsStartPos = i;
self.win.animal = +self.$animals[animal].attr(‘data-animal‘);
self.setWin();
return;
}
$animals.css({
‘transform‘ : ‘rotate(‘+ i +‘deg)‘
});
i--;
setTimeout(start, interval);
}());
},
startPointer : function(){
var self = this,
$pointer = this.elPointer,
$colors = this.$colors,
i = this.pointerStartPos || 0,
circle = 0,
interval = 1,
color,
stop
;
(function start(){
if(i === 360){
i = 0;
circle++;
if(circle > 1){
interval += 10;
}
if(circle === 3 && stop === undefined){
stop = Math.floor(Math.random() * 36);
}
}
color = Math.floor(i / 10);
self.$currentColor && self.$currentColor.css({
opacity : 0.3
});
self.$currentColor = $colors[color];
self.$currentColor.css({
opacity : 1
});
if(stop && color === stop){
self.pointerStartPos = i;
self.win.color = +self.$currentColor.attr(‘data-color‘);
self.setWin();
return;
}
$pointer.css({
‘transform‘ : ‘rotate(‘+ i +‘deg)‘
});
i++;
setTimeout(start, interval);
}());
},
coverNum : function(num){
return typeof num === ‘number‘ && num < 10 ? ‘0‘ + num : num;
},
setWin : function(){
var win = this.win;
if(win.color !== undefined && win.animal !== undefined){
var color = win.color,
animal = win.animal,
$colors = this.el.find(‘.j-mine-color-‘ + color),
$animal,
multiple,
times
;
for(var i = 0, len = $colors.length; i < len; i++){
$colors.eq(i).find(‘.j-mine-animal-‘ + animal).length && ($animal = $colors.eq(i).find(‘.j-mine-animal-‘ + animal));
}
if($animal){
this.$winAnimal = $animal.prev(‘.j-btn‘);
multiple = +$animal.find(‘.multiple‘).text();
times = +$animal.find(‘.times‘).text();
this.coin += multiple * times;
this.resetCoin();
}
this.win = {};
this.resetMultiple();
this.hideMasker();
this.stop();
}
},
clearTimes : function(){
this.el.find(‘.times‘).text(0);
},
showMasker : function(){
var $masker = this.elMasker,
$operation = this.elOperation,
width = $operation.width(),
height = $operation.height(),
offset = $operation.offset()
;
$masker
.show()
.css({
width : width,
height : height,
left : offset.left,
top : offset.top
})
;
},
hideMasker : function(){
this.elMasker.hide();
},
focusWinAnimal : function(){
var self = this,
$animal = this.$winAnimal,
leftTime = this.leftTime
;
(function focus(){
if(leftTime === 0){
$animal.css({
opacity : 0.5
});
$animal.removeAttr(‘data-focus‘);
return;
}
if($animal.attr(‘data-focus‘) === ‘1‘){
$animal.css({
opacity : 0.5
});
$animal.removeAttr(‘data-focus‘);
}else{
$animal.css({
opacity : 1
});
$animal.attr(‘data-focus‘, ‘1‘);
}
leftTime -= 0.5;
setTimeout(focus, 500);
}());
},
start : function(){
var self = this,
leftTime = this.leftTime
;
this.elTimeleft.text(this.coverNum(leftTime));
(function start(){
leftTime--;
self.elTimeleft.text(self.coverNum(leftTime));
if(leftTime === 0){
self.resetColors();
self.startAnimals();
self.startPointer();
self.showMasker();
self.leftTime = 10;
return;
}
setTimeout(start, 1000);
}());
},
stop : function(){
var self = this;
this.elTimeleft.text(this.coverNum(this.leftTime));
this.focusWinAnimal();
(function stop(){
self.leftTime--;
self.elTimeleft.text(self.coverNum(self.leftTime));
if(self.leftTime === 0){
self.leftTime = 45;
self.clearTimes();
self.start();
return;
}
setTimeout(stop, 1000);
}());
}
});
new Lionking();
})(window.jQuery);
</script>
</body>
</html>
评论(0)
