//创建div, 参数className是其类名 function creatediv(className){ var div = document.createElement('div'); div.className = className; return div; } // 创造一个<div>并且有四个子节点<div> function createrow(){ var con = $('con'); var row = creatediv('row'); //创建div className=row var arr = creatcell(); //定义div cell的类名,其中一个为cell black con.appendChild(row); // 添加row为con的子节点 for(var i = 0; i function delrow(){ var con = $('con'); if(con.childNodes.length == 6) { con.removeChild(con.lastChild); } } //创建一个类名的数组,其中一个为cell black, 其余为cell function creatcell(){ var temp = ['cell', 'cell', 'cell', 'cell',]; var i = Math.floor(Math.random()*4);//随机生成黑块的位置 temp[i] = 'cell black'; return temp; }<p><strong>Make the black block move</strong></p> <p>js를 통해 div를 생성하고 제거한 후에는 검은색 블록을 이동시켜야 합니다. 이때 CSS< ;div에 언급된 설정을 사용합니다. id="con"> </p> <div id="row"> 행을 숨기고 js의 DOM을 전달합니다. 아래쪽으로 이동하도록 작동하고 타이머를 30밀리초마다 이동하도록 설정하여 검은색 블록이 이동하는 동안 검은색 블록이 바닥에 닿았는지 확인해야 합니다. 바닥에 닿으면 게임이 실패합니다. move(), 바닥에 닿은 후 실패() 함수를 호출하면 게임이 실패합니다. 구체적인 방법은 다음과 같습니다. <pre class="brush:php;toolbar:false">//使黑块向下移动 function move(){ var con = $('con'); var top = parseInt(window.getComputedStyle(con, null)['top']); if(speed + top > 0){ top = 0; }else{ top += speed; } con.style.top = top + 'px'; if(top == 0){ createrow(); con.style.top = '-100px'; delrow(); }else if(top == (-100 + speed)){ var rows = con.childNodes; if((rows.length == 5) && (rows[rows.length-1].pass !== 1) ){ fail(); } } } function fail(){ clearInterval(clock); confirm('你的最终得分为 ' + parseInt($('score').innerHTML) ); } 点击黑块事件 让黑块动起来之后呢,就要考虑用户有没有点击到黑块,用户若点击到黑块我们要让所在那一行消失,那么就需要一个 judge 方法,具体如下: //判断用户是否点击到了黑块, function judge(ev){ if (ev.target.className.indexOf('black') != -1) { ev.target.className = 'cell'; ev.target.parentNode.pass = 1; //定义属性pass,表明此行row的黑块已经被点击 score(); } }
이 단계에서 몇 가지 핵심 기능 포인트가 구현되었습니다. 완전한 논리 관계를 형성합니다.
완전한 코드
nbsp;html> <meta> <title>别踩白块</title> <style> #score{ text-align: center;} h2 { text-align: center; } div{ margin: 0 auto; width: 100px; height: 100px;} #main { width: 400px; height: 400px; background: white; border: 2px solid gray; margin: 0 auto; position: relative; overflow: hidden;} #con { width: 100%; height: 400px; position: relative; top: -100px; border-collapse:collapse;} .row{ height: 100px; width: 100%;} .cell{ height: 100px; width: 100px; float: left;} .black { background: black;} </style> <h2>score</h2> <h2>0</h2> <div> <div></div> </div> <script> var clock = null; var state = 0; var speed = 4; /* * 初始化 init */ function init(){ for(var i=0; i<4; i++){ createrow(); } // 添加onclick事件 $('main').onclick = function(ev){ judge(ev); } // 定时器 每30毫秒调用一次move() clock = window.setInterval('move()', 30); } // 判断是否点击黑块 function judge(ev){ if (ev.target.className.indexOf('black') != -1) { ev.target.className = 'cell'; ev.target.parentNode.pass = 1; //定义属性pass,表明此行row的黑块已经被点击 score(); } } // 游戏结束 function fail(){ clearInterval(clock); confirm('你的最终得分为 ' + parseInt($('score').innerHTML) ); } // 创建div, className是其类名 function creatediv(className){ var div = document.createElement('div'); div.className = className; return div; } // 创造一个<div class="row">并且有四个子节点<div class="cell"> function createrow(){ var con = $('con'); var row = creatediv('row'); //创建div className=row var arr = creatcell(); //定义div cell的类名,其中一个为cell black con.appendChild(row); // 添加row为con的子节点 for(var i = 0; i < 4; i++){ row.appendChild(creatediv(arr[i])); //添加row的子节点 cell } if(con.firstChild == null){ con.appendChild(row); }else{ con.insertBefore(row, con.firstChild); } } // 根据id来get DOM元素 function $(id) { return document.getElementById(id); } // 创建一个类名的数组,其中一个为cell black, 其余为cell function creatcell(){ var temp = ['cell', 'cell', 'cell', 'cell',]; var i = Math.floor(Math.random()*4); temp[i] = 'cell black'; return temp; } //让黑块动起来 function move(){ var con = $('con'); var top = parseInt(window.getComputedStyle(con, null)['top']); if(speed + top > 0){ top = 0; }else{ top += speed; } con.style.top = top + 'px'; if(top == 0){ createrow(); con.style.top = '-100px'; delrow(); }else if(top == (-100 + speed)){ var rows = con.childNodes; if((rows.length == 5) && (rows[rows.length-1].pass !== 1) ){ fail(); } } } // 加速函数 function speedup(){ speed += 2; if(speed == 20){ alert('你超神了'); } } //删除某行 function delrow(){ var con = $('con'); if(con.childNodes.length == 6) { con.removeChild(con.lastChild); } } // 记分 function score(){ var newscore = parseInt($('score').innerHTML) + 1; $('score').innerHTML = newscore; if(newscore % 10 == 0){ speedup(); } } init(); </script>
관련 추천:
흑백 주사위 놀이 게임 HTML5 웹 버전의 샘플 코드 공유