php跳一跳小游戏,原生JS实现的跳一跳小游戏完整实例

本文实例讲述了原生JS实现的跳一跳小游戏。分享给大家供大家参考,具体如下:

以下说的是闲暇编写的一个小游戏--跳一跳,类似于微信的跳一跳,大体实现功能有:

1.先随机生成地图;

2.按住按钮释放后完成动作并进行判断;

首先po一下代码;

代码如下:

跳一跳

*{padding: 0;margin: 0;}

.game{

position: relative;

width: 800px;

height: 400px;

border: 1px solid black;

margin: 0 auto;

}

.game .content{

position: absolute;

width: 700px;

height: 400px;

left: 0;

top: 0;

}

.game #chess{

position: absolute;

width: 40px;

height: 48px;

overflow: hidden;

z-index:99;

transition-property: all;

}

.cylinder{

position: relative;

width: 70px;

height: 101px;

float: left;

}

.cylinder .top{

position: absolute;

width: 70px;

height: 35px;

border-radius: 50%;

background: yellow;

z-index: 4;

}

.cylinder .front{

position: absolute;

width: 70px;

height: 70px;

background: black;

margin-top: 17px;

z-index: 3;

}

.cylinder .bottom{

position: absolute;

width: 70px;

height: 35px;

border-radius: 50%;

background: black;

margin-top: 65px;

z-index: 4;

}

button{

position: absolute;

width: 80px;

height: 30px;

font-size: 16px;

text-align: center;

line-height: 30px;

border-radius: 20%;

bottom: 10px;

right: 10px;

}

.move{

animation-name: jump;

}

/* 跳棋运动动画 */

@keyframes jump{

0%{transform: rotate(0deg);}

10%{transform: rotate(36deg);}

20%{transform: rotate(72deg);}

30%{transform: rotate(108deg);}

40%{transform: rotate(144deg);}

50%{transform: rotate(180deg);}

60%{transform: rotate(216deg);}

70%{transform: rotate(252deg);}

80%{transform: rotate(288deg);}

90%{transform: rotate(324deg);}

100%{transform: rotate(360deg);}

}

@-webkit-keyframes jump{

0%{transform: rotate(0deg);}

10%{transform: rotate(36deg);}

20%{transform: rotate(72deg);}

30%{transform: rotate(108deg);}

40%{transform: rotate(144deg);}

50%{transform: rotate(180deg);}

60%{transform: rotate(216deg);}

70%{transform: rotate(252deg);}

80%{transform: rotate(288deg);}

90%{transform: rotate(324deg);}

100%{transform: rotate(360deg);}

}

@-o-keyframes jump{

0%{transform: rotate(0deg);}

10%{transform: rotate(36deg);}

20%{transform: rotate(72deg);}

30%{transform: rotate(108deg);}

40%{transform: rotate(144deg);}

50%{transform: rotate(180deg);}

60%{transform: rotate(216deg);}

70%{transform: rotate(252deg);}

80%{transform: rotate(288deg);}

90%{transform: rotate(324deg);}

100%{transform: rotate(360deg);}

}

@-moz-keyframes jump{

0%{transform: rotate(0deg);}

10%{transform: rotate(36deg);}

20%{transform: rotate(72deg);}

30%{transform: rotate(108deg);}

40%{transform: rotate(144deg);}

50%{transform: rotate(180deg);}

60%{transform: rotate(216deg);}

70%{transform: rotate(252deg);}

80%{transform: rotate(288deg);}

90%{transform: rotate(324deg);}

100%{transform: rotate(360deg);}

}

按住它

var time = 0,score = 0,prev = 1;

var cylinders = document.getElementsByClassName('cylinder');

var chess = document.getElementById('chess');

var arrLeft = [10,20,30,50];

var arrTop = [210,290];

// 初始函数,入口函数

function init(){

draw();

BindEvent();

};

// 生成地图

function draw(){

var str = '';

for(var n = 0; n < 7; n++){

str +="

}

document.getElementsByClassName('content')[0].innerHTML = str;

for(var m = 0; m < 7; m++){

var Left = arrLeft[Math.floor(Math.random() *arrLeft.length)];

var Top = arrTop[Math.floor(Math.random() * arrTop.length)];

cylinders[m].style.marginLeft = Left + 'px';

cylinders[m].style.marginTop = Top + 'px';

}

// 画棋子

chess.style.marginTop = cylinders[0].offsetTop - 25 + 'px';

chess.style.marginLeft = cylinders[0].offsetLeft + 13 + 'px';

}

// 绑定事件函数

function BindEvent(){

document.getElementById('play').onmousedown = function () {

var timer = setInterval(function () {

time++;

}, 100);

document.getElementById('play').onmouseup = function () {

clearInterval(timer);

chess.classList.add('move');

chess.style.animationDuration = time * 0.1 + 's';

chess.style.transitionDuration = time * 0.1 + 's';

if (cylinders[prev - 1].offsetTop > cylinders[prev].offsetTop) {

var dx = setTran(prev - 1,prev);

chess.style.marginLeft = chess.offsetLeft + time * 15 + 'px';

chess.style.marginTop = chess.offsetTop + time * 15 * dx + 'px';

} else if (cylinders[prev - 1].offsetTop < cylinders[prev].offsetTop) {

var dy = setTran(prev - 1, prev);

chess.style.marginLeft = chess.offsetLeft + time * 15 + 'px';

chess.style.marginTop = chess.offsetTop + time * 15 * dy + 'px';

}else if(cylinders[prev - 1].offsetTop == cylinders[prev].offsetTop){

chess.style.marginTop = chess.offsetTop + 'px';

chess.style.marginLeft = chess.offsetLeft + time * 15 + 'px';

}

chess.addEventListener(getTransition(), function () {

chess.classList.remove('move');

time = 0;

judeg();

chess.removeEventListener(getTransition(), arguments.callee, false);

}, false);

};

};

};

// top和left移动的比例

function setTran(prev,next) {

var d_Top = cylinders[prev].offsetTop - cylinders[next].offsetTop;

var d_Left = cylinders[prev].offsetLeft - cylinders[next].offsetLeft;

return d_Top/d_Left;

}

// 判断动画是否结束

function getTransition() {

var t;

var transitions = {

'transition': 'transitionend',

'OTransition': 'oTransitionEnd',

'MozTransition': 'transitionend',

'WebkitTransition': 'webkitTransitionEnd'

};

for (t in transitions) {

if (chess.style[t] !== undefined) {

return transitions[t];

}

}

};

// 判断是否跳出边界

function judeg() {

for(; prev < cylinders.length;){

// 判断条件

var e_Left = chess.offsetLeft > cylinders[prev].offsetLeft -20 && chess.offsetLeft < cylinders[prev].offsetLeft + 90;

var e_Top = chess.offsetTop + 48 > cylinders[prev].offsetTop && chess.offsetTop + 48 < cylinders[prev].offsetTop + 35;

if( e_Left && e_Top ){

score++;

if(prev >= cylinders.length){

prev = 1;

}else{

prev++;

}

break;

}else{

alert('you lost');

break;

}

}

}

init();

代码主要分为用来绘制圆柱体分布的draw()函数,用来绑定按钮事件的BindEvent()函数,用来监听CSS3动画是否结束的getTransition()函数,用来判断棋子是否出界的函数judeg()函数。而控制棋子运动的距离,主要是通过当你按下按钮时(onmousedown)触发一个定时器函数中的(time的加加),弹起按钮时(onmouseup)棋子的left和top运动距离=设定像素值*time。

为了让棋子运动不那么生硬我添加了一些css3动画(rotate属性)以及transition属性。

实现效果如下:

814549c411df9c85d41a4609880bd301.gif

虽然还有些许不足,但不影响整体功能。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google提出新型学习范式「Deep Memory」,或将彻底改变机器学习领域

图源&#xff1a;pixabay原文来源&#xff1a;arXiv作者&#xff1a;Sylvain Gelly、Karol Kurach、Marcin Michalski、Xiaohua Zhai「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA导语&#xff1a;最近&#xff0c;Google提出了一种称之为Deep Memory的新型学习范式&…

网络 IPC 套接字socket

APUE书中所有实例源码下载地址&#xff1a;http://www.apuebook.com apue学习笔记&#xff08;第十六章 网络IPC&#xff1a;套接字&#xff09;&#xff1a;https://www.cnblogs.com/runnyu/p/4648678.html 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC&#xff1a;套接字…

ASP.NET MVC V2 Preview 1 发布 期望VS有更好的表现

ASP.NET MVC V2 Preview 1官方首页&#xff1a;http://aspnet.codeplex.com/ 在这里可以下载 以下是网友的转载&#xff0c;介绍的还是比较详细的&#xff1a; 预览版是在.NET 3.5 SP1和VS 2008下工作的&#xff0c;可与ASP.NET MVC 1.0并行安装在同一个机器上&#xff08;即&a…

全球最权威的区块链行业报告

来源&#xff1a;腾讯研究院美国加密货币报道媒体CoinDesk近期发布“全球区块链现状报告”&#xff0c;深入研究了快速发展的加密货币行业及其底层技术&#xff0c;该报告覆盖了公共区块链、企业区块链、ICO、投资以及监管等话题&#xff0c;另外还对3000多名投资者的加密货币投…

Google 的 C++ 代码规范

Google 开源项目风格指南 (中文版)&#xff1a;https://zh-google-styleguide.readthedocs.io/en/latest/ 英文版&#xff1a;http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml 中文版&#xff1a;http://zh-google-styleguide.readthedocs.org/en/latest/goog…

NASA投资有远景技术,有望改变未来人类和机器人的勘探任务

来源&#xff1a; 机器人创新生态据NASA官网报道&#xff0c;美国宇航局(NASA)正在投资有远见的技术概念&#xff0c;包括流星撞击探测、太空望远镜群以及细小轨道碎片测绘技术&#xff0c;这些技术将来可能被用于未来的太空探索任务中。美国宇航局已经选出25个还处于早期的技术…

人工智能如何影响社会经济:关于近期文献的一个综述

作者&#xff1a;陈永伟 文章来源&#xff1a;经济学原理 相比于之前的历次技术进步&#xff0c;“人工智能革命”所引发的冲击更为巨大&#xff0c;其对经济学造成的影响也将更为广泛和深远。人工智能技术的突飞猛进&#xff0c;对经济社会的各个领域都产生了重大影响&#…

Spring Data JPA 从入门到精通~Naming命名策略详解及其实践

Naming 命名策略详解及其实践 用 JPA 离不开 Entity 实体&#xff0c;我都知道实体里面有字段映射&#xff0c;而字段映射的方法有两种&#xff1a; 显式命名&#xff1a;在映射配置时&#xff0c;设置的数据库表名、列名等&#xff0c;就是进行显式命名&#xff0c;即通过 C…

激光雷达:从光电技术角度看自动驾驶

来源&#xff1a; 传感器技术激光雷达和与之竞争的传感器技术&#xff08;相机、雷达和超声波&#xff09;加强了对传感器融合的需要&#xff0c;也对认真谨慎地选择光电探测器、光源和MEMS振镜提出了更高的要求。传感器技术、成像、雷达、光探测技术及测距技术&#xff08;激光…

socket的长连接、短连接、半包、粘包与分包

socket的半包&#xff0c;粘包与分包的问题和处理代码&#xff1a;http://blog.csdn.net/qq_16112417/article/details/50392463 知乎关于长连接和短连接&#xff1a;https://www.zhihu.com/search?typecontent&q长连接%20短连接 TCP网络通讯如何解决分包粘包问题&#…

2018年中国人工智能行业研究报告|附下载

来源&#xff1a;网络大数据、艾瑞咨询广义人工智能指通过计算机实现人的头脑思维所产生的效果&#xff0c;是对能够从环境中获取感知并执行行动的智能体的描述和构建;相对狭义的人工智能包括人工智能产业(包含技术、算法、应用等多方面的价值体系)、人工智能技术(包括凡是使用…

Spring Data JPA 从入门到精通~方法的查询策略设置

方法的查询策略设置 通过下面的命令来配置方法的查询策略&#xff1a; EnableJpaRepositories(queryLookupStrategy QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND) 其中&#xff0c;QueryLookupStrategy.Key 的值一共就三个&#xff1a; Create&#xff1a;直接根据方法名…

不用地图如何导航?DeepMind提出新型双路径强化学习「智能体」架构

来源&#xff1a;deepmind、arXiv作者&#xff1a;Piotr Mirowski、Matthew Koichi Grimes、Mateusz Malinowski、Karl Moritz Hermann、Keith Anderson、Denis Teplyashin、Karen Simonyan、Koray Kavukcuoglu、Andrew Zisserman、Raia Hadsell「雷克世界」编译&#xff1a;嗯…

C 和 C++ 宏 详解

From&#xff1a;https://www.cnblogs.com/njczy2010/p/5773061.html C中的预编译宏详解&#xff1a;http://www.cppblog.com/bellgrade/archive/2010/03/18/110030.html C语言的宏总结&#xff1a;http://blog.csdn.net/pirlck/article/details/51254590 C 语言中的 宏定义…

Spring Data JPA 从入门到精通~查询方法的创建

查询方法的创建 内部基础架构中有个根据方法名的查询生成器机制&#xff0c;对于在存储库的实体上构建约束查询很有用&#xff0c;该机制方法的前缀 find…By、read…By、query…By、count…By 和 get…By 从所述方法和开始分析它的其余部分&#xff08;实体里面的字段&#x…

人工智能在能源行业的5个应用

作者&#xff1a;CB Insights . 来源&#xff1a;CometLabs摘要&#xff1a;自2012年以来&#xff0c;把人工智能和能源产业放在一起进行报道的新闻开始增多。本文简要描述了人工智能在能源行业的5个应用方向&#xff0c;及对应的案例。能源行业会产生大量的数据。为了将这些数…

VMware 安装 win7、win10、MAC 和网络模式VMnet0、VMnet1、VMnet8解释

VMware虚拟机安装ghost win7系统方法&#xff1a;http://www.xitongcheng.com/jiaocheng/xtazjc_article_15314.html VMWare14 安装Mac OS系统&#xff08;图解&#xff09;&#xff1a;http://blog.csdn.net/u011415782/article/details/78505422 虚拟机&#xff08;VMware …

Spring Data JPA 从入门到精通~关键字列表

注意除了 find 的前缀之外&#xff0c;我们查看 PartTree 的源码&#xff0c;还有如下几种前缀&#xff1a; private static final String QUERY_PATTERN "find|read|get|query|stream"; private static final String COUNT_PATTERN "count"; private s…

当科学遇上众包:9个值得关注的前沿科技算力众包平台

来源&#xff1a; 资本实验室 . 作者&#xff1a;李鑫找到癌症治疗的方法&#xff0c;预测气候的变化&#xff0c;追踪可能与地球相撞的小行星……甚至预测地震&#xff0c;我们每天都面临着各种世界性难题。如果你想参与解决这些难题&#xff0c;公民科学应用将让你发挥作用…

htop 命令详解

htop 官网&#xff1a;http://htop.sourceforge.net/ Linux top 命令的用法详细详解&#xff1a;https://www.cnblogs.com/zhoug2020/p/6336453.html htop 使用详解&#xff1a;https://www.cnblogs.com/programmer-tlh/p/11726016.html 使用 yum 无法直接安装 htop&#xff…