话不多说,先上效果图:

功能点:

礼品的位置

小怪兽位置的变化(走路、转身和回退)

小怪兽的跳跃弧度

确定好功能点,接下来就是逐个击破:

1、渲染奖品

获取奖品数据后,建一个数组存放奖品的位置,通过遍历数据把奖品循环输出到页面上对应的位置。

.gift{position:relative;}

.gift li{position: absolute;}

//获取奖品

(function getPrize(){

$.ajax({

url:'你家的奖品接口',

success:function(res){

if(res.length == 0)return;

let i=0 ;

for(;i

if(i<8){

positionList.push({top:0,left:i*86+258+margin_left,className:'monster-left'});

}else if(i<11){

positionList.push({top:positionList[i-1].top+86,left:positionList[i-1].left,className:'monster'});

}else if(i<13){

positionList.push({top:positionList[i-1].top,left:positionList[i-1].left-86,className:'monster-right'});

}else if(i<17){

positionList.push({top:positionList[i-1].top+86,left:positionList[i-1].left,className:'monster'});

}else if(i<25){

positionList.push({top:positionList[i-1].top,left:positionList[i-1].left-86,className:'monster-right'});

}else if(i<28){

positionList.push({top:positionList[i-1].top-86,left:positionList[i-1].left,className:'monster-back'});

}else if(i<30){

positionList.push({top:positionList[i-1].top,left:positionList[i-1].left+86,className:'monster-left'});

}else{

positionList.push({top:positionList[i-1].top-86,left:positionList[i-1].left,className:'monster-back'});

}

gift_list += `

${i+1}`;

}

$(".gift").append(gift_list);

},

error:function(){

}

})

})()

复制代码

2、小怪兽的位置变化:

摇完骰子后,判断位置的变化是前进还是后退。后台接口需要返回两个位置的数据,一个是第一次的位置,一个是第二次的位置。判断两个位置是否相等。如果相等,则小怪兽只前进,无后退。否则,小怪兽先到达第一个位置之后,函数回调传入第二个位置,小怪兽再跳到第二个位置。

转身动画。把每个位置小怪兽身体方向记录到奖品位置那个数组里面去,到达位置的同时,追加相应的css改变小怪兽身体的方向。

//obj移动的块,i位置一,tips跳到指定位置后要弹出的内容,gift获得的奖品,indet特殊情况再掷一次的标志,goBack位置二

function go(obj, i, tips, gift, ident, goBack) {

let step = parseInt(i);

if (cur_index > step && cur_index == 33) {

cur_index = 0;

}

setTimeout(function () {

$(obj).removeClass(function () {

return $(obj).attr('class').split(' ').slice(1).join(' '); //除了小怪兽的原来样式,其他转身效果的全部去掉

});

if (cur_index == step) {

setTimeout(function () {

$(obj).addClass('active');

if (ident == 'again') {

//恭喜您,可再掷一次

$(obj).data('tips', tips);

return;

}

if (gift != "") {

//抽中xx奖品

} else {

//没有抽中

}

}

}, 500);

if (goBack) { //有第二个位置

setTimeout(function () {

go($(obj), goBack, "", gift, ident);

}, 1000)

playing = true; //禁止点击开始游戏按钮的标志

return;

}

setTimeout(function () {

playing = false;

}, 1000)

return;

} else if (cur_index > step && step > 6) { //后退是不会大于6步的

fly($(obj), positionList[cur_index - 1], positionList[cur_index - 2]);

$(obj).addClass(positionList[cur_index - 1].className);

cur_index--;

go($(obj), step, tips, gift, ident, goBack);

return;

} else { // 前进

fly($(obj), positionList[cur_index - 1], positionList[cur_index]);

$(obj).addClass(positionList[cur_index].className);

cur_index++;

go($(obj), step, tips, gift, ident, goBack);

}

}, 500);

}

function fly(obj, startPosition, endPosition) { //obj运动的小怪兽

if (startPosition == undefined) {

startPosition = {

left: 0

}

}

if (startPosition.left < endPosition.left) {

setTimeout(function () {

$(obj).css({

'top': endPosition.top - 35,

'left': endPosition.left - 33

});

})

} else if (startPosition.left > endPosition.left) {

setTimeout(function () {

$(obj).css({

'top': endPosition.top - 35,

'left': endPosition.left + 33

});

})

} else {

}

setTimeout(function () {

$(obj).css({

'top': endPosition.top,

'left': endPosition.left

});

}, 200);

}

复制代码

3、 小怪兽跳跃的弧度。

可以采用半步半步的跳法,运动轨迹如下可见。可以做到跳跃的效果。(注意:图中第四个坐标写错了,应该是(120,-40))

核心代码大致就是这样了。

掘金这个代码的编辑器缩进太糟糕了,我已经不想一行行改了,各位自行复制去编辑器里看吧。

可以的话,点个赞吧

最后,欢迎交流

请不要再问我要源代码了,上面的代码已经是精简过的,各个人业务需求不一样,我的源代码也不可能满足你的需求,恕我无能为力。

php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏相关推荐

  1. 如何用纯js做一个大富翁游戏

    下面这张是效果图: 先立个flag,一个星期内把这个坑填了 今天7月1号,建党节,在这个伟大的节日,我来填坑了. 这个游戏有以下几个难点: 1.礼品的位置 2.小怪兽位置的变化(走路.转身和回退) 3 ...

  2. Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...

  3. 2048小游戏html制作,[ 逻辑锻炼] 用 JavaScript 做一个小游戏 ——2048 (详解版)

    前言 这次使用了 vue 来编写 2048,主要目的是温习一下 vue. 但是好像没有用到太多 vue 的东西,==! 估计可能习惯了不用框架吧 之前由于时间关系没有对实现过程详细讲解,本次会详细讲解 ...

  4. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

  5. 如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...

    系列文章 如何使用PaddleDetection做一个完整项目(三) 该文章是PaddleDetection的完结篇,请参考之前两篇文章 https://zhuanlan.zhihu.com/p/10 ...

  6. 纯js单页面赛车游戏

    纯js单页面赛车游戏 这次就是给大家分享赛车的游戏: 废话不多,直接上代码: <!DOCTYPE html> <html> <head><meta chars ...

  7. video.min.js php,使用flv.js与video.js做一个视频直播效果

    这次给大家带来使用flv.js与video.js做一个视频直播效果,使用flv.js与video.js做出视频直播效果的注意事项有哪些,下面就是实战案例,一起来看一下. 环境配置 首先运行livego ...

  8. 纯js封装一个多功能弹出框

    不借助其它的css代码和图片资源,可直接调用. 原创内容,请勿转载. 注意,不要直接复制文章里的封装代码,因为编辑器的原因,无论怎么编辑,它还是给修改了代码.文末提供了封装代码的下载地址(无需积分) ...

  9. 如何用 Node.js 实现一个简单的 Websocket 服务?

    最近正在研究 Websocket 相关的知识,想着如何能自己实现 Websocket 协议.到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console ...

最新文章

  1. Python-OpenCV运动物体检测
  2. python正则取字符串日期_python 正则表达式获取字符串中所有的日期和时间
  3. WebApi2 知识点总结
  4. 标准库中的智能指针shared_ptr
  5. 【学术相关】为什么吐槽导师的帖子几乎全是理工科类?文科的研究生都在干嘛?...
  6. matlab的数学函数,matlab中常见数学函数的使用
  7. STM32线缆综合测试系统
  8. 浮动和清除(闭合)浮动
  9. 在vue 中使用Stylus
  10. TeamTalk UtilPdu详解
  11. Fluent 全流程求解多孔介质算例
  12. 计算机word正文样式怎么新建,Word怎么给格式和样式设定快捷键
  13. 飞行器中传感器测量原理及测量模型
  14. openstack里给云主机配置vip
  15. C. Multiples of Length 思维构造
  16. php永久mediaid,幺蛾子事件之-zabbix配置告警媒介报错mediaid重复
  17. DSP学习(5)—— Timer的使用
  18. ZBrush自带笔刷的特性你都知道哪些?
  19. canvas实现点线动画效果
  20. 音乐服务器制作教程,分享硬盘中的音乐 DLNA服务搭建教程

热门文章

  1. 天下无难试之Redis面试刁难大全「原创」
  2. 各执一词,民用安防市场现状看法PK
  3. Kerberos 协议和 KDC 实现 Apache Kerby
  4. CGContextRef使用简要教程
  5. mongodb基本概念
  6. 新手学跨域之iframe
  7. 10个精妙的Java编码最佳实践
  8. Word 2007怎样生成目录
  9. Exchange日常管理之四:简化OWA的登录
  10. marquee命令的基本用法