这个是上个星期5写的了,当时是突然想写个游戏,就想到了别踩白块儿,当时的想法是

可能普通模式的别踩白块儿因为他的“块儿”是滚动的向上这种,以我目前会的技术想不出怎么写,

但是如果是街机模式,通过你每按一次按键之后他像下跳一格这样的就非常好实现了。

  通过我目前会的知识,实现的步骤大概是这样的:

  建一个4X4的表格,制作2张150X100的图片,一张全白色,一张全黑色,命名为0.JPG,1.JPG

就是说当文件名为0的时候就是白色的块,为1的时候就是黑色的块。

  然后先用白色的图片填充表格内所有的TD。然后通过获取表格内的TAGNAME:

  x=document.getElementById("biao");//不要吐槽我的命名方式→_→
  x1=x.getElementsByTagName("img");

这样就可以获取一个图片的数组,这样表格从上到下图片分别是x1[0]至x1[15]。

  接着是我从百度找的一个获取随机数的方法:

function fRandomBy(under, over)
{
//获取随机数方法
switch(arguments.length)
{
case 1: return parseInt(Math.random()*under+1);
case 2: return parseInt(Math.random()*(over-under+1) + under);
default: return 0;
}
}

调用函数通过fRandomBy(最小数,最大数)可以获取指定范围内的一个随机数。

然后就可以声明4个int变量line1,line2,line3,line4 代表表格内的第一行第二行第三行第四行,每行内图片数组的序号就是0-3,4-7,8-11,12-5

line1=fRandomBy(12,15);
line2=fRandomBy(8,11);
line3=fRandomBy(4,7);
line4=fRandomBy(0,3);

接着将获取到随机的每行数字lineX 的图片数组序号,改变他们的SRC为1.jpg

	x1[line1].src="1.jpg";
x1[line2].src="1.jpg";
x1[line3].src="1.jpg";
x1[line4].src="1.jpg";

这样初始化随机黑块就搞定了。

  接着是写一个当你按键按到正确黑块的时候他会跳过这个黑块并产生新的黑块的方法,这里同样通过改变之前声明的LINE变量,将LINE2的值+4赋值给LINE1,LINE3的值+4赋值给LINE2以此类推,LINE4的值重新获取一个随机数。然后重新删除黑块并绑定新的黑块。

function newKuai()
{
//生成新块
deKuai();//先删除所有生成的黑块
line1=line2+4;
line2=line3+4;
line3=line4+4;
line4=fRandomBy(0,3);
x1[line1].src="1.jpg";
x1[line2].src="1.jpg";
x1[line3].src="1.jpg";
x1[line4].src="1.jpg";
fen++;
}
function deKuai()
{
//删除所有黑块
for(var i=0;i<16;i++)
{
x1[i].src="0.jpg";
}
}

  接着就是写一个检验是否按到块的方法,通过检测按到的KEYCODE所在的块是否是1.JPG,如果按错,就会结束游戏并上传分数。。。

function cheKuai(keycode)
{
//判断是否按中块
switch(keycode)
{
case 65:
var i=getName(x1[12].src);
//alert(i);
if(i=="1"){newKuai();}
else{gameover()}
break;
case 83:
var i=getName(x1[13].src);
if(i=="1"){newKuai();}
else{gameover()}
break;
case 75:
var i=getName(x1[14].src);
if(i=="1"){newKuai();}
else{gameover()}
break;
case 76:
var i=getName(x1[15].src);
if(i=="1"){newKuai();}
else{gameover()}
break;
}
}
function gameover()
{
//游戏结束时的操作
alert("你的分数是"+fen);
stopCount();
location.href="action.php?name="+document.getElementById("player").value+"&fen="+fen;
tc=20;
deKuai();
fen=0;
}

  最后就是写一个获取键盘按键指令的方法。。。。(这个我是BAIDU的。。。。

  document.onkeydown=function(event)
{
//检测按键方法
var e = event || window.event || arguments.callee.caller.arguments[0];
if(e && e.keyCode==65)
{ // 按 a
cheKuai(e.keyCode);
}
if(e && e.keyCode==83)
{ // 按 s
cheKuai(e.keyCode);
}
if(e && e.keyCode==75)
{ // 按 k
cheKuai(e.keyCode);
}
if(e && e.keyCode==76)
{ // 按 l
cheKuai(e.keyCode);
}
}

  接着可以写一个计时器,时间到时执行GAMEOVER方法。。。。(这个我也是百度的我就不贴了。。。大家可以去下面的 演示站看源代码)

于是一个超级简易的别踩白块儿就写完了。。。。。。

PS:就连我自己都想吐槽,很多方法。。。应该可以有更好的思路或者写法。。。。。初学JS还有很多地方都不懂,希望大家能和大家多多交流。。。。)

别踩白块儿 演示  (注意 看的黑块应是最下面那行)

初学JS——利用JS制作的别踩白块儿(街机模式) 小游戏的更多相关文章

  1. 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

    游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...

  2. 【cocos2d-x制作别踩白块儿】第一期:游戏介绍

    这一系类文章.我们将来分析时下最火的一款游戏 -- 别踩白块儿. 无图无真相,先上图 这就是我们终于要完毕项目的效果图. 游戏刚開始的最以下有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块 ...

  3. jQuery实践-别踩白块儿网页版

    ▓▓▓▓▓▓ 大致介绍 终于结束了考试,放假回家了.这次的别踩白块儿网页版要比之前做的 jQuery实践-网页版2048小游戏 要简单一点,基本的思路都差不多. 预览:别踩白块网页版 这篇博客并不是详 ...

  4. 用Canvas写一个简单的游戏--别踩白块儿

    第一次写博客也不知怎么写,反正就按照我自己的想法来吧!怎么说呢?还是不要扯那些多余的话了,直接上正题吧! 第一次用canvas写游戏,所以挑个简单实现点的来干:别踩白块儿,其他那些怎么操作的那些就不用 ...

  5. 别踩白块儿游戏源码Android版

    这个项目有带说明文档,大家可以看看源码附件的说明文档吧,“别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们 ...

  6. HTML--JS练习小游戏(别踩白块儿)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 手摸手带你实现 小游戏<别踩白块儿 -- 内有游戏链接>

    别踩白块儿 使用(白鹭引擎)Egret编写的游戏 游戏地址 准备工作 了解白鹭引擎 并安装编写工具 安装游戏引擎 安装Egret Wing3 创建项目 创建项目可以选择不同版本的引擎,创建成功之后还可 ...

  8. 使用canvas通过js制作一个小型英雄抓怪兽的2D小游戏

    首先,这是一个HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. JS实现别踩白块小游戏

    最近有朋友找我用JS帮忙仿做一个别踩白块的小游戏程序,但他给的源代码较麻烦,而且没有注释,理解起来很无力,我就以自己的想法自己做了这个小游戏,主要是应用JS对DOM和数组的操作. 程序思路:如图:将游 ...

随机推荐

  1. winxp如何开启SNMP服务

    1.先安装SNMP组件 开始——>    控制面板——>添加或删除程序——>添加/删除windows组件——>管理和监视工具(前面方框选择后)——>详细信息——>简 ...

  2. IOS 拦截所有push进来的子控制器

    /** * 能拦截所有push进来的子控制器 */ - (void)pushViewController:(UIViewController *)viewController animated:(BO ...

  3. 最终类object 和内部类

    Object 类 性质:[1]是所有类的根类.             [2]如果一个类没有显示继承另外一个类,那么该类一定继承于Object toString() 返回对象的字符串表示形式 特殊:[ ...

  4. redis 系列 在 vs上 set,get 键值

    1.启动两个 cmd,一个用于打开服务,一个用于运行客户端. 详细步骤可见上一篇文章 2.下载nuget的 ServiceStack.Redis;  ,并在using中引用 ,详细步骤可见上一篇文章 ...

  5. Better exception message for missing @RequestBody method parameter

    https://jira.spring.io/browse/SPR-12888 Description When I use @RequestBody on one of my controllers ...

  6. jeDate日期控件

    http://www.jayui.com/jedate/     这是日期控件官网,可以去里面下载使用 前台 <%@ Page Language="C#" AutoEvent ...

  7. react(一):组件的生命周期

    最近兄弟团队让我去帮忙优化两个页面,前端用的react全家桶,后端用的python,上一次写react代码都过去一年了,顺着以前的的学习思路,再捋顺一下react的要点 组件的生命周期就是Reac的工 ...

  8. Oracle 启动 停止JOB

    转自:https://www.cnblogs.com/qianbing/p/6971633.html --查看job下次执行时间以及间隔时间 '; --启动job ); --停用job EXEC DB ...

  9. Python基础之字符串(str)常用操作

    1.字符串常用的方法 len()返回字符串的长度 ##Python3 >>> print(len('ab12我')) 5 ##Python2 >>> print(l ...

  10. JSON 与 XML 的比较 - iOS

    在与 web 服务进行数据交换的时候,通常支持两种主要的数据格式(即:JavaScript 对象表示法 JSON 与可扩展标记语言 XML),两者在可读性上都不分高下,接下来对此进行简单的总结和分析, ...