原生js实现的金山打字小游戏(实例代码详解)


Posted in Javascript onMarch 16, 2020

首先先来看一下效果图

原生js实现的金山打字小游戏(实例代码详解)原生js实现的金山打字小游戏(实例代码详解)

如果感兴趣的就来看一下Js源码吧

//计分板
var board = {
 dom: document.getElementById("score"),
 maxLost: 3, //最大丢失量
 lost: 0, //当前丢失了多少个
 score: 0, //当前分数
 render: function() {
 //显示
 this.dom.innerHTML =
  "<p>得分:" +
  this.score +
  "</p><p>丢失:" +
  this.lost +
  " / " +
  this.maxLost +
  "</p>";
 },
 //增加一个丢失数
 addLost: function() {
 if (this.lost === this.maxLost) {
  return; //游戏已经结束了
 }
 this.lost++;
 if (this.lost === this.maxLost) {
  //丢失量达到最大
  game.gameOver();
 }
 this.render();
 },
 reset: function() {
 this.lost = 0;
 this.score = 0;
 this.render();
 },
 //增加得分
 addScore: function(number) {
 if (this.lost === this.maxLost) {
  //已经结束了
  return;
 }
 this.score += number;
 this.render();
 }
};

board.render();

var letters = []; //目前的所有字母,一个字母就是一个对象
//字母的容器
var divContainer = document.getElementById("letter-container");
/**
 * 产生一个字母对象,并将其加入到数组中
 */
function createLetter() {
 //创建img元素
 var img = document.createElement("img");
 img.className = "letter";

 divContainer.appendChild(img);

 //设置src路径
 var charNumber = getRandom(65, 65 + 26); //字母的随机ASCII码
 var char = String.fromCharCode(charNumber);
 img.src = "img/letter/" + char + ".png";

 //left随机
 var left = getRandom(0, divContainer.clientWidth - img.width);
 img.style.left = left + "px";

 var letter = {
 dom: img,
 char: char,
 left: left,
 top: -img.height, //初始的top值
 speed: getRandom(100, 500), //速度: 像素/秒
 render: function() {
  this.dom.style.top = this.top + "px";
 },
 // 每调用一次该方法,字母移动一段距离
 // duration是经过的时间: 秒
 move: function(duration) {
  var dis = duration * this.speed; //计算距离
  this.top += dis;
  this.render();
 },
 kill: function() {
  //自杀
  // 从数组中移除
  var index = letters.indexOf(this); //找到字母在数组中的下标
  if (index >= 0) {
  letters.splice(index, 1);
  }
  // 移除dom元素
  this.dom.remove();
 }
 };

 letter.render();

 letters.push(letter);
}

// 根据最小值和最大值产生一个随机整数(不包含最大值)
function getRandom(min, max) {
 // Math.random() 0~1
 // Math.random() * (max - min) 0 ~ (max - min)
 // Math.random() * (max - min) + min min ~ max
 return Math.floor(Math.random() * (max - min) + min);
}

//游戏对象,统筹规划
var game = {
 timerProduce: null, //自动产生字母的timerid
 timerMove: null, //自动移动的timerid
 isOver: false,
 //自动的,不断的,产生字母
 startProduce: function() {
 if (this.timerProduce) {
  return; //正在产生中,什么也不做
 }
 this.timerProduce = setInterval(createLetter, 500);
 },
 //停止自动产生字母
 stopProduce: function() {
 clearInterval(this.timerProduce);
 this.timerProduce = null;
 },
 //开始不断的移动所有字母
 startMove: function() {
 if (this.timerMove) {
  return;
 }
 var duration = 0.016; //间隔时间,秒
 this.timerMove = setInterval(function() {
  for (var i = 0; i < letters.length; i++) {
  var letter = letters[i]; //要移动的字母
  letter.move(duration);
  //判断该字母是不是可以消除了
  if (letter.top >= divContainer.clientHeight) {
   letter.kill();
   i--;
   //丢失
   board.addLost();
  }
  }
 }, duration * 1000);
 },
 //停止移动所有字母
 stopMove: function() {
 clearInterval(this.timerMove);
 this.timerMove = null;
 },
 gameOver: function() {
 this.stopMove();
 this.stopProduce();
 document.getElementById("over").style.display = "block";
 this.isOver = true;
 },
 restart: function() {
 //清空字母
 for (var i = 0; i < letters.length; i++) {
  var letter = letters[i];
  letter.kill();
  i--;
 }
 this.startMove();
 this.startProduce();
 board.reset();
 this.isOver = false;
 document.getElementById("over").style.display = "none";
 }
};

game.startProduce();
game.startMove();

//注册事件
window.onkeydown = function(e) {
 if (game.isOver) {
 return;
 }
 var key = e.key.toUpperCase();
 //匹配
 for (var i = 0; i < letters.length; i++) {
 var letter = letters[i];
 if (letter.char === key) {
  letter.kill();
  board.addScore(10);
  return; //只移除一个
 }
 }
};

仅仅使用js的面向对象编程,可爱的金山打字小游戏就实现了

总结

到此这篇关于原生js实现的金山打字小游戏的文章就介绍到这了,更多相关js金山打字游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Prototype Function对象 学习
Jul 12 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
javascript学习笔记(八) js内置对象
Jun 19 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
jQuery实现长文字部分显示代码
May 13 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
js实现产品缩略图效果
Mar 10 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 Javascript
微信小程序 Animation实现图片旋转动画示例
Aug 22 Javascript
基于JS实现一个随机生成验证码功能
May 29 Javascript
JavaScript实现拖拽效果
Mar 16 #Javascript
js实现点赞效果
Mar 16 #Javascript
Javascript Web Worker使用过程解析
Mar 16 #Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 #Javascript
JS手写一个自定义Promise操作示例
Mar 16 #Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 #Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 #Javascript
You might like
重料打造自己的“宝马”---第三代
2021/03/02 无线电
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
js 居中漂浮广告
2010/03/21 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
node.js实现端口转发
2016/04/14 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
详解django三种文件下载方式
2018/04/06 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
介绍java中初始化块的使用
2012/09/11 面试题
会计学生自我鉴定
2014/02/06 职场文书
大学班级学风建设方案
2014/05/01 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript